ATS 自动开启关闭

作者: York_魚 | 来源:发表于2017-01-03 12:50 被阅读242次

由于项目的正式网络环境的 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😄

相关文章

  • ATS 自动开启关闭

    由于项目的正式网络环境的 host 是走域名,能支持 https ,测试网络环境的 host 是走 IP ,无法支...

  • GitLab 服务关闭与启动

    关闭gitlab的自动启动 开启gitlab的自动启动

  • iOS 锁屏问题

    iOS实现关闭/开启自动锁屏1 不自动锁屏[UIApplication sharedApplication]....

  • 手机设备常用指令

    OPPOR9的USB调试问题,开启10分钟后自动关闭,取消掉这个自动关闭 拨号*#8011#

  • Mysql事务的自动提交与手动提交

    自动提交系统变量AUTOCOMMIT AUTOCOMMIT=ON|OFF系统变量控制自动提交功能的开启或关闭 自动...

  • ES index配置总结

    Template String不分析, 开启_all字段, 关闭时间自动发现

  • 13:Mac的rootless配置

    一、开启root 每次更新mac都要自动关闭root用户,开启的root用户如下: 开启【系统偏好与设置】,选择【...

  • istio注入失败经历

    环境: 关闭全局自动注入 namespace开启labels istio-injection: enabled p...

  • weblogic添加HTTPS支持(阿里云盾)

    1.weblogic配置 参考文档链接 常用命令 1.检测是否开启ATS参考文档链接 nscurl --ats-d...

  • 活出真我

    天下无病,我不病,谁能病我? 知识教育,浪费生命。开启生命自动化系统,让生命自动运行。 关闭大脑...

网友评论

    本文标题:ATS 自动开启关闭

    本文链接:https://www.haomeiwen.com/subject/nnngvttx.html