ios - 設定 - nsapptransportsecurity




App Transport Securityポリシーでは安全な接続の使用が必要なため、リソースをロードできませんでした (13)

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

接続に失敗しました:Error Domain = NSURLErrorDomain Code = -1022 "App Transport Securityポリシーでは安全な接続を使用する必要があるため、リソースをロードできませんでした。" UserInfo = {NSUnderlyingError = 0x7fada0f31880 {Error Domain = kCFErrorDomainCFNetwork Code = -1022 "(null)"}、NSErrorFailingURLStringKey = MyServiceURL 、NSErrorFailingURLKey = MyServiceURL 、NSLocalizedDescription = App Transport Securityポリシーではセキュアな使用が必要なため、リソースをロードできませんでした接続。}

以下の質問と回答を試しましたが、結果が得られませんでした。そのサービスコールエラーを削除する方法はありますか?

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

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

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

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

Swift 4で使用できます

-> Info.plistに移動

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

->辞書として App Transport Security設定 を追加

->クリックプラスアイコン App Transport Security Settings

-> [任意のロード 許可] セットを追加 YES

以下の画像は次のようになります


XMLの大ファンでない場合は、plistファイルに以下のタグを追加してください。


Xcode 7.1以降(swift 2.0)


iOS 10.xおよびSwift 3.x [以下のバージョンもサポートされています]の場合、「info.plist」に次の行を追加するだけです

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

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

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

つまり、meteor run iosまたはmeteor run ios-deviceを実行すると(おそらく?)動作しなくなります。

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


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

NSAppTransportSecurity:辞書を追加します。

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


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

node.jsサーバーとしてサーバーを解析すると、指定する必要がある パブリックhttps URL が提示されます。 例えば:

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

構成ファイル を自由に見てください


ローカルホストで開発している方は、次の手順に従ってください:

  1. Information Property List 横にある[+]ボタンをタップし、 App Transport Security Settings を追加して、 Dictionary タイプを割り当てます
  2. 新しく作成された App Transport Security Settings エントリの横にある「+」ボタンをタップし、タイプ Boolean NSExceptionAllowsInsecureHTTPLoads を追加して、その値を YES 設定します。
  3. NSExceptionAllowsInsecureHTTPLoads エントリを右クリックし、「Shift Row Right」オプションをクリックして、上記のエントリの子にします。
  4. NSExceptionAllowsInsecureHTTPLoads エントリの横にある「+」ボタンをタップし、 Boolean 型の Allow Arbitrary LoadsAllow Arbitrary Loads を追加し、その値を YES 設定します。

注:最終的には、次の図のようになります。


上記のオプションの多くを組み合わせて、これを解決することができました。 これを機能させるために私がしなければならなかったすべてのことのチェックリストを含めます。

要するに:

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

第一歩:

最初に、そして最も明らかに、 NSAppTransportSecurity と呼ばれるサブキーをtrueに設定して、ウォッチ拡張機能の info.plist 辞書として NSAppTransportSecurity キーを追加する 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 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: .com)

Add Subkey named " NSIncludesSubdomains" as Boolean: YES
Add Subkey named " NSExceptionAllowsInsecureHTTPLoads" as Boolean: 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で変更します。 ありがとう。


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

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





xcode7