Xcode中的多个目标:“无法启动模拟应用程序:未知错误。”

时间:2009-04-04 17:28:09

标签: iphone objective-c xcode ios-simulator

我正在尝试在Xcode中构建多个目标,以简化创建应用程序的“精简版”和“专业版”的过程。从理论上讲,这很好,我可以将定义传递给GCC_PREPROCESSOR_DEFINITIONS以便在我的代码中使用。但是,由于尝试在模拟器中启动第二个目标时出错,我实际上遇到了问题:Failed to launch simulated application: Unknown error.

以下是我用来创建其他目标的简单流程:

  1. 将#ifdef MYAPP_PRO添加到源文件,以根据app的pro / lite版本修改行为(并验证应用程序是否按预期工作)
  2. 选择Project>从菜单中选择New Target...,然后选择“Cocoa Touch Application”(名为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.
  8. 构建完成得很好,但我无法在模拟器中运行。

    编辑.xcodeproj目录中的project.pbxproj,我注意到两个目标定义的构建设置之间存在一些关键差异。我尝试手动编辑文件,但一定做错了,因为我之后无法在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;
            };
    

2 个答案:

答案 0 :(得分:5)

您没有说明您是否真的将源文件添加到目标。新目标(与新项目不同)没有源文件模板;你必须自己添加它们。所以模拟器可能会告诉你“你已经成功建造,但没有任何东西可以运行。”

答案 1 :(得分:0)

复制目标。我犯了同样的错误并意识到我做了什么:“新目标”创建的是一个空白的板块(虽然这不是很明显),即使你试图包含你可能会遗漏的东西。