Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to disable ATS in iOS 9 just for debug environment?

Tags:

ios9

xcode7

I'm working on a development environment without HTTPS setup. Is it possible to automatically disable ATS just for the development (debug) mode?

like image 784
Andree Avatar asked Sep 04 '15 04:09

Andree


2 Answers

My solution is to keep ATS disable option at the default NO value and add a New Run Script Phase to change it in the app bundle's Info.plist when building the app.

enter image description here

This is the script:

#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
like image 101
Rafael Nobre Avatar answered Oct 17 '22 17:10

Rafael Nobre


Another solution. By using INFOPLIST_PREPROCESS = YES and INFOPLIST_PREPROCESSOR_DEFINITIONS = DEBUG=1,

enter image description here

it can be conditional preprocess like C code using #ifdef or #if directly in Info.plist.

<key>UIMainStoryboardFile</key>
<string>Main</string>
#if DEBUG
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
#endif
<key>UIRequiredDeviceCapabilities</key>
<array>

Cons: Unable to open Xcode's property list editor because it is not well-formed XML :(

like image 14
kishikawa katsumi Avatar answered Oct 17 '22 16:10

kishikawa katsumi