使用Swift区分两个Xcode目标

Joã*_*aço 18 xcode ios swift

如何用Swift区分两个Xcode目标?我们的想法是在Xcode中使用相同的代码库制作免费和付费版本的应用程序.

目标CI可以使用预处理器宏,但使用Swift则不可用.

小智 32

在Xcode中,进入目标的构建配置.找到名为Swift Compiler - Custom Flags的部分,其中包含一个名为Other Swift Flags的设置.

为编译器添加一个命令行标志来添加一个标志,就像你使用C编译器一样.

Swift编译器标志

现在你已经-D Something被传递给了Swift编译器.在Swift代码中,您现在可以执行以下操作:

#if Something
    let foo = "bar"
#endif
Run Code Online (Sandbox Code Playgroud)

它看起来很像C预处理器,但与C不同,所有条件部分中的所有代码都必须在语法上正确,否则程序将无法编译.因此,您可以在构建设置中的每个目标上设置一个标志,并在代码中使用它们.

  • 更重要的是,`#if`,active或no中的所有代码也必须是*完整*语法单元.所以你不能把一个`#if /#else /#endif`放在一个`func`声明周围,并将函数体留在`#if`之外. (3认同)

Joã*_*aço 9

从Xcode 8开始,您可以在Active Compilation Conditions下的每个目标的Build Settings中设置编译条件.

活动编译条件截图

有了这些设置,您可以使用:

#if FREE
   //do something
#endif
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅i40west的答案和评论.