如果我在构建配置中添加了用户定义的设置,我该如何在Objective-C代码中读取该设置?
我的项目中有两个文件,debug.plist
和release.plist
。我希望我的MainApp.m
文件根据正在运行的构建配置读取其中一个文件。我在Debug和Release配置中设置了一个名为“filename”的用户定义设置,指向相应的文件。但我不知道我的MainApp.m
文件如何从当前运行的配置中读取filename变量。
答案 0 :(得分:37)
这就是我所做的,我不能100%确定这是你所追求的:
创建用户定义的设置,例如:
MY_LANG -> en_us
然后,在预处理器宏的设置中,您可以引用该值:
LANGCODE="$(MY_LANG)"
现在您可以在所有源文件中引用LANGCODE,它将是您在自定义构建设置中填写的任何内容。我意识到这里存在一定程度的间接,但在我的情况下这是故意的:我的XCode项目包含一堆具有自己的预处理器宏的不同目标/配置。我不想进入所有这些,只是为了更改语言代码。实际上,我在项目级别定义了语言代码。我也在几个脚本中使用MY_LANG,所以只是一个预处理器宏不会。可能有一种更聪明的方式,但这对我有用。
答案 1 :(得分:14)
您可以在运行时访问用户定义的构建设置(如@JWWalker的评论中所示)
在MySetting -> ${MYSETTING}
文件中添加一个条目,并将其设置为用户定义的构建设置
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"MySetting"];
从代码中读取其值
<Context path="/my-project/images/" docBase="/data/myproject/cache/images/" />
答案 2 :(得分:8)
您的代码无法读取任意构建设置。您需要使用预处理器宏。
编辑:例如,在Debug配置的目标设置中,您可以在预处理器宏构建设置中添加DEBUGGING=1
,而不在Release配置中定义DEBUGGING。然后在您的源代码中,您可以执行以下操作:
#if DEBUGGING
use this file
#else
use the other one
#endif
答案 3 :(得分:7)
雨燕4
让我们说“文件名”是您在应用程序中所需的字符串。
将filename = YOUR_STRING添加到用户定义的设置中(用于调试和发布)。
然后将filename = $ {filename)添加到info.plist。
然后用Swift代码:
let filename = Bundle.main.infoDictionary?["filename"] as! String
答案 4 :(得分:6)
我尝试了 zmippie 建议,但它对我不起作用。
我得到了它的工作:
${MY_LANG}
答案 5 :(得分:0)
如果其他人仍在寻找如何处理预处理器宏,请在Build Settings中查找Apple LLVM - Preprocessing部分。在它下面,您将看到一个名为Preprocessor Macros的部分。
默认情况下,Xcode会为调试版本配置插入DEBUG = 1宏。
您可以在此处添加自己的值,并为调试,发布和您可能拥有的任何自定义构建配置提供不同的值。
要添加一个,请双击所需配置的当前值列表,它将显示一个漂亮的小编辑器,每行有一个宏。只需添加您自己的宏名称,并以与DEBUG完成相同的方式为其赋值。
可以在预处理器构建阶段使用#if,#iff等检查这些,以提供条件代码或值。
希望有所帮助。