是否可以在iOS 9中禁用ATS仅用于调试环境?

时间:2015-09-04 04:43:19

标签: ios9 xcode7

我正在开发没有HTTPS设置的开发环境。是否可以仅针对开发(调试)模式自动禁用ATS?

4 个答案:

答案 0 :(得分:45)

我的解决方案是将ATS禁用选项保留为默认值NO,并在构建应用程序时添加新的运行脚本阶段以在应用程序包的Info.plist中更改它。

enter image description here

这是剧本:

#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 = YESINFOPLIST_PREPROCESSOR_DEFINITIONS = DEBUG=1

enter image description here

它可以是在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 个简单的步骤:

  1. 构建设置-打包-Info.plist文件中为调试配置添加Info.debug.plist

Info.debug.plist

  1. 构建阶段添加此运行脚本
    # 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

Run script

  1. Info.debug.plist 放入 .gitignore

echo Info.debug.plist >> .gitignore