こんにちは、 株式会社ジェネシックス の徐 廷(@TonnyXu)です。文章が長くなりますので、5回に分けてお届けします。
今回は、1回目となります。
その1
■ 共通プロジェクトを作る
その2
■ コンシューマPJを作る
■ コンシューマPJで共通プロジェクトを引用
その3
■ 引用する後コンシューマPJでの必須設定
その4
■ コンシューマPJを実行する
その5
■ さらに
・ 共通プロジェクトに単体テストを追加
・ オープンソースライブラリを作る
複数のiPhoneアプリを開発する場合、自分が書いたソースコードの中で共通性が高いコードを抽出して共有したくなると思います。特にSubversionなどのでソースコード管理を行っている場合は、共通モジュールのソースコードを分散させるのは大変だと思います。今日はジェネシックスの共通モジュールのベストプラクティスを紹介します。
- 共通モジュール :複数のプロジェクトに共通の機能
- 共通プロジェクト :共通モジュールを管理しているプロジェクト
- コンシューマプロジェクト/PJ :共通モジュールを使用するプロジェクト
さて、共通プロジェクトを作る目的と目標をまとめましょう。
- 共通モジュールを 管理し易くする ため
- 任意のコンシューマプロジェクトで共通モジュールを使える
- 共通モジュールの更新はすべてのコンシューマプロジェクトに自動的に反映される
- 共通モジュールがSubversionなどのSCMで管理できる。
- 単体テストできる。
本文の最後にも書いていますが、この共通プロジェクトの作り方は、オープンソースのライブラリを作るときにも適用できます。
【サンプルコードをダウンロード】
本文で使用しているサンプルコードです。
私のMac OS X Snow Leopardの環境言語は英語に設定しています。画面キャプチャなどもすべて英語表記となっております。何卒ご了承ください。
■ 共通プロジェクトを作る
図1:共通モジュールのプロジェクトタイプ
図1でLibraryカテゴリののStatic Libraryを選択し、次の画面で名前を入力してください。
図2:共通プロジェクトの名前
保存をすると、共通プロジェクトが図3のように出来上がります。
例えば、現在実行しているデバイスがiPadかどうかを判断する共通メソッドを作りたい場合は、まず、新しいクラスを追加しましょう。
新しいクラスは「GCDevice」という名前にしました。ちなみに、GCは G enesix C ommonのという意味です。
図6のように、ヘッダーファイル中に、staticなメソッドを追加します。名前は「 isIPad
」,戻り値は BOOL
です。
次はクラス「 UIDevice
」を使うために、「 UIKit.framwork
」をプロジェクトに追加します。
次は
.m
ファイルに isIPad
のソースコードを追加します。
下記は図8のソースコードです。
GCDevice.m
// // GCDevice.m // Common // // Created by Tonny Xu on 10/05/26. // Copyright 2010 genesix, Inc. All rights reserved. // #import "GCDevice.h" #import <UIKit/UIKit.h> @implementation GCDevice #ifndef UI_USER_INTERFACE_IDIOM @interface UIDevice (ThingsIKnow) - (int)userInterfaceIdiom; @end #define UI_USER_INTERFACE_IDIOM() ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? [[UIDevice currentDevice] userInterfaceIdiom] : UIUserInterfaceIdiomPhone) #define UIUserInterfaceIdiomPhone 0 #endif + (BOOL)isIPad { static BOOL isPad = NO; static BOOL determined = NO; if (!determined) { isPad = (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone); determined = YES; } return isPad; } @end
これで共通プロジェクトcommonをビルドできるはずです。ビルドしてみましょう。
コンパイル成功したので、このライブラリを使えるようになりました。では、早速この共通モジュールを使用するコンシューマプロジェクトを作りましょう。