こんにちわ、僕です。

デベロッパーのみなさんは、iOS9から実装されるATSにご注意を。


ATSとは?


ATSとはApp Transport Securityの略です。Appleのドキュメントには以下のように記載されています。

App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt; it is also on by default in iOS 9 and OS X v10.11. You should adopt ATS as soon as possible, regardless of whether you’re creating a new app or updating an existing one.

If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible. In addition, your communication through higher-level APIs needs to be encrypted using TLS version 1.2 with forward secrecy. If you try to make a connection that doesn't follow this requirement, an error is thrown. If your app needs to make a request to an insecure domain, you have to specify this domain in your app's Info.plist file.

9月中旬あたりにリリースされるとされているiPhone系の新OS「iOS9」に実装される新機能で、HTTP通信をセキュアなHTTPS通信に置き換えてしまう機能とのことです。Appleとしては今後HTTPS通信を推奨する方針のようでです。

特に広告系のSDKを扱うデベロッパーの方々にとっては頭の痛くなりそうな機能ですね。


対策


1.ATSそのものを無効にする


info.plistに以下の記述をすることでATSを無効化できるようです。

     <key>NSAppTransportSecurity</key>
     <dict>
         <key>NSAllowsArbitraryLoads</key>
         <true/>
     </dict>

ただしこのやり方はApple非推奨とされているので、一時的な応急処置として考えたほうが良さそうです。


2.特定のドメインだけATSを無効にするように指定する


こちらの方法はinfo.plistに特定のドメインを指定することでATSを回避するやり方です。

     <key>NSAppTransportSecurity</key>
     <dict>
         <key>NSExceptionDomains</key>
         <dict>
             <key>xxx.co.jp</key>
             <dict>
                 <key>NSIncludesSubdomains</key>
                 <true/>
                 <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                 <true/>
                 <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                 <false/>
             </dict>
         </dict>
     </dict>

こちらも暫定的な対応と言えそうです。


3.Xcode7を使わない

どうやらATSが機能するのはXcode7以上でビルドされたアプリのようです。その証拠に、僕は未だにXcode6を使用していますが、ATSによるエラーを再現できていません。

Xcode7はベータ版がすでに配信されていますが、迂闊にアップデートするとATS以外にも面倒くさいことがいくつも起こりそうです。


4.ATSに対応する


しんどいですが、いずれ対応しなくてはならないので今のうちから対応しておくのもアリです。おそらくサーバー側の環境をTLSv1.2にしたりとか通信をhttpsに統一したりとか、そういった対応が必要になるかと思います。

これは環境によって対応方法がそれぞれ異なると思いますので、調べてみてください。



★  ★  ★



毎年9月が迫ると、アプリの開発者の方々は戦々恐々としていることでしょう。僕も毎年アタマが痛いです。

Safariも広告ブロック機能が実装されるようですし、ATSの件も含めてiOSでのビジネスの難易度はこれからもどんどん高まっていくでしょうね。


それでは今日はこのへんで。
でわまたー。