クライアントごとに個別のターゲットを設定することをお勧めします。機能については、最初にターゲット設定 ([ビルド] タブの [プリプロセッサ マクロ] の下) でクライアントを識別するマクロを設定し、次に次のような FeatureDefines.h ファイルを作成することをお勧めします。
#ifdef macroClientA // assume client A wants features 1 and 3
# define macroFeature1
# define macroFeature3
#endif
// and similarly for the other clients
今、あなたは使用することができます
#import featureDefines
#ifdef macroFeature1
機能 1 が必要かどうかをテストする必要がある場所。
個別のアイコンについては、ターゲット設定でクライアントごとに異なる info.plist ファイルを指定でき、それらのファイルはアイコンに別のファイル名を指定できます。
個別のスプラッシュ スクリーンの場合、iOS では常にスプラッシュ スクリーンに Default.png という名前を付ける必要がありますが、プロジェクト ディレクトリの別のサブディレクトリに入れることができます。Xcode で「グループとファイル」と表示されている場所を右クリックし、[ターゲット メンバーシップ] を選択してから、使用するもののチェックボックスをオンにし、他のものをオフにすることで、どのターゲットにどれを使用するかを制御できます。
リソースについては、次のようにリソース ファイルに名前を付けることをお勧めします。
resourceName.ext // クライアント固有のリソースがない場合に使用される汎用リソース
resourceName-clientName.ext // クライアント固有のリソース
次に、次のような一般的なリソース ファインダー メソッドを設定します。
-(NSString *) resourcePathForResourceName: (NSString *) resourceName extension: (NSString *) ext {
NSString *clientName;
#ifdef macroClientA
clientName = @"clientA";
#endif // and similarly for the other clients
NSString *clientSpecificName = [NSString stringWithFormat: @"%@-%@.%@", resourceName, clientName, ext];
NSString *genericName = [NSString stringWithFormat: @"%@.%@"];
if ([[NSFileManager defaultManager] fileExistsAtPath: clientSpecificName])
return clientSpecificName;
else if ([[NSFileManager defaultManager] fileExistsAtPath: genericName])
return genericName;
else
// handle the error
}
そのメソッドを使用してすべてのリソース ファイル グラブを実行すると、コードを 1 行も変更することなく、クライアント固有のリソースをプロジェクトに追加できます。