web-dev-qa-db-ja.com

デバッグ環境のためだけにiOS9でATSを無効にすることは可能ですか?

HTTPSを設定しない開発環境で作業しています。開発(デバッグ)モードのためだけにATSを自動的に無効にすることは可能ですか?

23
Andree

私の解決策は、ATS無効化オプションをデフォルトのNO値に維持し、新しい実行スクリプトフェーズを追加して、アプリのビルド時にアプリバンドルのInfo.plistで変更することです。

enter image description here

これはスクリプトです:

#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
50
Rafael Nobre

別の解決策。 INFOPLIST_PREPROCESS = YESおよびINFOPLIST_PREPROCESSOR_DEFINITIONS = DEBUG=1を使用することにより、

enter image description here

info.plistで直接#ifdefまたは#ifを使用するCコードのような条件付き前処理にすることができます。

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

短所:整形式のXMLではないため、Xcodeのプロパティリストエディタを開くことができません:(

7

はい。デバッグ、リリース、またはプロジェクトで使用する構成(プロビジョニングプロファイルの設定方法と同様)に異なるInfo.plistファイルを使用するようにプロジェクト設定を構成できるため、デバッグplistでATSを完全に無効にすることができます。

プロジェクト->ターゲット->ビルド設定-> Info.plistファイルに移動します

4
Maciek Czarnik