ios 設定 App Transport Securityポリシーで保護された接続を使用する必要があるため、リソースをロードできませんでした




nsapptransportsecurity (15)

Xcodeを7.0またはiOS 9.0にアップデートしたときに問題に直面しています。 何とかそれは私にタイトルのエラーを与えることを始めた

「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サービスメソッドを呼び出すときに次のような問題が発生しました。 私が得ているLogged Errorは次のとおりです:

接続に失敗しました:Error Domain = NSURLErrorDomain Code = -1022 "App Transport Securityポリシーで保護された接続が必要なため、リソースをロードできませんでした。 UserInfo = {NSUnderlyingError = 0x7fada0f31880 {エラードメイン= kCFErrorDomainCFNetworkコード= -1022 "(null)"}、NSErrorFailingURLStringKey = MyServiceURL 、NSErrorFailingURLKey = MyServiceURL 、NSLocalizedDescription = App Transport Securityポリシーでセキュア接続。}

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

  1. リソースをロードできなかったのはios9です
  2. アプリケーション転送セキュリティXcode 7 beta 6
  3. https://stackoverflow.com/a/32609970

iOS 9(may)は開発者にApp Transport Securityを排他的に使用させる。 私はこれをどこかで無作為に耳にするので、これが本当かどうかはわかりません。 しかし、私はそれを疑い、この結論に至った:

iOS 9で動作しているアプリは、SSLなしでMeteorサーバに接続することはありません。

これは流星流星や流星流星を実行していることを意味します(おそらく?)はもう機能しません。

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


NSAllowsArbitraryLoads = true使用すると、すべてのサーバーへのすべての接続が安全でないことが認識されます。 特定のドメインだけが安全でない接続でアクセスできるようにしたい場合は、次のようにしてください:

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

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

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


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

任意のnode.jsサーバーが指定するパブリックhttps URLが表示されるので、サーバーをパースします。 例えば:

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

私の設定ファイルを自由に見てください


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

したがって、デフォルトではhttpsコールはアプリ内でのみ許可されます。 App Transport Securityを無効にするには、 info.plistファイルの次の行を追加してください...

<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


Xcode 8.0から8.3.3までを使用していて、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: .com)

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


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

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

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

  3. NSAllowsArbitraryLoadsというNSAllowsArbitraryLoadsBooleanとして追加し、次の図のようにその値をYES設定しました。

以前と同じように、プロジェクトをきれいにして、今はすべてがうまく動いています。

Ref Link: https://.com/a/32609970 : https://.com/a/32609970

編集:または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>

URLにHTTPではなくHTTPSを使用するだけで済みます


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

pList.infoをソースコードとして開き、次のように貼り付けます:

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

iOS 10.xとSwift 3.x [以下のバージョンもサポートされています]では、 'info.plist'に次の行を追加してください。

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

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

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


私はplistファイルとして解決しました。

NSAppTransportSecurity:Dictionaryを追加します。

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


pList.infoソースコードとして開き、 </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-->

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


私は、上記の多くのオプションの組み合わせでこれを解決することができました。 私は、これを動作させるために必要なすべてのことのチェックリストを含めます。

要するに:

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

第一歩:

まずは、明らかに、ウォッチ・エクステンションのinfo.plist NSAppTransportSecurityキーを辞書として追加し、 NSAppTransportSecurity設定されたブール値としてNSAllowsArbitraryLoadsというサブキーを追加するNSAppTransportSecurityました。 時計の拡張機能でのみ設定し、時計アプリのplistでは設定しないでください。 ただし、これはすべての接続を許可し、安全ではない可能性があることに注意してください。

または

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

ステップ2:

それから、ロードしようとしていたURLがhttpだけでなくhttpsであることを確認しなければなりませんでした。 まだhttpで使用されていたURLについては、

スウィフト

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

Obj-C:

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


Xcode 7.1以降(swift 2.0)では、


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





xcode7