web-dev-qa-db-ja.com

App Transport Securityポリシーで安全な接続を使用する必要があるため、リソースを読み込めませんでした

Xcodeを7.0またはiOS 9.0にアップデートしたときに問題が発生します。どういうわけかそれは私にTitledエラーを与え始めました

「App Transport Securityポリシーで安全な接続を使用する必要があるため、リソースをロードできませんでした」

Webサービスメソッド:

-(void)ServiceCall:(NSString*)ServiceName :(NSString *)DataString
{
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    [sessionConfiguration setAllowsCellularAccess:YES];
    [sessionConfiguration setHTTPAdditionalHeaders:@{ @"Accept" : @"application/json" }];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",ServiceURL]];
    NSLog(@"URl %@%@",url,DataString);
    // Configure the Request
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setValue:[NSString stringWithFormat:@"%@=%@", strSessName, strSessVal] forHTTPHeaderField:@"Cookie"];
    request.HTTPBody = [DataString dataUsingEncoding:NSUTF8StringEncoding];
    request.HTTPMethod = @"Post";

    // post the request and handle response
    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
                                          {
                                              // Handle the Response
                                              if(error)
                                              {
                                                  NSLog(@"%@",[NSString stringWithFormat:@"Connection failed: %@", [error description]]);

                                                  // Update the View
                                                  dispatch_async(dispatch_get_main_queue(), ^{

                                                      // Hide the Loader
                                                      [MBProgressHUD hideHUDForView:[[UIApplication sharedApplication] delegate].window animated:YES];


                                                  });
                                                  return;
                                              }
                                              NSArray * cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:request.URL];
                                              for (NSHTTPCookie * cookie in cookies)
                                              {
                                                  NSLog(@"%@=%@", cookie.name, cookie.value);
                                                  strSessName=cookie.name;
                                                  strSessVal=cookie.value;

                                              }

                                              NSString *retVal = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}];
[postDataTask resume];

}

このサービスはXcode以前のバージョンとiOS以前のバージョンでは問題なく動作していますが、iOS 9.0上のXcode 7.0にアップデートすると、上記のWebサービスメソッドを呼び出すときに次のような問題が発生し始めました。私が得ているログエラーは次のとおりです。

