如何根据目标名称进行条件编译?

时间:2012-02-27 03:53:00

标签: ios xcode

我在我的项目中使用testflightapp.com SDK来跟踪在testflightapp.com上进行的beta测试期间的崩溃。我的Xcode项目中有2个目标,分别是“ad-hoc”和“app store”。

要启动testflight SDK,我需要在AppDelegate.m中放下一行代码,如:

[TestFlight takeOff:@"67bebb8d8e5396a...A4LjQwNjQ4NA"];

现在,我希望编译器在编译目标“app store”时排除这行代码,因为在公开时触发testflight SDK是没有意义的。

我期待像#ifdef这样的东西,但我无法通过搜索论坛获得线索。

2 个答案:

答案 0 :(得分:10)

您可以使用在每个目标的构建设置中设置的user-defined build setting,然后使用#if#ifdef指令来测试该设置。例如,选择“ad-hoc”目标,单击“Build Settings”,然后向下滚动到“User-Defined”部分。然后只需单击“添加构建设置”按钮,然后选择“添加用户定义的设置”。您可以为每个构建配置(调试,发布等)设置不同的设置值。

Picture of relevant Xcode settings

答案 1 :(得分:0)

这是一个古老的帖子,但想分享另一种方法来实现。

解决方案就像创建几个(取决于您有多少目标)具有相同类/函数/变量但添加到不同目标的文件。

像我一样,我有主要目标和UITest目标,所以我有以下两个文件

BuildConfiguration_main.swift已添加到主要目标。

struct BuildConfiguration {
    static let isMainTarget = true
    static let isUITestTarget = false
}

BuildConfiguration_UITest.swift已添加到UITest目标。

struct BuildConfiguration {
    static let isMainTarget = false
    static let isUITestTarget = true
}

然后在代码中,如果您在两个目标之间共享一些代码,则可以使用BuildConfiguration.isMainTargetBuildConfiguration.isUITestTarget来告诉代码目标在哪里运行。