【问题标题】:Swift: Multiple targets handling: macros not workingSwift:多目标处理:宏不起作用
【发布时间】:2018-01-11 02:07:34
【问题描述】:

来自参考 How to handle multiple targets in XCode using swift language?https://www.appcoda.com/using-xcode-targets/

我创建了三个目标,每个目标都有不同的包 ID 和应用程序图标。我还在“其他 swift 标志”中添加了不同的标志 -> 自定义 swift 标志部分

喜欢

对于第一个目标,我添加了 "-DGOLD" , 对于第二个目标,我添加了 "-DSILVER" 和 第三个目标我添加了 “-DPLATINUM”

在 AppDelegate 中我写了一段代码

#if GOLD
print ("Gold")
#elseif SILVER
print ("Silver")
#else
print ("Platinum")
#endif

仅供参考,I am using Xcode 8.3

我尝试运行第一个目标,我总是得到“白金”。请告诉我如何正确获取标志

【问题讨论】:

  • 您是在寻找#ifdef 吗?
  • @Larme '#ifdef' 我猜是客观的 c 语法..
  • 我很确定你在阻止之后需要#endif,但我不确定它是否相关。
  • 另见this post

标签: ios xcode macros targets


【解决方案1】:

对于 Xcode 8 及更高版本,使用构建设置/Swift 编译器 - 自定义标志中的 Active Compilation Conditions 设置。

这是用于将条件编译标志传递给 Swift 编译器的新构建设置。 只需添加这样的标志:GOLDSILVER 等,没有 -D 等。 然后用这样的编译条件检查它:

#if GOLD
//
#elseif SILVER
//
#else
//
#endif

【讨论】:

  • 是的,这是正确的。很简单。
【解决方案2】:

我正在使用 Xcode 9。 我遇到了同样的问题,找了几个小时的答案,终于找到了解决方案。 在每个 Target,Build Settings -> Other Swift Flags,我添加了想要的标志,如下所示:

目标1 -> -DTARGET1

目标2 -> -DTARGET2

然后在我的代码中使用:

#if TARGET1
//
#elseif TARGET2
//
#endif

【讨论】:

    猜你喜欢
    • 2020-10-14
    • 1970-01-01
    • 2014-04-17
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2019-04-05
    相关资源
    最近更新 更多