72
67

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

「http://」のAPIを実行できるようにする(Swift)

Last updated at Posted at 2018-07-22

はじめに

この記事でAPIクライアントを実装したのでさっそく使おうと思ったのですが、以下のエラーが発生して落ちてしまいました。

エラーとその訳を転記します。

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
App Transport Security(ATS)は安全でないため、平文HTTP(http://)リソースの負荷をブロックしました。 一時的な例外は、アプリのInfo.plistファイルで設定できます。
since it does not conform to ATS policy
ATSポリシーに準拠していないため

どうやらHTTP通信は安全でないのでデフォルトではブロックするようです。HTTPS通信はブロックしません。

Info.plist で設定すれば通信できるとのことなので、その方法を紹介します。

環境

  • OS:macOS High Sierra 10.13.1
  • Xcode:9.2
  • Swift:4.0.3

解決策

解決策は大きく分けて2つあります。

①ATSを無効にする

メリット

  • ドメインを指定せずに全てのAPIが使える
    HTTP/HTTPSの両方の通信を全て許可することになるため、ドメインを指定せずに全てのAPIが使えます。
    「http://」のAPIを多数使うアプリではこちらの解決策を検討してもいいかもしれません。

デメリット

  • 安全性が低下する
    全てのHTTP通信を許可することになるため、安全性が低下します。
    具体的には、通信を盗聴・改ざんされるリスクが高まります。

Info.plist の設定

App Transport Security Settings > Allow Arbitrary Loads の値を YES に指定すると、ATSが無効になります。
スクリーンショット_2018-07-22_14_23_37.jpg

②ATSを有効のまま、通信を許可するドメインを指定する

メリット

  • 安全性の低下を防げる
    指定したドメインのみHTTP通信を許可するため、安全性の低下を防げます。

デメリット

  • ドメインの指定が手間になる
    「http://」のAPIを多数使うアプリの場合、全てのドメインを手動で指定しなければいけないので手間がかかります。

Info.plist の設定

名前 キー タイプ 説明
App Transport Security Settings NSAppTransportSecurity Dictionary ATS設定のトップ
 Allow Arbitrary Loads NSAllowsArbitraryLoads Boolean 全てのHTTP通信を許可する
 Allow Arbitrary Loads in Web Content NSAllowsArbitraryLoadsInWebContent Boolean WebViewのみ全てのHTTP通信を許可する
 Exception Domains NSExceptionDomains Dictionary 例外ドメインのトップ
  {ドメイン} 名前と同様 Dictionary 例外に指定するドメイン
   NSIncludesSubdomains 名前と同様 Boolean サブドメインを含める
   NSTemporaryExceptionAllowsInsecureHTTPLoads 名前と同様 Boolean 対象ドメインのHTTP通信を許可する
   NSExceptionMinimumTLSVersion 名前と同様 String TBD
   NSTemporaryExceptionRequiresForwardSecrecy 名前と同様 Boolean TBD
   NSRequiresCertificateTransparency 名前と同様 Boolean TBD


郵便番号検索API
http://zipcloud.ibsnet.co.jp/
のHTTP通信を許可する
スクリーンショット_2018-07-19_23_03_22.jpg

例では ibsnet.co.jp のサブドメインを含めHTTP通信を許可しています。

結論

以下が望ましいです。
HTTP通信したいドメインが少ない→解決策②
多い→解決策①も検討

参考リンク

72
67
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
67

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?