【问题标题】:info.plist key name from xcconfig filexcconfig 文件中的 info.plist 键名
【发布时间】:2015-09-30 12:01:51
【问题描述】:

我正在尝试在我的应用中采用 iOS9 ATS 支持。 为此,以下代码肯定会起作用

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>YOURHOST.COM</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>1.0</string>
            <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
   </dict>
</dict>

但这里的问题是我在xcconfig file 中定义了server URL,这对于开发和分发环境是不同的。

所以,这里的问题是我想从 xcconfig 文件中获取服务器 URL,它将作为键名代替上面代码中的 'YOURHOST.COM'

所以当我尝试获取服务器 URL 时

${SERVER_URL} ,我收到以下错误

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

这分明是key name没有取好,而我这里直接设置key值,就完美了。

我的xcconfig file 包含以下代码:

SERVER_URL=myserverUrl.com

我无法设置必须直接从 xcconfig 文件中获取的密钥名称。

我该怎么做?

【问题讨论】:

  • 请参阅[应用传输安全][1] [1]:stackoverflow.com/questions/30731785/…
  • @SyedAliSalman 。感谢您的回复先生。我的问题与您给出的链接完全不同,请阅读我的问题的标题。
  • 对不起我的错。我第一次没有得到那个

标签: ios xcode info.plist xcconfig


【解决方案1】:

您可以为 plist 文件启用预处理。

这帮助我处理它: http://ilya.puchka.me/info-plist-preprocessing/

1) 启用构建设置 -> “预处理 Info.plist 文件”

2) 在“Info.plist Preprocessor Definition”中添加您的预处理器定义(因为您也可以在 xcconfig 中定义它)

INFOPLIST_PREPROCESSOR_DEFINITIONS = $(inherited) CONFIG_DOMAIN=$(SERVER_URL)

3) 如果您在 plist 中使用 URL,请在“Info.plist Other Preprocessor Flags”中添加“-traditional”(参见https://developer.apple.com/library/mac/technotes/tn2175/_index.html#//apple_ref/doc/uid/DTS10004415-CH1-TNTAG3

有关预处理 Info.plist 的其他问题,您可以在此处获得一些帮助 Xcode "Cannot parse contents of Info.plist"

现在您可以使用预处理定义作为 plist 中的键

<key>CONFIG_DOMAIN</key>

【讨论】:

  • 您的解决方案效果很好,但我想知道您所说的“(因为您也可以在 xcconfig 中定义它)”是什么意思??
【解决方案2】:

要将设置从 .xcconfig 传播到 Info.plist,我有不同的体验和不同的答案。 Tine74 接受的答案很可能是正确的,或者在某些情况下可能是正确的,因为 Xcode 的 Info.plist 预处理功能多年来一直存在错误且不可预测。以下内容今天适用于 Xcode 版本 8.2 (8C38)。

• 在 .xcconfig 文件中定义设置。示例:

FOO = 14

• 在产品目标的 Build Settings 中,滚动到底部并确认 Xcode 添加了一个 User-Defined Build Setting,名称和您在 .xcconfig 文件中设置的值相同“已解决”和“配置文件”列。按照同样的例子,新行看起来像这样

FOO 14 14

两个数字“14”是淡色的禁用文本颜色,表示它们来自其他地方(.xcconfig 文件)。

• 在目标的 Info.plist 文件中,使用美元符号和大括号引用符号名称。继续示例:

MySetting String ${FOO}

• 最后,为了让 .xcconfig 文件中的当前值在下一次构建 (MySetting = 14) 后出现在 Info.plist 文件中,您必须关闭并重新打开 Xcode 项目 在下一次构建之前。这似乎是 Xcode 中的一个错误。丢弃产品中的 Info.plist 文件没有帮助。清洁目标没有帮助。建造两三次也无济于事。 您必须关闭并重新打开 Xcode 项目。

Tine74 接受的答案,设置 Info.plist 预处理器定义,对我不起作用,所以我删除了该设置。但是,那是在我发现关闭/重新打开技巧之前。也许 Tine74 的答案可以用这个技巧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2021-09-24
    相关资源
    最近更新 更多