在Xcode 10中添加预处理器宏

10

我正在尝试将预处理宏添加到我的Xcode项目中。这个项目共享了Swift和Objective-C代码,所以我不能使用Swift编译器 -> 其他Swift标志,因为那样我就无法从Objective-C代码中读取它们。

我在我的应用程序主目标和项目中都设置了以下内容:

enter image description here

然后,在我的应用程序的第二个目标(我的Today扩展)下,我设置了IS_MAIN = 0。

enter image description here

但是,当我运行这段代码时:

#if IS_MAIN
    print("main: true")
#else
    print("main: false")
#endif

它从来没有打印正确的结果。

我该如何添加这个预处理器标志,使得我的Swift和Objective-C文件都能够遵守它?目前它在两种类型的文件中都不起作用。

3个回答

12

实现你所需的功能有两种方式。阅读这篇文章来了解更多关于预处理器和Swift的内容。

基本上,在Xcode 8之前,你需要在Build设置中添加所需的标志到其他Swift标志中。像这样添加。注意"-D选项"

enter image description here

在Xcode 8之后,苹果公司新增了另一个称为Active Compilation Conditions的设置,你可以在其中添加你的预处理器宏而无需使用"-D"选项,Swift将能够识别它。

在这两种情况下,都不需要添加值=1。你只需在一个配置中提及标志,在另一个中不提及即可,并且你的#if条件将工作。


是的,在“Active Compilation Conditions”下添加它而不包括=1是正确的。我以为我的Objective-C代码无法获取此信息,因为它说“Swift编译器”,但显然我是错误的。 - jjjjjjjj

8
您需要设置 Swift 自定义标志才能访问 Swift 中的预处理器。
如果您不想为多个架构设置预处理器宏,那么您只需像这样使用即可。 enter image description here 例如,在我的调试方案中,我将GEO=1设置为值1。
在 Objective-C 中访问没有问题,但在 Swift 中访问需要在 Swift 的其他标志中公开它,如下所示。
在您的情况下,您需要添加 -DIS_MAIN 到自定义标志中。
希望对您有所帮助! enter image description here

3
在“活动编译条件”下添加以下内容:

输入图像描述

最初的回答已经包含在内。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接