はじめに
iOSアプリから直接MongoDBを叩こうとして断念し、データベースサーバを立ててAPIを発行してデータをもらう方針にしました。そして、Postmanを使って諸々できるところまでたどり着いていました。
いよいよiOSアプリからデータベースサーバにAPIを発行して、データのやり取りを試していきたいと思います。かなりの寄り道から戻ってまいりました。
例のごとくじっくりと進めていきます。まずHTTP通信を許可するところから。オレオレ証明書を用意する手間をかけるくらいなら、テストと割り切って潔く許可しましょう。
HTTP通信を許可する
iOSアプリからHTTP通信は原則できない
iOS9からはセキュリティ上の関係でHTTP通信できません。ですので、データベースサーバとの通信もHTTPS通信にする必要があります。
ただし、お試しでローカル環境にデータベースサーバを立てる場合に証明書の取得や設定をするのは手間です。オレオレ証明書という手もありますが、ここでは見送りとしました。オレオレ証明書自体が意味のないものですので、わざわざ手間を掛けて設定をするのもなぁ。
plistファイルに設定を追加する
まずは通常通りにプロジェクトを作ります。作ったらplistファイルに設定を加えていきます。
この設定はちょっとしたものなのでサササッとできるものです。また、「許可をしたら禁止する」までの手順を覚えておくぐらいでちょうど良いように思います。あくまでも一時的なものですし。
許可する手順をまとめますと、
- Info.plistを開く
- Key列からInformation Property Listを見つける
- App Transport Security Settingsを追加する

- 追加したApp Transport Security SettingsにAllow Arbitrary Loadsを追加する

- Allow Arbitrary LoadsのValueに- YESと設定する
許可を取り消す手順は、
- App Transport Security Settingsを削除する
これだけです。App Transport Security Settingsを削除するとその下位のKeyも消えます。
気になったこと
Allow Arbitrary Loadsにいくつか種類がある
無印Allow Arbitrary Loadsの他に、for Media、Media Exception Usage、in Web Content、Web Content Exception Usage、Exception Usageが付けられたものがありました。せっかくなのでちょっとだけ調査。
| Keyの値 | 使いみち | 
|---|---|
| Allow Arbitrary Loads for Media | AVFoundationFrameworkからの通信に限って許可するとき | 
| Allow Arbitrary Loads in Web Content | WKWebViewでの通信に限って許可するとき | 
これらのKeyに何か値を設定すると、無印Allow Arbitrary Loadsの設定が無視されるそうなのでご注意ください。
残りの3つはException Usageから察するに、コンテンツの内容や種類によってHTTP通信を許可するかどうかを細かく決めることができるようです。詳細は分かりませんでしたすみません。
- Allow Arbitrary Loads-Media Exception Usage
- Allow Arbitrary Loads-Web Content Exception Usage
- Allow Arbitrary Loads-Exception Usage
Allow Arbitrary LoadsでYESを設定した後、Content Encrypted at Network Layer(ネットワークレイヤで暗号化されたコンテンツ)に関するHTTP通信は禁止したいときに、Allow Arbitrary Loads-Exception UsageをNOにするという使い方でしょうか?
true/falseではなくYES/NO
些細なところですが、true/falseではなくYES/NOなんですね。ここは統一しておいて頂けたらありがたかった。XMLの制限もなさそうですしね〜
まとめ
許可されていなかったHTTP通信ができるように設定してみました。これでローカル環境のSSL対応していないデータベースサーバへの接続ができるようになります。
ただし、HTTP通信がもともと許可されていないということは、それなりの理由があるはずです。許可するのは一時的なものと考えて、リリースなどを考えるときは忘れず許可を消しておきましょう。
許可してしまっていることはちゃんと覚えておかないといけませんね。



