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

Chr*_*hen 7 xcode ios

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

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

[TestFlight takeOff:@"67bebb8d8e5396a...A4LjQwNjQ4NA"];
Run Code Online (Sandbox Code Playgroud)

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

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

Cal*_*leb 10

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

相关Xcode设置的图片


Riv*_*202 6

这是一篇旧文章,但想分享另一种实现这一目标的方法。

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

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

BuildConfiguration_main.swift添加到主要目标。

struct BuildConfiguration {
    static let isMainTarget = true
    static let isUITestTarget = false
}
Run Code Online (Sandbox Code Playgroud)

BuildConfiguration_UITest.swift添加到 UITest 目标。

struct BuildConfiguration {
    static let isMainTarget = false
    static let isUITestTarget = true
}
Run Code Online (Sandbox Code Playgroud)

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