iOS5 Feature List

August 20, 2011 § Leave a comment

iOS 5 will support the iPhone 3GS and 4, the third- and fourth-generation iPod touch, and all iPads. I’m listing features that are listed in WWDC coverage.

  • Notification appear in smaller animated bar that slides down from the top screen
  • New Notification Center that combine all notifications
  • Lock screen displays notifications that goes directly to the app
  • Software updates over the air
  • New iMessage app sending text, photo, video, contact, group messaging with iOS devices
  • Delivery receipt, read receipts and iChat-like indication on Messaging
  • Safari Reader view only content of articles
  • Safari Reading List save for later reading
  • Tabbed browsing is available to iPad
  • New Newsstand app for periodicals
  • Newsstand support background download overnight
  • Single-sign-on for Twitter
  • Twitter support on Photo, Safari, YouTube, Map app
  • Automatic update Twitter usernames for contact in Address book
  • New Task/list app
  • Task alert is date-based or location-based
  • Double-tap Home button to launch camera
  • Music playback control to launch camera
  • Volumn up button to take picture
  • Grid line to compose photo
  • Pinch-to-zoom for digital zooming
  • Auto-focus locking on photo
  • Auto-exposure locking on photo
  • Crop, rotate, red-eye reduction, one-click enhance on photo
  • Rich Text formatting on mail
  • Full-message search on mail online or offline
  • Send encrypted mail using S/MIME
  • OS-level support for turn-based games
  • Purchase and download games within Game Center
  • Social recommendation on Game Center
  • System wide built-in dictionary
  • Split keyboard for iPad for thumb typers
  • AirPlay mirroring to your Apple TV
  • Wi-Fi iTunes sync
  • New multitouch gestures to flick between apps
  • New iPad Music app
  • Personal dictionary support
  • Hourly weather forecasts
  • Typing shortcuts
  • Alternate routes in maps
  • Voiceover options
  • Wireless sync for Exchange tasks
  • FaceTime mid-call invitation alerts
  • Improved FaceTime video quality
  • Mass configuration
  • Real-time stock quotes
  • Custom vibration patterns
  • Accessible input for mobility
  • Improved offline support in Mail
  • Voiceover item chooser
  • Option to speak text
  • Set tones for voicemail, mail, and calendar alerts

Interesting Facts:

  • Safari on iOS accounts for almost 2/3 of mobile web browsing
  • Its engine (based of Android web browser) accounts for nearly 90% of all mobile browsing

TinyUmbrella – Restore device iOS version

August 20, 2011 § Leave a comment

Apple warns that you can’t restore back to previous iOS version if you upgrade to iOS 5 on your developer device. Why? Apple only allows you to restore to the firmwares they ‘sign’. This ‘signing’ only lasts for a limited time. Once they stop ‘signing’ the SHSHs for a firmware, there is no way to restore that firmware ever again.

TinyUmbrella is a tool you can use to restore device iOS. TinyUmbrella which does not require you to be jailbroken. TinyUmbrella sends the SHSH request through Cydia’s servers which turn around and request the SHSH from apple. This results in your SHSH being saved on Cydia and then also locally on your home computer.

Download TinyUmbrella

Xcode 4.0 Error: Apple Match-O Linker(Id) Error “…”, referenced from:

April 8, 2011 § 6 Comments

Upgrading to Xcode 4.0 from Xcode 3.0 requires some work. This is a very common error. The fix is simple but it takes a while to identify the source.


Apple Match-O Linker(Id) Error “…”, referenced from:

ld: warning: directory ‘/Users/UserName/Development/Project/frameworks’ following -F not found


  • Enter FRAMOWORK_SEARCH_PATHS into the search box
  • Remove that directory from the “framework search paths” in the build settings for the project, or for that target

Another Error:

ld: warning: directory not found for option ‘-L/Users/UserName/Desktop/student/../../../../Downloads/ProjectName/ClassName/lib/Debug-iphoneos’

-L is for specifying additional library search path directories. The directory it mentions in the error doesn’t exist.

In the given folder look into the project settings. Update the current directory for the current version of the SDK. Use above fix.

Xcode 4.0 Error: No architectures to compile for – Facebook iOS SDK

April 7, 2011 § 3 Comments

Upgrading Xcode projects from Xcode 3.x to Xcode 4.0 are not that simple. It does involve a lot of “detective” work like solving murder mystery.

In this case it happens on Facebook iOS SDK sample project. The codes work perfectly fine in Xcode 3 yet the same code won’t run in Xcode 4.0 Simulator. After trying many suggestions from Apple Developer Forum, I found the only working solution.

[EROR] No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv6).

