【发布时间】:2012-11-27 14:19:34
【问题描述】:
是否可以从我的 Info.plist 文件中的 prefix.pch 文件中读取一个值并根据该值设置一个宏?
例如,如果我在 Info.plist 中有一个名为 UseSomeResource 的布尔属性,如果该属性的值为 YES,我想创建一个 #define USE_SOME_RESOURCE 1。
【问题讨论】:
标签: ios xcode cocoa-touch plist info.plist
是否可以从我的 Info.plist 文件中的 prefix.pch 文件中读取一个值并根据该值设置一个宏?
例如,如果我在 Info.plist 中有一个名为 UseSomeResource 的布尔属性,如果该属性的值为 YES,我想创建一个 #define USE_SOME_RESOURCE 1。
【问题讨论】:
标签: ios xcode cocoa-touch plist info.plist
理论上是的,尽管我不认为 .pch 是放置它的最佳位置。我建议将此宏放在您在 .pch 中导入的 Macros.h 或类似机制中
#define USE_SOME_RESOURCE ([[[[NSBundle mainBundle] infoDictionary] objectForKey:@"UseSomeResource"] boolValue])
More about .pch can be read here
值得注意的是,这仍然会在运行时确定值,而不是在编译时。如果您希望它在编译时运行,您可能需要编写一个脚本作为构建阶段之一的一部分,该脚本读取 Info.plist,并创建一个头文件,然后将其作为项目的一部分包含在内。这似乎是一种迂回的方法,因此我强烈建议使用运行时替代方法。
【讨论】:
UseSomeResource 属性的值。这个想法是有一个#ifdef 宏,这样我们的执行就不会被不必要的检查所污染。但这真的有意义吗?我的意思是,#ifdef 在编译时被调用,所以我猜我不能将它与在运行时确定的值一起使用。无论如何,如果这是在运行时完成的,我可能会坚持当前的解决方案。