1

アプリケーションの「ライト」バージョンと「プロ」バージョンを作成するプロセスを簡素化するために、Xcodeで複数のターゲット用にビルドしようとしています。GCC_PREPROCESSOR_DEFINITIONS理論的には、これは素晴らしいことであり、コードで使用するために定義を渡すことができます。ただし、シミュレータで2番目のターゲットを起動しようとしたときにエラーが発生したため、実際に機能させるのに問題があります。Failed to launch simulated application: Unknown error.

追加のターゲットを作成するために使用している簡単なプロセスは次のとおりです。

  1. #ifdef MYAPP_PROをソースファイルに追加して、アプリのプロ/ライトバージョンに基づいて動作を変更します(アプリケーションが期待どおりに機能していることを確認します)
  2. Projectメニューから>を選択New Target...し、「Cocoa TouchApplication」(MyAppProという名前)を選択します
  3. 新しいターゲット設定を編集します。GCC_PREPROCESSOR_DEFINITIONSユーザー定義の設定を追加し、値を「MYAPP_PRO」に設定します(引用符なし)
  4. アクティブなターゲットを「MyAppPro」に設定します。ビルドして実行します。
  5. Failed to launch simulated application: Unknown error.
  6. すべての設定をInfo.plistからMyAppPro-Info.plistにコピーして、再試行してください
  7. 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;
        };
4

2 に答える 2

5

実際にソースファイルをターゲットに追加したことがあるかどうかはわかりませんでした。新しいターゲット(新しいプロジェクトとは異なり)には、ソースファイルテンプレートがありません。自分で追加する必要があります。したがって、シミュレーターは「正常にビルドしましたが、実行するものは何もありません」と言っている可能性があります。

于 2009-04-05T01:07:46.043 に答える
0

ターゲットを複製します。私はちょうど同じ間違いを犯し、自分がやったことに気づきました.「新しいターゲット」が作成するものは白紙の状態です(これはすぐにはわかりませんが).何かを含めようとしても、おそらく何かを見落とす.

于 2011-01-21T12:51:53.583 に答える