“No architectures to compile for” means “Valid Architectures” field is empty. Update it to $(ARCHS_STANDARD_32_BIT) and you’ll see the usual armv6 armv7. This happens in XCode 4 after updating “Base SDK” to “Latest SDK”.


  • Select Project in the Navigator left panel in Xcode 4
  • Select Targets
  • In Build Settings, enter VALID_ARCHS in the search box to show Valid Architectures
  • Enter $(ARCHS_STANDARD_32_BIT) in the value column
  • It should show armv6 armv7
  • Run

Constant in Objective-C

March 2, 2011 § Leave a comment

This is a very tricky task to handle constants in Objective-C. The most suggested approach is to define global, public or private constants. This will work only if you don’t expect to put the same constant inside a loop.

In the header file

// Constants.h
extern NSString * const strConstant;

You can include this file in each file that uses the constants or in the pre-compiled header for the project.

// Constants.m
NSString * const
= @"Constant";

Constants.m should be added to your application/framework’s target to link it to product.

It is suggested that the advantage of using string constants instead of #define‘d constants is that you can test for equality using pointer comparison (stringInstance == strConstant) which is much faster than string comparison ([stringInstance isEqualToString:strConstant]).

// Constants.h
#define MY_CONSTANT @"my_constant"

Or even better
// Constants.h
extern NSString * const MY_CONSTANT;
// Constants.m
NSString * const MY_CONSTANT = @"my_constant";

If you need a non global constant, you should use static keyword. Static constant is not visible outside the file.

// Constants.m
static NSString * const CONSTANT = @"my_constant";

Another quick dirty way of declaring global constants is to put constant declaration into pch file instead of .h or .m files.

To declare integer instead of string in Objective-C, you will use NSInteger. This is Apple preferred way of declaring Objective-C integer.

NSInteger const counter = 0;

However if you are going to use this method to declare NSInteger and use it inside a loop, then you are in trouble.


Assignment of read-only variable ‘counter’

If you need to use a constant inside a IF statement and iterate the constant inside a class instance or method, you would have to use static keyword.

You can add static int outside @implement.

static int counter = 0;

– (void)showTimer {
counter += 1;

UITableView Hello World

May 24, 2010 § 1 Comment

Usually writing a tutorial blog takes a lot of time and effort to document every step and explain all details. I have seen many HelloWorld app that show very little on how iPhone app and SDK work. I include the best HelloWorld tutorial and example I found.

These are the most important building blocks of iPhone App. However usually developers don’t start with new app and may be working on existing app. Sometimes developers never get to build new View Controller and/or view. You won’t remember all the details in each step. It’s nice to reference this kind of Hello World example.

It’s nice to see how a navigation-based app with minimal functionality and show how the navigation bar and button work.

UITableView Hello World

Add View Controller and View and Back Button to HelloWorld

Note: Remember setText is deprecated in OS 3.2 and warning will appear in this Hello World example.

Populating UITableView with NSArray

I am including code snippet to show how to gain access to UIApplication delegate to return the NSArray object in UITable row.

In RootViewController.m

// Customize the number of rows in the table view.
– (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

// Gain access to Application delegate
HelloNavigationAppDelegate *appDelegate = (HelloNavigationAppDelegate *)[[UIApplication sharedApplication] delegate];
// Return no of rows based on no. of objects in array
return appDelegate.fruits.count;


// Customize the appearance of table view cells.
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @”Cell”;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

// Gain access to Application delegate
HelloNavigationAppDelegate *appDelegate = (HelloNavigationAppDelegate *)[[UIApplication sharedApplication] delegate];
Fruit *f = (Fruit *)[appDelegate.fruits objectAtIndex:indexPath.row];
cell.textLabel.text =;

// Configure the cell.
return cell;

I have rewritten the UITableView Hello World sample in iPhone SDK 3.2 and replaced the deprecated API that no longer support UITableView. You can download the latest version here

UITableView deprecated setText in iPhone SDK 3.0

May 24, 2010 § Leave a comment

By default Navigation-based app use UITableView.

In RootViewController.m, you would declare the no. of row in tableView: method. Here you increase the row from 0 to 1 to display one row.

// Customize the number of rows in the table view.
– (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 1; // Modify from 0 to 1

cell.text and setText: are deprecated in iPhone SDK 3.2. It would give you warning but error in red.

So don’t use:

[cell setText:@”Next View”];

cell.text = @”Next View”;

Use cell.textLabel.text = @”Next View”;

// Customize the appearance of table view cells.
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @”Cell”;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

// Added
cell.textLabel.text = @”Next View”;

// Configure the cell.
return cell;

Where Am I?

You are currently browsing the iphone OS & SDK Upgrade category at Web Builders.