【问题标题】:.xcconfig? How to set environment variables.xcconfig?如何设置环境变量
【发布时间】:2014-07-10 04:02:54
【问题描述】:

我是 Xcode 的新手。

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

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

我浏览了很多文章,我认为我应该使用 .xcconfig,但很不清楚。

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

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

然后我进入 Project -> Info 并将 Debug 配置文件设置为 Environment

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

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

【问题讨论】:

    标签: ios xcode swift


    【解决方案1】:
    1. 如果您有 pod 配置,请设置配置层次结构:

    或者,如果您根本没有任何 pod,则配置层次结构将如下所示:

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

    2. 将每个密钥添加到生成器:

    3. 然后只需使用代码中的键:

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

    Swift 2.2 更新:不再工作 Swift 2.2: GCC_PREPROCESSOR_DEFINITIONS constants no longer imported

    【讨论】:

    • 看来我无法从 Swift 中读取这些值。我是在妄想吗?
    • @exalted 你是否包含了生成器文件?无论如何,尝试在同一个 xcconfig 文件中生成定义
    • 关键是定义GCC_PREPROCESSOR_DEFINITIONS = FOO=‘$(FOO)’对吗?
    • 发现问题。预处理器指令需要桥接头(空就足够了)才能在 Swift 中工作。
    • @EvgenyAleksandrov 是的,这是一个已知错误:stackoverflow.com/questions/36266789/…
    【解决方案2】:

    你不想要.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。

    【讨论】:

    • 谢谢,这真的很有帮助。如果我有 3 个环境:开发、暂存、生产,我应该创建 3 个 plist 文件吗?如果是这样,我如何告诉 Xcode 为模拟器、设备、生产加载哪个 plist?
    • @NRitH pathForResource 的结果是可选的,所以我将有条件地展开它。
    • @PaulPeelen,当我一年多前回答这个问题时,pathForResource() 没有返回可选项。我会更新我原来的答案。
    • 是的,我确实想要 xcconfig。区别:来自 xcconfig 的值将被放入您的代码中,而 plist 将保持为纯文本。所以想象一个 API-Key——我们应该尽可能地保护它,把它放在我们的代码中是最好的。使用 xcconfig 可以让我们轻松替换 CLI/CI 中的值 -> 持续集成
    • xcconfig 是 Xcode 配置设置。它们的目的是存储 Xcode 的设置。推荐查看“Explore advanced project configuration in Xcode”,WWDC21-10210。请参阅developer.apple.com/videos/play/wwdc2021/10210 建议编辑此答案,因为我认为@NRitH 的实际意思是“不要使用 xcconfig 存储环境变量”。
    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 2014-09-29
    • 2012-09-18
    • 2018-02-04
    • 2014-05-27
    • 2020-02-06
    • 2015-10-30
    相关资源
    最近更新 更多