xcode 4.5 how to pick storyboards at launch xcode 4.5 how to pick storyboards at launch xcode xcode

xcode 4.5 how to pick storyboards at launch


This is a great question.

What you need to do is,

  1. Select your current 4/4s storyboard, go to File, duplicate, then give it an iPhone 5 specific name.Make sure that Target and your app name is checked.

  2. Next you have to select the scenes in your storyboard and in the Attributes Inspector change the size to Retina 4 Full Screen.This allows you to rearrange everything for this display.

  3. Finally in application didFinishLaunchingWithOptions paste the following code with the storyboard name you gave for your 4 inch storyboard.

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){    UIStoryboard *storyBoard;    CGSize result = [[UIScreen mainScreen] bounds].size;    CGFloat scale = [UIScreen mainScreen].scale;    result = CGSizeMake(result.width * scale, result.height * scale);    if(result.height == 1136){        storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_5" bundle:nil];        UIViewController *initViewController = [storyBoard instantiateInitialViewController];        [self.window setRootViewController:initViewController];    }}return YES;}

If anyone don't get how to do step 1, do as below.

  1. Go to Project directory and copy paste the MainStoryboard.storyboard and rename new storyboard to say MainStoryboard5.storyboard.

  2. Add this new storyboard MainStoryboard5.storyboard in project (in Xcode) by right clicking Project and clicking Add Files to ....

  3. Now we have two storyboards in xcode.

Tip

You may have to use 'Product > Clean' for this to work after you have done all the above.


Currently the only way is to check if you're using the iPhone 5 is the [UIScreen mainScreen] bounds] and [[UIScreen mainScreen] scale].

BOOL isIphone5 = (([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) && (([UIScreen mainScreen].bounds.size.height * [[UIScreen mainScreen] scale]) >= 1136));

This only works if you have at least added a Default-568h@2x.png launch image to your application. Else this will always return false. (Because the screen will be letterboxed if you don't have the launch image)

To set the storyboard to your iPhone 5 version you might want to take a look at this question


I took inspiration on fields.cage answer and adapted it to my code, it works fine. Thanks !!

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){        UIStoryboard *storyBoard;        CGSize result = [[UIScreen mainScreen] bounds].size;        CGFloat scale = [UIScreen mainScreen].scale;        result = CGSizeMake(result.width * scale, result.height * scale);        if(result.height == 1136){             self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone5" bundle:nil] autorelease];        }        else        {             self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease];        }    }