info.plist xcconfig 文件中的键名
info.plist key name from xcconfig file
我正在尝试在我的应用中采用 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 文件中获取服务器 URLs,它将作为键名代替上面代码中的 '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 文件中获取的键名。
我该怎么做?
您可以为 plist 文件启用预处理。
这帮助我处理了它:
http://ilya.puchka.me/info-plist-preprocessing/
1) 启用构建设置 -> "Preprocess Info.plist File"
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 传播到 Info.plist,我有不同的经验和不同的答案。 Tine74 接受的答案很可能是正确的,或者在某些情况下可能是正确的,因为 Xcode 的 Info.plist 预处理功能多年来一直存在错误且不可预测。以下内容今天适用于 Xcode 版本 8.2 (8C38)。
• 在您的.xcconfig 文件中定义设置。示例:
FOO = 14
• 在产品目标的构建设置中,滚动到底部并确认 Xcode 已添加具有相同名称和值的 用户定义的构建设置您在 "Resolved" 和 "Config. File" 列中的 .xcconfig 文件中设置。按照相同的示例,新行如下所示
FOO 14 14
两个数字“14”是淡淡的禁用文本颜色,表示它们来自其他地方(.xcconfig 文件)。
• 在目标的 Info.plist 文件中,使用美元符号和大括号引用符号名称。继续这个例子:
MySetting String ${FOO}
• 最后,为了使您的 .xcconfig 文件中的当前值在下一次构建 (MySetting = 14
) 后出现在 Info.plist 文件中,您必须 在下一次构建 之前关闭并重新打开Xcode 项目。这似乎是 Xcode 中的错误。删除产品中的 Info.plist 文件没有帮助。清洁目标没有帮助。建造两三次也于事无补。 您必须关闭并重新打开 Xcode 项目。
Tine74 接受的答案,设置 Info.plist 预处理器定义,对我不起作用,所以我删除了该设置。然而,那是在我发现 close/reopen 技巧之前。也许 Tine74 的回答可以解决这个问题。
我正在尝试在我的应用中采用 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 文件中获取服务器 URLs,它将作为键名代替上面代码中的 '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 文件中获取的键名。
我该怎么做?
您可以为 plist 文件启用预处理。
这帮助我处理了它: http://ilya.puchka.me/info-plist-preprocessing/
1) 启用构建设置 -> "Preprocess Info.plist File"
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 传播到 Info.plist,我有不同的经验和不同的答案。 Tine74 接受的答案很可能是正确的,或者在某些情况下可能是正确的,因为 Xcode 的 Info.plist 预处理功能多年来一直存在错误且不可预测。以下内容今天适用于 Xcode 版本 8.2 (8C38)。
• 在您的.xcconfig 文件中定义设置。示例:
FOO = 14
• 在产品目标的构建设置中,滚动到底部并确认 Xcode 已添加具有相同名称和值的 用户定义的构建设置您在 "Resolved" 和 "Config. File" 列中的 .xcconfig 文件中设置。按照相同的示例,新行如下所示
FOO 14 14
两个数字“14”是淡淡的禁用文本颜色,表示它们来自其他地方(.xcconfig 文件)。
• 在目标的 Info.plist 文件中,使用美元符号和大括号引用符号名称。继续这个例子:
MySetting String ${FOO}
• 最后,为了使您的 .xcconfig 文件中的当前值在下一次构建 (MySetting = 14
) 后出现在 Info.plist 文件中,您必须 在下一次构建 之前关闭并重新打开Xcode 项目。这似乎是 Xcode 中的错误。删除产品中的 Info.plist 文件没有帮助。清洁目标没有帮助。建造两三次也于事无补。 您必须关闭并重新打开 Xcode 项目。
Tine74 接受的答案,设置 Info.plist 预处理器定义,对我不起作用,所以我删除了该设置。然而,那是在我发现 close/reopen 技巧之前。也许 Tine74 的回答可以解决这个问题。