こんにちは、 株式会社ジェネシックス の徐 廷(@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をビルドできるはずです。ビルドしてみましょう。

コンパイル成功したので、このライブラリを使えるようになりました。では、早速この共通モジュールを使用するコンシューマプロジェクトを作りましょう。

