Sta*_*ich 5 ios app-transport-security charles-proxy
问题说明了一切。
我知道NSAllowsArbitraryLoads可以将它们放在一起,NSExceptionDomains但我对这种列入黑名单的方法感到有些困惑:除了列出的特定生产主机之外,我不想为所有内容禁用 ATS,NSExceptionDomains因为它们可能会发生变化,因此我需要管理它们的列表连同一般的应用程序配置,我们有 3 种以上不同的主机类型用于生产。[当然,在完美的世界中,Apple 会建议我们列出我们想要禁用应用程序传输安全的主机,并为所有其他主机启用它 - 不是!反之亦然]
我还尝试继承我的用户定义设置$(MY_USER_SETTING)(它可以支持对应于 Debug/Staging/Release 的 3 个不同值),但它不适用于非字符串类型的NSAppTransportSecurity字典和NSAllowsArbitraryLoads布尔值——这些值只是不继承我的用户定义设置。
背景:我希望能够使用 Charles Proxy 查看调试/暂存配置的 HTTP 流量,从 iOS 9 开始,它需要禁用 ATS,我想确保这不会以任何方式影响我们的发布配置!
与人们可能的想法相反(一个例子:与 APPLE\xe2\x80\x99S APP TRANSPORT SECURITY 一起工作)NSAllowsArbitraryLoads不能作为在黑名单/白名单模式之间切换的标志,至少它不能很好地与 Charles 配合使用:
黑名单方法(在 IOS 9.0 中对我不起作用 - Charles 无法识别来自/到临时主机的流量):
\n\n\n示例 B:所有人的苯丙胺类兴奋剂(ATS),但有一些例外
\n如果您希望所有域都能使用 ATS(除了一些您知道无法使用的域),您可以指定不应使用 ATS 的例外情况,同时保留选择加入的所有其他流量。对于这种情况,您\xe2\ x80\x99ll 希望使用 NSExceptionDomains 来指定您希望覆盖 ATS\xe2\x80\x99s 默认设置的域。
\n
白名单方法(有效,但并不是真正实现此目的的好方法):如果NSAllowsArbitraryLoads设置为,则对除 下列出的域之外的所有域禁用YES应用程序传输安全功能。NSExceptionDomains
\n\n示例 C:禁用 ATS,但有一些例外
\n相反,您可能只希望 ATS 在您明确知道可以支持它的域上工作。例如,如果您开发 Twitter 客户端,您可能想要加载无数可能无法支持 ATS 的 URL,尽管您希望登录调用和其他对 Twitter 的请求使用 ATS。在这种情况下,您可以默认禁用 ATS,然后指定您希望使用 ATS 的 URL。
\n
这里描述的另一种方法:This One Weird Trick Makes Developing iOS Apps Against a Local Server Way Easier建议添加“运行脚本构建阶段”,它使用 PlistBuddy 即时修补应用程序的 plist 文件。这是他们的示例,当开发人员在本地计算机上的服务器上工作时(当然也可以是临时主机),应用程序不使用 ATS:
\n/usr/libexec/PlistBuddy -c "Add :NSAppTransportSecurity:NSExceptionDomains:$LOCAL_NETWORK_NAME:NSIncludesSubdomains bool true" $INFO_PLIST\n/usr/libexec/PlistBuddy -c "Add :NSAppTransportSecurity:NSExceptionDomains:$LOCAL_NETWORK_NAME:NSThirdPartyExceptionAllowsInsecureHTTPLoads bool true" $INFO_PLIST\nRun Code Online (Sandbox Code Playgroud)\nIMO,与使用上述白名单方法相比,修补 Plist 是有条件地禁用暂存主机的 ATS 的更好方法,因此我们将坚持使用 PlistBuddy。
\n| 归档时间: |
|
| 查看次数: |
1383 次 |
| 最近记录: |