ATS 自动开启关闭

由于项目的正式网络环境的 host 是走域名,能支持 https ,测试网络环境的 host 是走 IP ,无法支持 https ,导致在做 ATS 支持的时候,遇到一个问题:在 debug 过程需要切换网络环境的时候,也需要手动去开启或者关闭 ATS 。为了节省这些时间,写了一个脚本去解决这个问题,让 ATS 根据网络环境的值自动去开启或者关闭。下面将会列出具体步骤。

1.在 [Your Target-Build Settings -Preprocessor Macros] 添加你的环境宏变量 NETWORK_FOR_PRODUCTION ,如下图:

Preprocessor_Macros_Image.png

2.在项目的 Info.plist 文件中添加 NSAppTransportSecurity ,类型为字典;然后在字典中添加一个 NSAllowsArbitraryLoads ,类型为布尔值。

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <false/>
</dict>

关于配置的坑
在 iOS 10下,多了 NSAllowsArbitraryLoadsForMediaNSAllowsArbitraryLoadsInWebContent 两个选项。
当这2个选项与 NSAllowsArbitraryLoads 选项同时存在时,在 iOS 10 下,会优先看 NSAllowsArbitraryLoadsForMediaNSAllowsArbitraryLoadsInWebContent 的配置,而忽略掉 NSAllowsArbitraryLoads
基于以上规则,遇到的坑是:我设置了 NSAllowsArbitraryLoadsInWebContenttrue (允许浏览器加载http网页),设置了 NSAllowsArbitraryLoadsfalse (关闭ATS),在 iOS 10 下,运行APP,ATS 实际上并没有被关闭,因为 iOS 10 优先看了 NSAllowsArbitraryLoadsInWebContent 的配置,认为 ATS 是开启的, 而 NSAllowsArbitraryLoads 的配置是直接被忽略了。

3.在 [Your Target-Build Phases-Run Script] 添加以下脚本代码即可:

NETWORK_FOR_PRODUCTION=`echo ${GCC_PREPROCESSOR_DEFINITIONS} | awk '{print $4}'  | awk -F'[=]' '{print $2}'`

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"

# 更改plist文件的ATS配置
if [[ ${NETWORK_FOR_PRODUCTION} == 1 ]]; then
    echo "打开ATS"
    /usr/libexec/PlistBuddy -c "Set :NSAppTransportSecurity:NSAllowsArbitraryLoads false" ${infoplist}
else
    echo "关闭ATS"
    /usr/libexec/PlistBuddy -c "Set :NSAppTransportSecurity:NSAllowsArbitraryLoads true" ${infoplist}
fi

其中Run Script的配置如下图:

Run_Script_Config_Image.png

关键脚本代码详解:

NETWORK_FOR_PRODUCTION=`echo ${GCC_PREPROCESSOR_DEFINITIONS} | awk '{print $4}'  | awk -F'[=]' '{print $2}'`

此句代码是通过awk解析获取 NETWORK_FOR_PRODUCTION 的具体值:0或者1
PS:如果你需要根据其他变量来设置 ATS ,则需要自己调整上述语句,获取你指定的变量的值。

4.如常运行调试代码即可~enjoy😄

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS 10 适配 ATS 一. HTTPS其实HTTPS从最终的数据解析的角度,与HTTP没有任何的区别,HTT...
    lanceChris阅读 1,066评论 0 0
  • SSL/TLS协议运行机制的概述:http://blog.csdn.net/xiaofei125145/artic...
    zfl1024阅读 2,295评论 0 5
  • 转载 原文的排版和内容都更加友好,并且详细,我只是在这里贴出了一部分留作自己以后参考和学习,如希望更详细了解AWK...
    XKirk阅读 3,276评论 2 25
  • 列车缓缓地行驶着,外面的雨滴滴答滴答拍打在玻璃窗上,无论窗杆如何摆动,眼前总会有新的雨滴滑落,擦不完的水滴,一如擦...
    南吕呀阅读 494评论 0 0
  • 凌晨四点,糖晶习惯性地醒来。她睁着眼,并没有起床的打算。 糖晶突然忘了自己叫什么名字。她被这个想法,吓到了。想了很...
    李柒月阅读 1,222评论 0 0