1. ibtoolをカスタムで起動させる。
まず、 “Build Phases” -> “Copy Bundle Resource” から拡張子が “.storyboard” となっているファイルを外します。
次に ”Build Phases” -> “Run Script” に追加して以下のように書き込みます。
ibtool --errors --warnings --notices --minimum-deployment-target 5.0
--output-format human-readable-text --compile
'Sample/Storyboard.storyboardc'
'Sample/Storyboard.storyboard'

このコマンドの出力ファイルは Storyboard.storyboardc です。最後に “c” が追加されています。
シュミレータでアプリがインストールされるディレクトリを参照して頂ければ、Storyboardのファイルはこのように最後に “c” の付いたファイルになっている事が確認出来ると思います。
Storyboard.storyboardc を追加します。
また念のために “Build Phases” -> “Copy Bundle Resource” でこのファイルがコピー対象になっている事も確認します。
2. AppMainAppDelegate.mを書き換えます。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSString *reqSysVer = @"7.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) {
// iOS 7.0 or later
UIStoryboard* storyboard;
NSString* storyboardFile;
storyboardFile = @"Storyboard";
storyboard = [UIStoryboard storyboardWithName:storyboardFile bundle:nil];
self.tabBarController = [storyboard instantiateInitialViewController];
}
else {
// Override point for customization after application launch.
UIViewController *viewController1 = [[[AppMainFirstViewController alloc] initWithNibName:@"AppMainFirstViewController" bundle:nil] autorelease];
UIViewController *viewController2 = [[[AppMainSecondViewController alloc] initWithNibName:@"AppMainSecondViewController" bundle:nil] autorelease];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = @[viewController1, viewController2];
}
_window = [UIWindow alloc];
_window = [_window initWithFrame:[UIScreen mainScreen].bounds];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
この例ではxcodeのabBarのテンプレートから生成されるコードを元に追加変更しています。
3. iOS7への移行を考える
これを書いている時点ではまだWWDCも終わっていません。ですのでまだどんなサプライズがあるかはわかりません。しかし今の時点で出てきている部分だけを見てもUIに関しては大きな変更が加わっています。ある意味、総取っ替えの感もあります。もちろんUIButtonなどの今までのクラスは引き続き使う事は出来ます。ですが外観が大きく変わり、サイズも変わっています。全体の整合性を取るためにはiOS7以前と後ではUIを別の物として考えた方が良いのではないかとさえ思います。
XcodeもDeveloper Previewの段階ですのでまだ使い勝手が良くなるのかもしれません。
しかし既に幾つかのアプリをリリースしてしまっている側としてはマイグレーションの方法を早めに見つけておいた方が良いかと思います。
この例ではNIBを使った今までのコードにStoryboardを加えたわけですが、すでにStoryboardを使って開発しているアプリも、iOS7以前と以後のStoryboardを分けて実装する事も可能となります。








Leave a Reply