Xcode 9.1升级到Swift 4中断#ifdef

时间:2017-11-03 05:04:13

标签: swift xcode

我有一个用Swift 3编写的项目,其中散布着许多#if ... #else个;他们只检查由我的xcode项目设置的某个变量(用-D编译器标志定义),以了解该项目是在xcode中构建还是与包管理器一起构建,并相应地进行一些导入。例如,

#if XCODE_BUILD
// do some imports that work when built with xcode
#else
// do some imports that won't work when built with xcode
#endif

代码通过任一方法构建都很好。

但是,当我选择升级到Swift 4的选项(提供的选项之一 - "最小化推理"或"匹配Swift 3行为")时,代码无法编译,以便迁移失败。似乎#if未被尊重或XCODE_BUILD变量未被定义,因为失败发生在从Xcode构建时不应发生的导入中。

Swift 4是否与#if做了不同的事情?在进行迁移时,Xcode是否以某种方式不定义编译器标志?

2 个答案:

答案 0 :(得分:2)

您可以使用#if#else#endif,从而产生:

#if XCODE_BUILD
// do some imports that work when built with xcode
#else
// do some imports that won't work when built with xcode
#endif

Apple docs here

可以在此处找到另一个有一些额外细节的答案:https://stackoverflow.com/a/24152730/118091

答案 1 :(得分:0)

以前,我使用的是其他Swift Flags'在Xcode中构建设置以通过' -DXCODE_BUILD'。显然,该设置对Swift 4不起作用。有效的新设置是“活动编译条件”。 (它应该设置为包含XCODE_BUILD,不需要-D标志)。