次のエラーメッセージに従ってHTTPモードを有効にするためにinfo.plist
にどのような設定を入れる必要がありますか?
トランスポートセキュリティは、安全ではないため、平文のHTTP(http://)リソースのロードをブロックしました。一時的な例外はアプリのInfo.plistファイルで設定できます。
私のドメインはexample.com
だとします。
Xcode 8.0とSwift 3.0またはSwift 2.2、さらにはObjective Cを使用している場合
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
フォーラムの投稿Application Transport Security? /を参照してください。
またページiOS 9およびOSX 10.11でのApp Transportセキュリティ例外の設定。
たとえば、次のように特定のドメインを追加できます。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
遅延オプションは次のとおりです。
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
info.plist
はXMLファイルなので、このコードをファイル内の任意の場所に配置できます。
これはテストされ、iOS 9 GM seedで動作していました - これは 特定の ドメインがHTTPSの代わりにHTTPを使用できるようにする設定です:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key> <!--Include your domain at this line -->
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
NSAllowsArbitraryLoads
はfalse
である必要があります。これは all 安全でない接続を許可しないが、例外リストではHTTPSなしの some ドメインへの接続が許可されるためです。
これはplistにこれを追加するための素早い回避策です(しかし推奨されません):
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
これは( Appleのドキュメント によると):
NSAllowsArbitraryLoads
NSExceptionDomains辞書にリストされていないドメインに対してApp Transport Securityを無効にするために使用されるブール値。リストされたドメインはそのドメインに指定された設定を使用します。デフォルト値のNOでは、すべての接続に対してデフォルトのApp Transport Security動作が必要です。
私は本当にリンクを推薦します:
それは私が理由とすべての意味を理解するのを助けます。
以下のXML(Info.plistファイル内)は以下のようになります。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
すべてのページへの任意の呼び出しを許可しませんが、PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE
を指定すると、その接続でHTTPプロトコルを使用できます。
上記のXMLに追加することができます:
<key>NSIncludesSubdomains</key>
<true/>
指定したアドレスのサブドメインに対して安全でない接続を許可したい場合。
最善のアプローチは、(falseに設定された)すべての任意のロードをブロックし、私たちが知っているアドレスだけが問題ないことを許可するために例外を追加することです。
2018更新:
Appleはこれをオフにすることを推奨していません - より多くの情報が セキュリティセッションに関して説明されている - 207セッションWWDC 2018 - にあります。
歴史的理由と開発段階のために元の答えを残す
why _ についてより多くのコンテキストが欲しい人のために、これを修正する方法に加えて、これが起こっています、そして以下を読んでください。
IOS 9の導入により、アプリとWebサービス間の接続のセキュリティを向上させるために、アプリとそのWebサービス間の安全な接続はベストプラクティスに従う必要があります。ベストプラクティスの動作は、 App Transport Security によって強化されます。
App Transport Security Technote で説明したように、Webサービスと通信するときに、App Transport Securityには次の要件と動作があります。
- サーバーは少なくともTransport Layer Security(TLS)プロトコルバージョン1.2をサポートしている必要があります。
- 接続暗号は、前方機密を提供するものに限定されています(下記の暗号のリストを参照してください)。
- 証明書は、2048ビット以上のRSAキーまたは256ビット以上の楕円曲線(ECC)キーを使用して、SHA256以上の署名ハッシュアルゴリズムを使用して署名する必要があります。
- 無効な証明書はハードエラーとなり、接続できなくなります。
言い換えれば、あなたのWebサービスリクエストは、a。)HTTPSを使用すること、そしてb)TLS v1.2を使用して転送秘密で暗号化することです。
ただし、他の記事で説明したように、アプリのInfo.plist
に安全でないドメインを指定することで、App Transport Securityからこの新しい動作をオーバーライドできます。
上書きするには、NSAppTransportSecurity
> NSExceptionDomains
辞書のプロパティをInfo.plist
に追加する必要があります。次に、WebサービスのドメインをNSExceptionDomains
辞書に追加します。
たとえば、Host www.yourwebservicehost.com 上のWebサービスに対するApp Transport Securityの動作を回避したい場合は、次のようにします。
アプリをXcodeで開きます。
Project NavigatorでInfo.plist
ファイルを見つけ、それを右クリックして別名で開く> ソースコードメニューオプションを選択します。プロパティリストファイルが右側のペインに表示されます。
以下のプロパティブロックをメインプロパティディクショナリの中(最初の<dict>
の下)に置きます。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
追加のドメインに対して例外を提供する必要がある場合は、NSExceptionDomains
の下に別の辞書プロパティを追加します。
上で参照されたキーについてもっと知るためには、 これはすでに言及したtechnote を読んでください。
これには2つの解決策があります。
解決策1:
Info.plist
ファイルに、キーがNSAppTransportSecurity
の辞書を追加します。'Allow Arbitrary Loads'
を使って辞書の中に別の要素を追加するPlist
構造体は以下の図のように表示されます。
解決策2:
Info.plist
ファイルに、キーがNSAppTransportSecurity
の辞書を追加します。NSExceptionDomains
'を使って辞書内に別の要素を追加'MyDomainName.com'
を持つ要素を追加しますNSIncludesSubdomains
型のキー 'Boolean
'を持つ要素を追加し、値をYES
として設定するNSTemporaryExceptionAllowsInsecureHTTPLoads
型のキー 'Boolean
'を持つ要素を追加し、値をYES
として設定するPlist
構造体は以下の図のように表示されます。
解決策2は選択されたドメインのみを許可するため、解決策2は優先されますが、解決策1はすべての安全でないHTTP接続を許可します。
転送セキュリティはiOS 9.0以降で利用できます。アプリケーション内でWSを呼び出そうとすると、この警告が表示される場合があります。
Application Transport Securityは、安全ではないため、クリアテキストのHTTP(http://)リソースの読み込みをブロックしました。一時的な例外はアプリのInfo.plistファイルで設定できます。
Info.plistに以下を追加すると、ATSが無効になります。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
この技術情報 に記載されているように、使用する設定を自動的に実行できるかどうかを判断します。
/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
Appleによれば、一般的にATSを無効にすることはあなたがそうする正当な理由がない限り、アプリの拒絶につながるでしょう。それでも、安全にアクセスできるドメインには例外を追加する必要があります。
アップルには、使用する設定を正確に指示する優れたツールがあります。「ターミナル」で、次のように入力します。
/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever
そしてnscurlはこのリクエストが失敗したかどうかをチェックし、そしてさまざまな設定を試して、どれが成功したか、そして何をすべきかを正確に教えてくれます。たとえば、私が訪問したサードパーティのURLの場合、このコマンドはこの辞書が渡すことを私に伝えました:
{
NSExceptionDomains = {
"www.example.com" = {
NSExceptionRequiresForwardSecrecy = false;
};
};
}
自分のサイトと自分の管理下にないサードパーティサイトを区別するには、たとえばキーNSThirdPartyExceptionRequiresForwardSecrecyを使用します。
2015-09-25(2015-09-18のXcodeアップデート後):
私は非怠惰な方法を使用しましたが、うまくいきませんでした。以下が私の試みです。
最初、
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.xxx.yyy.zzz</key>
<dict>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
そして第二に、
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.xxx.yyy.zzz</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
最後に、私は怠惰な方法を使いました:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
それは少し不安定かもしれませんが、私は他の解決策を見つけることができませんでした。
注:plist内の例外ドメインは小文字にする必要があります。
例:あなたはあなたのマシンを「設定」 - >「共有」の下で "MyAwesomeMacbook"と名付けました。あなたのサーバーは(テスト目的で)MyAwesomeMacbook.local:3000で動いています、そしてあなたのアプリは http://MyAwesomeMacbook.local:3000/files にリクエストを送る必要があります例外ドメインとして "myawesomemacbook.local"を指定してください。
-
あなたのinfo.plistは...を含みます.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>myawesomemacbook.local</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
Swift 4とxcode 10では、NSAllowsArbitraryLoadsをAllow Arbitrary Loadsに変更しました。だからそれはこのようになるでしょう:
<key>App Transport Security Settings</key>
<dict>
<key>Allow Arbitrary Loads</key><true/>
</dict>
それはそこに着く方法を言及する価値があるかもしれません...
Info.plistは、Main.storyboardまたはviewController.Swiftの下にあるファイルの1つです。
初めてクリックすると、通常は表形式になっているので、ファイルを右クリックして「別名で開く」ソースコードを選択し、次に末尾に向かって以下のコードを追加します。
<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>
上のコードをコピーして貼り付けます
"</dict>
</plist>"
これで終わりです。
問題27.10.15に直面しているXcode 7.1用のアップデート:
Info.plistの新しい値は「App Transport Security Settings」です。そこから、この辞書は含まれるべきです:
WKWebViewがいつも白くて何もロードしない理由を見つけようとここに来た人のために(まさにここに記述されているように どのように私はWKWebViewをSwiftでそしてmacOSアプリケーション用に動かせるでしょう
上記のすべてのロケット科学がうまくいかない場合は、明らかにサンドボックスの設定を確認してください。
Swiftやcocoaに慣れていなくても、プログラミングの経験が豊富なので、この解決策を見つけるために約20時間かかります。何十もの流行に敏感なiOSチュートリアルもAppleの基調講演もない - この小さなチェックボックスについては何も言及されていない。
ターゲットサイトがNSExceptionDomains
を介して外部ドメインからリソース(例:js
ファイル)をロードする可能性があるため、http
を使用しても効果が同時に適用されない場合があります。これらの外部ドメインをNSExceptionDomains
に追加することで解決できます。
どのリソースをロードできないかを調べるには、リモートデバッグを使用してみてください。これがチュートリアルです: http://geeklearning.io/Apache-cordova-and-remote-debugging-on-ios/
デフォルトでは、iOSはHTTPS APIのみを許可しています。 HTTPは安全ではないため、Appトランスポートセキュリティを無効にする必要があります。 ATSを無効にする2つの方法があります: -
1.プロジェクトinfo.plistにソースコードを追加し、ルートタグに次のコードを追加します。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2.プロジェクト情報を使用する。
左ペインのプロジェクトでプロジェクトをクリックし、ターゲットとしてプロジェクトを選択して、情報タブを選択します。次の構造に辞書を追加する必要があります。
Cordovaの場合、ios.jsonに追加したい場合は、次の手順に従ってください。
"NSAppTransportSecurity": [
{
"xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
}
]
そしてそれはの中にあるべきです:
"*-Info.plist": {
"parents": {
}
}