Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

この記事で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通信したいドメインが少ない→解決策②
多い→解決策①も検討

参考リンク

uhooi
iOSアプリ開発とSwiftが好きです✨ 趣味:テニス、アナログゲーム
https://theuhooi.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away