我使用Charles来调试我的应用程序请求和响应,它不使用最新版本的TLS(iOS 9可以使用)。有没有办法以编程方式更新它,以便我只能通过Xcode实现本地构建?我有一个Jenkins构建服务器,仍然需要使用新版本的TLS。
答案 0 :(得分:1)
这有点乱,但你可以在Run Script步骤中使用命令行工具PlistBuddy来实现这一点。凌乱,因为它改变了实际的info.plist,所以你会在git历史中看到它。
下面的脚本将仅在DEBUG构建中添加例外,否则删除任何ATS例外。您可以将其编辑为更具体,或者只是始终添加/删除一揽子NSAllowsArbitraryLoads
标记。
# Remove exception for all builds
/usr/libexec/PlistBuddy -c "Delete :NSAppTransportSecurity" ${INFOPLIST_FILE} 2>/dev/null
exitCode=$? #Supresses failure if key doesn't exist
# Add exception for Debug builds
if [ "${CONFIGURATION}" == "Debug" ]
then
/usr/libexec/PlistBuddy -c "Add :NSAppTransportSecurity dict" ${INFOPLIST_FILE}
/usr/libexec/PlistBuddy -c "Add :NSAppTransportSecurity:NSExceptionDomains dict" ${INFOPLIST_FILE}
/usr/libexec/PlistBuddy -c "Add :NSAppTransportSecurity:NSExceptionDomains:<host> dict" ${INFOPLIST_FILE}
/usr/libexec/PlistBuddy -c "Add :NSAppTransportSecurity:NSExceptionDomains:<host>:NSIncludesSubdomains bool true" ${INFOPLIST_FILE}
/usr/libexec/PlistBuddy -c "Add :NSAppTransportSecurity:NSExceptionDomains:<host>:NSTemporaryExceptionAllowsInsecureHTTPLoads bool true" ${INFOPLIST_FILE}
fi
更多信息http://product.reverb.com/2015/06/29/ios-9-and-charles-proxy/