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

cgvd09ve  于 2023-11-21  发布在  其他
关注(0)|答案(6)|浏览(101)

如果我在构建配置中添加了一个用户定义的设置,我如何在Objective-C代码中读取该设置?
我的项目中有两个文件,debug.plistrelease.plist。我希望我的MainApp.m文件根据正在运行的构建配置来读取其中一个文件。我设置了一个名为“filename”的用户定义设置在Debug和Release组态中,都指向适当的档案。但是我不知道我的MainApp.m档案如何从目前执行的档案中读取filename变数。配置.

zy1mlcev

zy1mlcev1#

我是这么做的,我不确定这是不是你想要的:
1.进入构建设置面板,选择左下方的齿轮图标:添加用户定义的设置
1.创建用户定义的设置,例如:

MY_LANG -> en_us

字符串
1.然后,在预处理器宏的设置中,您可以引用该值:

LANGCODE="$(MY_LANG)"


现在你可以在所有的源文件中引用LANGCODE,它将是你在自定义构建设置中填写的任何内容。我意识到这里有一定程度的间接性,但在我的例子中这是故意的:我的XCode项目包含了一堆不同的目标/配置,它们有自己的预处理器宏。我不想为了改变语言代码而进入所有这些。事实上,我在项目级别定义语言代码。我也在几个脚本中使用MY_LANG,所以 * 仅仅 * 一个预处理器宏是不行的。可能有更聪明的方法,但这对我来说很有效。

c6ubokkw

c6ubokkw2#

您可以在运行时访问用户定义的构建设置(如@JWWalker的评论中所建议的)
1.向Info.plist文件中添加一个条目,并将其设置为用户定义的构建设置

MySetting -> ${MYSETTING}

字符串
1.从代码中读取其值
Objective-C

[[NSBundle mainBundle] objectForInfoDictionaryKey:@"MySetting"];

**[Edit]**Swift

guard let mySetting = 
  Bundle.main.object(forInfoDictionaryKey: "MySetting") as? String 
    else { print("MySetting not found") }

oyt4ldly

oyt4ldly3#

Swift 4
假设“文件名”是你在应用程序中需要的字符串。
将filename=YOUR_STRING添加到用户定义的设置中(用于调试和发布)。
并将filename = $(filename)添加到info. plist。
在Swift代码中:

if let filename = Bundle.main.infoDictionary?["filename"] as? String {
    // do stuff with filename
} 
else {
    // filename wasn't able to be casted to String
}

字符串

u0njafvf

u0njafvf4#

您的代码无法读取任意生成设置。您需要使用预处理器宏。
编辑:例如,在配置的目标设置中,您可以在预处理器宏构建设置中添加DEBUGGING=1,而不在发布配置中定义DEBUGGING。然后在源代码中,您可以执行以下操作:

#if DEBUGGING
  use this file
#else
  use the other one
#endif

字符串

jdg4fx2g

jdg4fx2g5#

我试过这个小建议,但对我不起作用。
我是用这个做的:

${MY_LANG}

字符串

bwntbbo3

bwntbbo36#

如果其他人仍然在寻找如何做预处理器宏,请在Build Settings中查找Apple LLVM - Preprocessing部分。在它下面,您将看到一个名为Preprocessor Macros的部分。
默认情况下,Xcode在这里插入DEBUG=1宏用于调试构建配置。
你可以在这里添加你自己的,并为调试、发布和任何你可能拥有的自定义构建版本给予不同的值。
要添加一个宏,双击当前值列表,它会显示一个漂亮的小编辑器,每行一个宏。只需添加您自己的宏名,然后给予一个值,就像调试一样。
这些可以在预处理器构建阶段使用#if,#ifdef等进行检查,以提供条件代码或值。
希望能帮上忙。

相关问题