xcconfig文件中的预处理宏

6

在配置文件中使用宏是可能的吗?我想要实现类似于:

if iPad
set variable to 1
else
set variable to 0

这是否可行?我宁愿不使用脚本来实现。


请查看:https://dev59.com/UGvXa4cB1Zd3GeqPHUEN#13541297 - Nike Kov
3个回答

9
你通常应该在运行时而不是编译时检查这个。请参见iOS - conditional compilation (xcode)
如果你不用这种方式,我通常建议如@Robert Vojta所示使用不同的目标。
话虽如此,我可以想象在某些共享代码中这可能会有用。所以...
有一个xcconfig变量可以使用,叫做TARGETED_DEVICE_FAMILY。它返回1表示iPhone和iPod Touch,2表示iPad。这可以用来创建一种宏。我并不强烈推荐这种方法,但是这里是如何做到的。假设你正在尝试设置一个名为SETTINGS的值:
// Family 1 is iPhone/iPod Touch. Family 2 is iPad
SettingsForFamily1 = ...
SettingsForFamily2 = ...
SETTINGS = $(SettingsForFamily$(TARGETED_DEVICE_FAMILY))

我在我的项目中已经多次使用过这个技巧(不是为了检测iPad而是其他问题)。每一次尝试,都有更多的思考帮助我找到更简单的解决方法(通常是重新构造项目,以消除需要该技巧的情况)。但是这是一种在xcconfig中创建条件语句的技术。


1
这是一个很好的提示!谢谢,但如果TARGETED_DEVICE_FAMILY标志是通用的,即返回1,2,你该怎么办? - John Lane

5
据我所知,这是不可能的。但如果您想解决简单的任务-许多常见设置和仅有少量变量具有不同的值,您可以这样做:
generic.xcconfig:
settings for both configs

ipad.xcconfig:

#include "generic.xcconfig"
ipad-specific-settings

iphone.xcconfig

#include "generic.xcconfig"
iphone-specific-settings

这可以满足您的需求。我经常使用这个模式。

0

这是不可能的。配置文件不会被预处理(和编译)。您想要做什么?


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