

ATS例外設定について
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
ATS(App Transport Security)を特定ドメインだけ例外にする書き方を整理しておく。
全部無効にする書き方
一番乱暴なのはこれ。全ドメインに対して非HTTPS通信を許可する。
<key>NSAppTransportSecurity</key><dict> <key>NSAllowsArbitraryLoads</key> <true/></dict>NSAllowsArbitraryLoadsをtrueにするとATSそのものが機能しなくなる。開発中の一時しのぎとしては手軽だけど、リリースするアプリでこれを使う理由は基本的にない。
ドメイン単位で例外にする書き方
特定のドメインだけATSの対象外にしたい場合はNSExceptionDomainsで個別に指定する。
<key>NSAppTransportSecurity</key><dict> <key>NSExceptionDomains</key> <dict> <key>xxxxxxx.net</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict></dict>各キーの役割はこんな感じ。
NSIncludesSubdomains:サブドメインにも同じ例外設定を適用するかどうかNSExceptionAllowsInsecureHTTPLoads:このドメインに対してHTTP(非HTTPS)通信を許可するかどうかNSExceptionRequiresForwardSecrecy:Forward Secrecyを必須にするかどうか。falseにすると要件を緩める
全体無効化と違って、影響範囲を指定したドメインだけに絞れるので、対応できないサーバーが一部だけある場合はこちらを使う方がいい。
補足:Temporary付きのキー名について
古いメモや古い記事だとNSTemporaryExceptionAllowsInsecureHTTPLoadsやNSTemporaryExceptionRequiresForwardSecrecyのように、頭にTemporaryが付いたキー名を見かけることがある。
これはiOS 9のbeta1時点で使われていたキー名らしく、正式リリース(beta2以降)でTemporaryが外れた名前に変更されている。意味や構造は変わっていないので、単純に名前だけの違い。
NSTemporaryExceptionAllowsInsecureHTTPLoads→NSExceptionAllowsInsecureHTTPLoadsNSTemporaryExceptionRequiresForwardSecrecy→NSExceptionRequiresForwardSecrecyNSTemporaryExceptionMinimumTLSVersion→NSExceptionMinimumTLSVersion
古い情報をそのままコピペするとTemporary付きのキーは無視されて期待通り動かない可能性があるので、見かけたら現行のキー名に読み替える必要がある。