.xcconfig?如何设置环境变量

时间:2014-07-10 04:02:54

标签: ios xcode swift

我是Xcode的新手。

我花了两天时间试图弄清楚如何在我的iPhone上测试我的应用程序来访问网络服务。在模拟器上,我可以使用硬编码的“localhost”变量,但我不想对所有配置设置进行硬编码。

我正在使用Swift + Xcode 6,但我认为这与Xcode 5的过程相同。

我查看了很多文章,我认为我应该使用.xcconfig,但是它很不清楚。

例如,我创建了一个Environment.xcconfig文件。我用

填充它
API_BASE_URL = "http://localhost:4000/api/v1"

然后我进入了Project - >信息并将调试配置文件设置为Environment

然后我尝试通过${API_BASE_URL}访问代码中的变量,但我得到了Use of unresolved identifier 'API_BASE_URL'

这非常令人沮丧。有什么想法吗?

2 个答案:

答案 0 :(得分:7)

  1. 如果您有pods配置,请设置配置层次结构: enter image description here
  2. 如果您根本没有任何pod,则Configurations层次结构将如下所示: enter image description here

    1. 为每个配置文件创建所有键值对(在这种情况下,dev / adhoc / appstore构建有3个配置文件)。每个配置文件都有相同的密钥集: enter image description here

    2. 将每个密钥添加到生成器: enter image description here

    3. 然后只需使用代码中的键: enter image description here

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

      Swift 2.2的更新:不再有效 Swift 2.2: GCC_PREPROCESSOR_DEFINITIONS constants no longer imported

答案 1 :(得分:0)

你不想.xcconfig;存储Xcode的设置。相反,您需要一个属性列表(.plist)文件。为此,请点击command-N以创建新文件,然后选择iOS > Resources > Property List。使用plist编辑器添加键,值和值类型。然后通过在应用中的某处添加这些行来加载您的属性:

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

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

2015年10月21日更新:此答案现在符合Swift 2.0标准。 pathForResource()现在返回一个Optional。