[Swift3]無闇やたらにAllow Arbitrary Loadsするのはもうやめよう

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
Swift

以前の記事(HTTP通信を許可する)でも紹介した、HTTP通信を許可するための設定「Allow Arbitrary Loads」。しかしこの設定を使った場合、アプリ審査時に正当な理由を求められるのが現状。

どうせ理由の説明を求められるのなら、もっと限定的にHTTP通信の許可をしてみようというのが今回の記事。

今回想定するケース

インターネットブラウザのように接続先が限定できないケースではなく、ある特定のHTTP通信のみ行うようなケース(接続先がわかっているケース)。

例えば、HTTPSに対応していないAPIを利用したい場合。少し前に書いた「APIを叩いてSwiftyJSONで解析する」では、単一のAPI(http://api.aoikujira.com/kawase/json/jpy)を実行するためだけにAllow Arbitrary LoadsをYESに設定している。これがよろしくない。

特定のドメインだけHTTP通信を許可する

上記のケースの場合、ドメイン「api.aoikujira.com」のみHTTP通信を許可してやれば良い。そのための設定を、Info.plistで以下のように設定する。

Info.plistを編集する

手順は

  • App Transport Security Settingsの行を追加
    • Allow Arbitrary Loadsは「NO」(基本的にHTTP通信はブロック)
    • Exception Domainsの行を、App Transport Security Settingsの配下に追加
      • HTTP通信を許可したいドメイン名(今回は「api.aoikujira.com」)を、Dictionary型で追加
        • NSIncludesSubdomainsを「YES」
        • NSTemporaryExceptionAllowsInsecureHTTPLoadsを「YES」
        • NSTemporaryExceptionRequiresForwardSecrecyは「NO」

これで無事、必要最低限なHTTP通信の許可でAPIを実行できるようになった。

接続先のドメインが数えるほどしかないのなら、この方法を使うのが親切ではないだろうか。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。