我正在开发没有HTTPS设置的开发环境。是否可以仅针对开发(调试)模式自动禁用ATS?
答案 0 :(得分:45)
我的解决方案是将ATS禁用选项保留为默认值NO,并在构建应用程序时添加新的运行脚本阶段以在应用程序包的Info.plist中更改它。
这是剧本:
#Disables ATS in debug builds.
INFOPLIST="${TARGET_BUILD_DIR}"/"${INFOPLIST_PATH}"
case "${CONFIGURATION}" in
"Release"|"Adhoc")
/usr/libexec/PlistBuddy -c "Set :NSAppTransportSecurity:NSAllowsArbitraryLoads NO" "${INFOPLIST}"
;;
"Debug")
/usr/libexec/PlistBuddy -c "Set :NSAppTransportSecurity:NSAllowsArbitraryLoads YES" "${INFOPLIST}"
;;
esac
答案 1 :(得分:7)
另一种解决方案。使用INFOPLIST_PREPROCESS = YES
和INFOPLIST_PREPROCESSOR_DEFINITIONS = DEBUG=1
,
它可以是在Info.plist中直接使用#ifdef
或#if
的C代码等条件预处理。
<key>UIMainStoryboardFile</key>
<string>Main</string>
#if DEBUG
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
#endif
<key>UIRequiredDeviceCapabilities</key>
<array>
缺点:无法打开Xcode的属性列表编辑器,因为它不是格式良好的XML:(
答案 2 :(得分:4)
是的,您可以配置项目设置以使用不同的Info.plist文件进行Debug,Release或您在项目中使用的任何配置(类似于Provisioning Profiles的设置方式),因此在Debug plist中您可以禁用ATS完全。
转到项目 - &gt;你的目标 - &gt;构建设置 - &gt; Info.plist文件
答案 3 :(得分:0)
我已经根据上述解决方案制定了解决方案,但使用 git 存储库可以顺利工作。我们的想法是维护发布配置的原始 Info.plist,唯一的区别是在构建时自动生成的 NSAllowsArbitraryLoads 中的调试。
我的 Xcode 版本是 11.3.1。有 3 个简单的步骤:
# Disables ATS in debug configuration
if [ "${CONFIGURATION}" = "Debug" ]; then
plist=$PRODUCT_SETTINGS_PATH
src="`dirname $plist`/Info.plist"
cp -f $src $plist
/usr/libexec/PlistBuddy -c "Set :NSAppTransportSecurity:NSAllowsArbitraryLoads YES" "${plist}"
fi
echo Info.debug.plist >> .gitignore