ほんとの手

主に開発や仕事のメモクリップ

iPhone 3GS の最新 iOS 6.1.6 の開発環境を今更 Xcode 7.0.1 に準備する

きっかけ

ひょんなことから手持ちの iPhone3GS, iPhone4 などを活用したくなったので。 旧 OS に長く対応するのは最近のトレンドからも Apple の習わしからも外れているが、あえて挑戦。

準備

f:id:syque:20151021201443p:plain

とりあえず何も考えずに Xcode を起動してプロジェクトを作成。バージョンは 7.0.1。

f:id:syque:20151021201557p:plain

iOS シミュレータのデバイスを探すも、一番古いもので iPhone4S。いきなり立ちはだかる壁。

古い Xcode をダウンロードして iOS 6.x の SDK を持ってくる

Xcode5にiOS SDK 7.0と6.1を共存させる(iOS SDK 6.1を追加でインストールする)|めっとぼ

Xcode の過去バージョンをダウンロードする方法 - Qiita Downloads for Apple Developers

上記リンクを参考に Xcode 4.6.3 をダウンロードする。 SDK はコピーできたが、Simulator はコピーの他に設定ファイルの書き換えも必要ぽい?

Xcode 6.1 に iOS Simulator 8.0 を移植する - Qiita

とりあえず sdk 6.1 は認識するようになったので、これで。 やはり OS も 6.1 環境がないと微妙なので、後でやり方を探ってみる。

サンプルコード

プロジェクトの新規作成をしてみたが、Base SDK を 6.1 に切り替えるだけで途端にビルドできなくなる。 6.1 当時のサンプルコードを引っ張ってくるのがよいか、、、

iOS Developer Library

サンプルコード置き場から iOS sdk 4.0 でビルドされた helloworld プロジェクトがあったので、 それを使うことにした。

一通り Xcode でプロパティ値などを設定した上でビルドしてみるとエラーが出る。

iOS9でアプリが起動直後にクラッシュする場合の回避方法 - Qiita

上記と同様、rootViewController が無いために起こるエラーだった。 上記の HelloWorld サンプルコードでは以下のように直す必要があったので修正。

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    
    // Set up the view controller
    MyViewController *aViewController = [[MyViewController alloc] initWithNibName:@"simplefm" bundle:[NSBundle mainBundle]];
    self.myViewController = aViewController;
    [aViewController release];
    
    self.window.rootViewController = [UIViewController new];

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
    
    // Add the view controller's view as a subview of the window
    UIView *controllersView = [myViewController view];
    [self.window addSubview:controllersView];
    [self.window makeKeyAndVisible];
}

ライブラリの管理

生産性ガチアゲなオープンソースiOSライブラリ(終):iOSライブラリ管理の神ツール「CocoaPods」のインストールと使い方 (1/2) - @IT

CocoaPods がよく使われている? とりあえず調べていてすぐ目についたので利用。

データベース

Selection 9: iOSでSQLiteを使う(FMDB)

iOS - 次世代mobile版データベース"Realm"を使ってみた - Qiita

CoreData は扱いにくかったので別の DBMS を検討したい。 FMDB と Realm。Realm のが高機能そうだけど、諸般の事情で FMDB を選択。