接続に失敗しました:エラーDomain = NSURLErrorDomain Code = -1022 "App Transport Securityポリシーで安全な接続を使用する必要があるため、リソースを読み込めませんでした。" UserInfo = {NSUnderlyingError = 0x7fada0f31880 {エラードメイン= kCFErrorDomainCFNetwork Code = -1022 "(null)"}、NSErrorFailingURLStringKey = MyServiceURL、NSErrorFailingURLKey = MyServiceURLロードされたアプリケーションはNSLocalになっている可能性があります。セキュリティポリシーでは安全な接続を使用する必要があります。

以下の質問と回答を試してみましたが、そこで結果が得られませんでした。そのサービスコールエラーを取り除くにはどうすればよいですか。

  1. リソースをロードできませんでしたios9です
  2. App Transport Security Xcode 7ベータ6
  3. https://stackoverflow.com/a/32609970
431
Manab Kumar Mal

Info.plistにキーを追加して解決しました。私が従った手順は次のとおりです。

  1. プロジェクトターゲットのinfo.plistファイルを開きました

  2. NSAppTransportSecurityとしてDictionaryというキーを追加しました。

  3. 次の図のように、NSAllowsArbitraryLoadsとしてBooleanというサブキーを追加し、その値をYESに設定します。

enter image description here

プロジェクトをきれいにして今、すべてが以前と同じように問題なく実行されています。

参考リンク: https://stackoverflow.com/a/32609970

編集: OR info.plistファイルのソースコードで、次のように追加できます。

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>yourdomain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
       </dict>
  </dict>
846
Manab Kumar Mal

プロジェクトのNSAllowsArbitraryLoads = trueinfo.plistを使用すると、すべてのサーバーへのすべての接続が安全でなくなる可能性があります。安全でない接続を介して 特定のドメイン にのみアクセスできるようにしたい場合は、次の手順を試してください。

enter image description here

または、ソースコードとして:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>domain.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

編集後にプロジェクトをクリーン&ビルドします。

239
Arjan

トランスポートセキュリティ は、iOS 9.0以降、およびOS X v10.11以降で提供されています。

そのため、デフォルトでは https の呼び出しのみがアプリで許可されています。 App Transport Securityを無効にするには、 info.plist fileに次の行を追加します。

<key>NSAppTransportSecurity</key>
  <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
  </dict>

詳細については:
https://developer.Apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//Apple_ref/doc/uid/TP40009251-SW33

36

IOS 10.xおよびSwift 3.xの場合(以下のバージョンもサポートされています)、 'info.plist'に以下の行を追加するだけです。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
29
Mr. Bean

Swift 4ではあなたが使用することができます

- > Info.plistにアクセス

- >情報プロパティリストのプラスをクリック

- >辞書としてApp Transportのセキュリティ設定を追加

- >プラスアイコンをクリックApp Transportのセキュリティ設定

- > 任意の負荷を許可 set YESを追加

下の画像はこんな感じです

enter image description here

22
Enamul Haque

Plistファイルとして解決しました。

NSAppTransportSecurity:Dictionaryを追加します。

"NSAllowsArbitraryLoads"という名前のサブキーをブール値として追加します。YES

enter image description here

21
Avinash651

App Transport SecurityポリシーではSwift 4.03で機能する安全な接続の使用が必要なため、リソースをロードできませんでした。

PList.infoをソースコードとして開き、貼り付けます。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
12
Keshav Gera

Xcode 8.0とSwift 3.0または2.2を使用している場合

enter image description here

10
Anit Kumar

アップルのドキュメントから

新しいアプリを開発している場合は、HTTPSを排他的に使用する必要があります。既存のアプリを使用している場合は、今すぐできる限りHTTPSを使用し、残りのアプリをすぐに移行する計画を立てる必要があります。さらに、上位レベルのAPIを介した通信は、TLSバージョン1.2を使用して転送秘密で暗号化する必要がありますこの要件に従わない接続を確立しようとすると、エラーがスローされます。安全でないドメインにリクエストを送信するには、アプリのInfo.plistファイルでこのドメインを指定する必要があります。

App Transportのセキュリティを回避するには

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.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>

続きを読む: iOS 9およびOSX 10.11でのApp Transportセキュリティ例外の構成

9
Ashok R

URLにHTTPではなくHTTPSを使用するだけで十分です。

9
pierre23

Xcode 7.1以降(Swift 2.0)

enter image description here

9
A.G

もしあなたがXMLの大ファンでなければ、plistファイルに下記のタグを追加してください。

enter image description here

7
MrWaqasAhmed

iOS 9(開発者)は App Transport Security を排他的に使用することを開発者に強いる可能性があります。私はこれがどこかでランダムに聞こえたので、これが私自身であるかどうかはわかりません。しかし、私はそれを疑い、この結論に至りました:

iOS 9上で実行されているアプリは(おそらく)SSLなしでMeteorサーバーに接続しなくなります。

これは、流星を実行するiosまたは流星を実行するios - デバイスが(おそらく?)もはや動作しないことを意味します。

アプリのinfo.plistでは、NSAppTransportSecurity [Dictionary]はキーNSAllowsArbitraryLoads [Boolean]YESに設定する必要があります。またはMeteorはすぐにlocalhost serverhttpsを使用する必要があります。

5
Mahesh

Xcode 8.0から8.3.3およびSwift 2.2から3.0を使用している場合

私の場合はURLを変更する必要があります http:// から https:// (動作していない場合は試してみてください)

Add an App Transport Security Setting: Dictionary.
Add a NSAppTransportSecurity: Dictionary.
Add a NSExceptionDomains: Dictionary.
Add a yourdomain.com: Dictionary.  (Ex: stackoverflow.com)

Add Subkey named " NSIncludesSubdomains" as Boolean: YES
Add Subkey named " NSExceptionAllowsInsecureHTTPLoads" as Boolean: YES

enter image description here

4

pList.info as ソースコード を開き、</dict>の直前に以下のコードを追加してください。

 <!--By Passing-->
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>your.domain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>1.0</string>
                <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>
    <!--End Passing-->

そして最後にあなたのベースURLでyour.domain.comを変更します。ありがとう。

3
Najam

私はこれまでに述べた選択肢の多くを組み合わせて解決しました。これを機能させるために私がしなければならなかったことすべてのチェックリストを含めます。

要するに:

  1. 私のウォッチ拡張機能(私のウォッチアプリではない)に対してNSAllowsArbitraryLoadsをtrueに設定します。
  2. httpsではなくhttpを使用していることを確認してください。

ステップ1:

まず第一に、そして明らかに私は、私のwatch拡張機能のinfo.plistに辞書としてNSAppTransportSecurityキーを追加しなければなりませんでした。そして、NSAllowsArbitraryLoadsというサブキーをtrueに設定します。 Onlyこれをwatchの拡張子で設定し、watchアプリのplistでは設定しないでください。これはすべての接続を許可し、安全でない可能性があることに注意してください。

enter image description here

または

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

ステップ2:

次に、ロードしようとしているURLがhttpsではなくhttpであることを確認する必要がありました。まだhttpであったURLについては、私が使用しました:

スイフト

let newURLString = oldURLString.stringByReplacingOccurrencesOfString("http", withString: "https")

Obj-C:

NSString *newURLString = [oldURLString stringByReplacingOccurrencesOfString:@“http” withString:@“https”];

2
Gordonium

必ず正しいinfo.plistファイルを変更してください _。

これはsecond timeです。MyProjectNameUITestsの下のinfo.plistを変更していることに気付かなかったので、この問題には時間を無駄にしています。

2
Shefy Gur-ary

「NSAllowsArbitraryLoads」オプションではなく、1年間の署名付き証明書を使用して自己ホスト型解析サーバーを使用する場合は、この問題を解決しました。

任意のnode.jsサーバーとしてサーバーを解析し、 public https url を指定します。例えば:

parse-server --appId --masterKey --publicServerURL https://your.public.url/some_nodejs

私の 設定ファイルを見てみてください

0
CyrIng