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

And*_*ree 22 ios9 xcode7

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

Raf*_*bre 48

我的解决方案是将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
Run Code Online (Sandbox Code Playgroud)

  • 注意:将“运行脚本”作为最后一个阶段。我开始移动它并打破了它。 (3认同)
  • 我必须将此解决方案与[另一个](/sf/answers/3705531721/)配对。然后就成功了。 (3认同)
  • 您好,我已经尝试过您的建议,它在设备上运行良好,但它似乎无法在模拟器上运行.这很奇怪,因为当我检查构建文件夹中的输出Info.plist文件时,NSAllowArbitraryLoads设置被正确设置为YES.有线索吗? (2认同)
  • @Sajjon这不会使repo变脏,它会更改应用程序包中的编译plist,而不是原始项目的plist文件. (2认同)

kis*_*umi 7

另一种方法.通过使用INFOPLIST_PREPROCESS = YESINFOPLIST_PREPROCESSOR_DEFINITIONS = DEBUG=1,

在此输入图像描述

它可以是使用#ifdef#if直接在Info.plist中使用C代码的条件预处理.

<key>UIMainStoryboardFile</key>
<string>Main</string>
#if DEBUG
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
#endif
<key>UIRequiredDeviceCapabilities</key>
<array>
Run Code Online (Sandbox Code Playgroud)

缺点:无法打开Xcode的属性列表编辑器,因为它不是格式良好的XML :(


Mac*_*nik 5

是的,您可以配置您的项目设置以使用不同的 Info.plist 文件进行调试、发布或您在项目中使用的任何配置(类似于设置配置文件的方式),因此在您的调试 plist 中您可以完全禁用 ATS。

转到项目 -> 你的目标 -> 构建设置 -> Info.plist 文件

  • 这样,我需要 Info.plist 文件的多个副本,其内容非常相似,除了与 ATS 相关的设置。有什么办法可以减少这种重复吗? (2认同)