我正在尝试在 Xcode 中为多个目标构建,以简化创建我的应用程序的“精简版”和“专业版”版本的过程。从理论上讲,这很棒,我可以将定义传递给GCC_PREPROCESSOR_DEFINITIONS
我的代码中使用。但是,由于尝试在模拟器中启动第二个目标时出错,我实际上无法使其正常工作:Failed to launch simulated application: Unknown error.
这是我用来创建附加目标的简单过程:
- 将#ifdef MYAPP_PRO 添加到源文件以根据应用程序的 pro/lite 版本修改行为(并验证应用程序是否按预期工作)
- 从菜单中选择
Project
>New Target...
,然后选择“Cocoa Touch Application”(名为 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,我注意到两个目标定义的构建设置之间存在一些关键差异。我尝试手动编辑该文件,但一定是做错了什么,因为之后我无法将它加载到 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;
};
Thew 新的 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;
};