.xcconfig? 如何设置环境variables

我是Xcode的新手。

我花了最后两天试图找出如何testing我的iPhone上访问Web服务的应用程序。 在模拟器上,我可以使用一个硬编码的“localhost”variables,但我不想硬编码所有的configuration设置。

我使用的是Swift + Xcode 6,但我认为这与Xcode 5是一样的。

我看了很多文章,我想我应该使用.xcconfig,但它是非常不清楚的。

例如,我创build了一个Environment.xcconfig文件。 我用它填充它

 API_BASE_URL = "http://localhost:4000/api/v1" 

然后我进入了Project – > Info并将Debugconfiguration文件设置为Environment

然后我尝试通过${API_BASE_URL}访问代码中的variables,但是我Use of unresolved identifier 'API_BASE_URL'

这是非常令人沮丧的。 有任何想法吗?

  1. 设置configuration层次结构,如果你有豆荚configuration: 在这里输入图像说明

或者如果你根本没有任何豆荚,configuration层次结构将如下所示: 在这里输入图像说明

  1. 为每个configuration文件创build所有的键值对(在这种情况下,dev / adhoc / appstore构build有3个configuration文件)。 每个configuration文件都有一组相同的密钥: 在这里输入图像说明

  2. 将每个键添加到生成器: 在这里输入图像说明

  3. 然后只需使用代码中的键: 在这里输入图像说明

PS:以这种方式生成的密钥在.swift文件中也是可以识别的(确保你的Swift项目中有一个桥接头,即使你不使用obj-c源代码也是空的)。

更新为Swift 2.2:不再工作了 Swift 2.2:GCC_PREPROCESSOR_DEFINITIONS常量不再导入

你不需要.xcconfig ; 存储Xcode的设置。 相反,你需要一个属性列表( .plist )文件。 为此,请按command-N创build一个新文件,然后selectiOS > Resources > Property List 。 使用plist编辑器添加键,值和值types。 然后通过在您的应用程序的某处添加以下行来加载您的属性:

 if let filePath = NSBundle.mainBundle().pathForResource("Latin Conjugations", ofType:"plist") { let plist = NSDictionary(contentsOfFile:filePath) } 

您可以通过plist词典访问您的属性,就像您使用其他任何字典值一样。 请注意,这不是一个Swift Dictionary ,因为它没有一个构造函数需要加载一个文件path。

更新10/21/2015:这个答案现在是Swift 2.0兼容。 pathForResource()现在返回一个Optional。