来自xcconfig文件的info.plist密钥名称

时间:2015-09-30 12:01:51

标签: ios xcode info.plist xcconfig

我正在尝试在我的应用中采用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>

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

所以,这里的问题是我想从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.

这显然意味着没有正确使用关键名称,另一方面,如果我在这里直接设置关键值,它可以很好地工作。

我的xcconfig file包含以下代码:

SERVER_URL=myserverUrl.com

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

我该怎么做?

2 个答案:

答案 0 :(得分:4)

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

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

1)启用构建设置 - &gt; &#34;预处理Info.plist文件&#34;

2)在&#34; Info.plist预处理器定义&#34;中添加预处理器定义。 (因为你也可以定义你的xcconfig)

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

3)如果您在plist中使用URL,请添加&#34; -traditional&#34; in&#34; Info.plist其他预处理器标志&#34; (见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>

答案 1 :(得分:1)

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

•定义.xcconfig文件中的设置。例如:

FOO = 14

•在产品目标的构建设置中,滚动到底部并验证Xcode是否添加了一个用户定义的构建设置,其名称与您在中设置的值相同。 &#34;已解决&#34;中的xcconfig文件和&#34;配置。文件&#34;列。按照相同的示例,新行看起来像这样

FOO 14 14

这两个数字&#34; 14&#34;处于微弱的禁用文本颜色,表示它们来自其他地方(.xcconfig文件)。

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

MySetting String ${FOO}

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

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

相关问题