アプリケーションの「ライト」バージョンと「プロ」バージョンを作成するプロセスを簡素化するために、Xcodeで複数のターゲット用にビルドしようとしています。GCC_PREPROCESSOR_DEFINITIONS理論的には、これは素晴らしいことであり、コードで使用するために定義を渡すことができます。ただし、シミュレータで2番目のターゲットを起動しようとしたときにエラーが発生したため、実際に機能させるのに問題があります。Failed to launch simulated application: Unknown error.
追加のターゲットを作成するために使用している簡単なプロセスは次のとおりです。
- #ifdef MYAPP_PROをソースファイルに追加して、アプリのプロ/ライトバージョンに基づいて動作を変更します(アプリケーションが期待どおりに機能していることを確認します)
Projectメニューから>を選択New Target...し、「Cocoa TouchApplication」(MyAppProという名前)を選択します- 新しいターゲット設定を編集します。
GCC_PREPROCESSOR_DEFINITIONSユーザー定義の設定を追加し、値を「MYAPP_PRO」に設定します(引用符なし) - アクティブなターゲットを「MyAppPro」に設定します。ビルドして実行します。
Failed to launch simulated application: Unknown error.- すべての設定をInfo.plistからMyAppPro-Info.plistにコピーして、再試行してください
Failed to launch simulated application: Unknown error.
ビルドは問題なく完了しますが、シミュレーターで実行できません。
.xcodeprojディレクトリのproject.pbxprojを編集すると、2つのターゲット定義のビルド設定にいくつかの重要な違いがあることに気付きました。ファイルを手動で編集しようとしましたが、後でXcodeにロードできなかったため、何か問題があったに違いありません。
元のターゲットの「デバッグ」ビルド設定:
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = YES;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = YES;
PREBINDING = NO;
SDKROOT = iphoneos2.2.1;
};
新しいMyAppProターゲットの「デバッグ」ビルド設定:
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/UIKit.framework/Headers/UIKit.h";
INFOPLIST_FILE = "MyAppPro-Info.plist";
INSTALL_PATH = "$(HOME)/Applications";
OTHER_LDFLAGS = (
"-framework",
Foundation,
"-framework",
UIKit,
);
PREBINDING = NO;
PRODUCT_NAME = MyAppPro;
SDKROOT = iphoneos2.2.1;
};