[解決済み】iOS 9でApp Transport Securityを有効にしてHTTP URLを読み込むにはどうすればいいですか?重複
質問
昨晩リリースされたiOSの新しいベータ版SDKには、httpの代わりにhttpsを使用するよう開発者に促す「App Transport Security"」が搭載されていますね。原則的に、これは素晴らしいアイデアで、私はすでにステージング/プロダクション環境でhttpsを使用しています。しかし、私のローカル開発環境では、iOS アプリが私のラップトップで実行しているウェブサービスに接続する際に https を設定していません。
今朝、少し遊んでみたところ、URLロードシステムが、httpのURLを渡しても、代わりにhttpsを使うように判断するようです。この挙動を無効にする方法をご存知の方はいらっしゃいますか?
解決方法は?
アップルの Info.plistのリファレンス をご覧ください (@gnasher729 さんありがとうございます)。
Info.plistで特定のドメインに対する例外を追加することができます。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>testdomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<false/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>
各除外ドメインのキーはすべてオプションです。講演者はどのキーについても詳しく説明しませんでしたが、どれもそれなりにわかりやすいと思います。
(出典 WWDC 2015 セッション703 "プライバシーとあなたのアプリ" , 30:18)
また、アプリに正当な理由がある場合は、1つのキーですべてのアプリトランスポートセキュリティの制限を無視することができます。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
アプリに正当な理由がない場合、リジェクトされる危険性があります。
NSAllowsArbitraryLoadsをtrueに設定すれば動作しますが、Appleは、特別な理由なくこのフラグを使用するアプリを拒否するつもりであることを非常に明確に述べています。NSAllowsArbitraryLoadsを使用する主な理由として考えられるのは、ユーザーが作成したコンテンツ(リンクの共有、カスタムWebブラウザなど)でしょう。そしてこの場合にも、Appleは、あなたが管理しているURLに対してATSを強制する例外を含めることを期待しています。
TLS 1.2で提供されない特定のURLにアクセスする必要がある場合、NSAllowsArbitraryLoadsをyesに設定するのではなく、それらのドメインに対して特定の例外を記述する必要があります。NSURLSesssionのWWDCセッションでより詳細な情報を得ることができます。
NSAllowsArbitraryLoadsの解決策を共有する際には、ご注意ください。これはAppleが推奨する修正方法ではありません。
- カーチャン (@marco-tolmanさんありがとうございます)
関連
-
[解決済み] Int 型のインデックスを持つ [AnyObject]? の値を添え字として使用できません。
-
[解決済み] Info.plist ユーティリティのエラーです。"そのようなファイルがないため、Info.plistを開くことができませんでした"
-
[解決済み] ERROR ITMS-9000: "Redundant Binary Upload. 列車 '1.0' のビルドバージョン '1.0' のバイナリアップロードが既に存在します" と表示されました。
-
[解決済み] 脱獄したiphoneで`uicache`コマンドは何をするのですか?[クローズド]
-
[解決済み] Swift 4 データが正しい形式でないため、読み取ることができませんでした。
-
[解決済み] トランスポートセキュリティがクリアテキストのHTTPをブロックしています。
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み】iOSアプリの名前を変更する方法は?
-
[解決済み】App Transport Securityポリシーが安全な接続の使用を要求するため、リソースをロードできませんでした。
-
[解決済み] iOS 9でURL SCHEMEを持つInstagramアプリが開けない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 libc++abi.dylib: NSException 型のキャッチできない例外で終了する (lldb)
-
[解決済み】iOS 9.0より前のUIStackView
-
[解決済み] Int 型のインデックスを持つ [AnyObject]? の値を添え字として使用できません。
-
[解決済み] UITabBar アイコンが正しく表示されない
-
[解決済み] UTF-8でエンコードされたNSDataをNSStringに変換します。
-
[解決済み] このアクションは完了できませんでした。再試行 (-22421)
-
[解決済み] ios8ではdidRegisterForRemoteNotificationsWithDeviceTokenは呼ばれないが、didRegister...Settingsは呼ばれる。
-
[解決済み] 脱獄したiphoneで`uicache`コマンドは何をするのですか?[クローズド]
-
[解決済み] Xcode 4のBundle creator OS Type code ?
-
[解決済み] トランスポートセキュリティがクリアテキストのHTTPをブロックしています。