如何访问用户定义的Xcode构建设置?

时间:2010-10-19 13:36:53

标签: objective-c xcode

如果我在构建配置中添加了用户定义的设置,我该如何在Objective-C代码中读取该设置?

我的项目中有两个文件,debug.plistrelease.plist。我希望我的MainApp.m文件根据正在运行的构建配置读取其中一个文件。我在Debug和Release配置中设置了一个名为“filename”的用户定义设置,指向相应的文件。但我不知道我的MainApp.m文件如何从当前运行的配置中读取filename变量。

6 个答案:

答案 0 :(得分:37)

这就是我所做的,我不能100%确定这是你所追求的:

  1. 进入构建设置面板,然后选择左下方的齿轮图标:添加用户自定义设置
  2. 创建用户定义的设置,例如:

    MY_LANG -> en_us
    
  3. 然后,在预处理器宏的设置中,您可以引用该值:

    LANGCODE="$(MY_LANG)"
    
  4. 现在您可以在所有源文件中引用LANGCODE,它将是您在自定义构建设置中填写的任何内容。我意识到这里存在一定程度的间接,但在我的情况下这是故意的:我的XCode项目包含一堆具有自己的预处理器宏的不同目标/配置。我不想进入所有这些,只是为了更改语言代码。实际上,我在项目级别定义了语言代码。我也在几个脚本中使用MY_LANG,所以只是一个预处理器宏不会。可能有一种更聪明的方式,但这对我有用。

答案 1 :(得分:14)

您可以在运行时访问用户定义的构建设置(如@JWWalker的评论中所示)

  1. MySetting -> ${MYSETTING} 文件中添加一个条目,并将其设置为用户定义的构建设置

    [[NSBundle mainBundle] objectForInfoDictionaryKey:@"MySetting"];
    
  2. 从代码中读取其值

    <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等检查这些,以提供条件代码或值。

希望有所帮助。