programing

App Transport Security 정책에 보안 연결을 사용해야 하므로 리소스를 로드할 수 없습니다.

megabox 2023. 4. 29. 09:10
반응형

App Transport Security 정책에 보안 연결을 사용해야 하므로 리소스를 로드할 수 없습니다.

Xcode를 7.0 또는 iOS 9.0으로 업데이트했을 때 문제가 발생합니다. 어떻게든 제목 오류가 발생하기 시작했습니다.

"App Transport Security 정책에 보안 연결을 사용해야 하므로 리소스를 로드할 수 없습니다."

웹 서비스 방법:

- (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으로 업데이트하면 위의 웹 서비스 방법을 호출할 때 다음과 같은 문제가 발생하기 시작했습니다.기록된 오류는 다음과 같습니다.

연결 실패:오류 Domain=NSURLerrorDomainCode=-1022 "App Transport Security 정책에 보안 연결을 사용해야 하므로 리소스를 로드할 수 없습니다."UserInfo={NSUnderlingError=0x7fada0f31880 {ErrorDomain=kCFErrorDomainCFNetwork Code=-1022("오류"), NS 오류 실패URLstringKey=MyServiceURL, NS 오류 실패URLKey=MyServiceURL, NSLocalizedDescription=App Transport Security 정책에 보안 연결을 사용해야 하므로 리소스를 로드할 수 없습니다.}

질문과 답변을 따르려고 했지만 아무런 결과도 얻지 못했습니다. 서비스 호출 오류를 제거할 수 있는 방법이 있습니까?

  1. 리소스를 로드할 수 없습니다. isios9
  2. 앱 전송 보안 Xcode 7 베타 6
  3. https://stackoverflow.com/a/32609970

info.plist에 키를 추가하여 해결했습니다.제가 수행한 단계는 다음과 같습니다.

  1. 내프젝트대열습다니었상을을 열었습니다.info.plist

  2. 호된키추라는 되었습니다.NSAppTransportSecurityDictionary.

  3. 과 같은 되었습니다.NSAllowsArbitraryLoads~하듯이Boolean값을 다음으로 설정합니다.YES아래 이미지와 같이.

여기에 이미지 설명 입력

프로젝트를 정리하면 이전과 같이 모든 것이 정상적으로 실행됩니다.

참조 링크: 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>

의주, 용사를 사용합니다.NSAllowsArbitraryLoads = true그계의진중에에서.info.plist서버에 대한 모든 연결이 안전하지 않습니다.안전하지 않은 연결을 통해 특정 도메인에만 액세스할 수 있도록 하려면 다음을 시도하십시오.

여기에 이미지 설명 입력

또는 소스 코드:

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

편집 후 Clean & Build 프로젝트입니다.

전송 보안은 iOS 9.0 이상 및 OS X v10.11 이상에서 제공됩니다.

그래서 기본적으로 https 통화만 에서만 허용됩니다.앱 전송 보안을 해제하려면 info.plist 파일에 다음 행을 추가합니다.

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

자세한 정보:
https://developer.apple.com/library/content/documentation/General/Reference//Articles/CocoaKeys.html://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html #//apple_ref/doc/uid/TP40009251-SW33

iOS 10.x 및 Swift 3.x의 경우 [아래 버전도 지원됨]에서 'info.plist'에 다음 행을 추가하면 됩니다.

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

Swift 4에서 당신은 사용할 수 있습니다.

->Go Info.plist

-> 정보 속성 목록의 플러스 클릭

->앱 전송 보안 설정을 사전으로 추가

-> 플러스 아이콘전송 보안 설정 클릭

-> 임의 로드 허용 집합 YES 추가

다음과 같은 Bellow

여기에 이미지 설명 입력

나는 리스트 파일을 해결했습니다.

NSAppTransportSecurity : Dictionary를 추가합니다.

"NSAllowsArbitaryLoads"라는 하위 키를 부울로 추가: YES

여기에 이미지 설명 입력

이것은 애플이 당신의 아피스에 더 엄격한 보안을 강요하는 방법입니다(https를 통해 https를 사용하도록 강제함).이 보안 설정을 제거하는 방법을 설명하겠습니다.


여기에 대한 대부분의 답변은 이 키를 info.plist에 추가하는 것을 지적합니다.

이것만으로는 이 문제가 해결되지 않았습니다.같은 키를 안에 추가해야 했습니다.

Project -> Targets -> Info -> Custom iOS Target Properties 여기에 이미지 설명 입력


그러나 이렇게 하면 다른 사용자로부터 안전하지 않은 연결이 발생할 수 있습니다.특정 도메인만 사용하여 안전하지 않은 연결을 만들 수 있도록 하려면 info.plist에 다음을 추가할 수 있습니다.

여기에 이미지 설명 입력

App Transport Security 정책을 사용하려면 Swift 4.03에서 작동하는 보안 연결을 사용해야 하므로 리소스를 로드할 수 없습니다.

pList.info 을 소스 코드로 열고 다음을 붙여넣습니다.

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

Apple 설명서에서

만약 당신이 새로운 앱을 개발하고 있다면, 당신은 HTTPS를 독점적으로 사용해야 합니다.기존 앱이 있다면 당장 HTTPS를 최대한 활용하고, 앱의 나머지 부분을 최대한 빨리 마이그레이션할 수 있는 계획을 세워야 합니다.또한 상위 수준의 API를 통한 통신은 TLS 버전 1.2를 사용하여 암호화해야 합니다.이 요구 사항을 준수하지 않는 연결을 시도하면 오류가 발생합니다.앱이 안전하지 않은 도메인에 요청해야 하는 경우 앱의 Info.plist 파일에 이 도메인을 지정해야 합니다.

앱 전송 보안을 무시하는 방법:

<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 OS X 10.11에서 전송 보안 예외 구성

Xcode 8.0 및 swift 3.0 또는 2.2를 사용하는 경우

여기에 이미지 설명 입력

Xcode 7.1 이상(swift 2.0)

여기에 이미지 설명 입력

XCode 12.5에서.IOS 14.다음 항목을 작성했습니다.

여기에 이미지 설명 입력

info.plist 소스 코드는 다음과 같습니다.

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

XML의 열렬한 팬이 아니라면 아래 태그를 목록 파일에 추가하면 됩니다.

여기에 이미지 설명 입력

iOS 9 (아마도)는 개발자들이 앱 전송 보안을 독점적으로 사용하도록 강요할 수 있습니다.제가 어디선가 우연히 들었기 때문에 이것이 사실인지 모르겠습니다.하지만 저는 그것을 의심하고 다음과 같은 결론에 도달했습니다.

iOS 9에서 실행 중인 앱은 SSL 없이 더 이상 Meteor 서버에 연결되지 않을 수 있습니다.

이것은 유성 런니오스 또는 유성 런니오스 장치가 작동한다는 것을 의미합니다(아마도?).더 이상 일하지 않습니다.

info에서 info.plist는NSAppTransportSecurity [Dictionary].NSAllowsArbitraryLoads [Boolean]하기로 되어 있는YES는 Meteor를 해야 합니다.https그것 때문에localhost server

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

여기에 이미지 설명 입력

로컬 호스트에서 개발 중인 사용자의 경우 다음 단계를 수행합니다.

  1. 의 "+" 버을누다니 옆에 .Information Property List 가추를 합니다.App Transport Security Settings그리고 그것을 할당합니다.Dictionary유형
  2. 생성된 새로만옆니있는에 "+" 누다릅버튼 옆에 .App Transport Security Settings 및 력및추가NSExceptionAllowsInsecureHTTPLoadsBoolean값을 다음으로 설정합니다.YES.
  3. 을 오른쪽 버튼으로 합니다.NSExceptionAllowsInsecureHTTPLoads를 입력하고 "Shift Row Right" 옵션을 클릭하여 위 항목의 하위 항목으로 만듭니다.
  4. "+" 튼을누다 옆에 .NSExceptionAllowsInsecureHTTPLoads 및 력및추가Allow Arbitrary LoadsBoolean값을 다음으로 설정합니다.YES

참고: 결국 다음 그림에 표시된 것처럼 보여야 합니다.

여기에 이미지 설명 입력

URL에 HTTP가 아닌 HTTPS를 사용하면 작동합니다.

올바른 info.plist 파일을 변경해야 합니다.

내 프로젝트 이름 아래에 info.plist를 변경하는 것을 눈치채지 못했기 때문에 이 문제로 시간을 낭비하는 것은 이번이 두 번째입니다.UIT 테스트.

만약 당신이 파이어베이스를 사용한다면, 그것은 추가할 것입니다.NSAllowsArbitraryLoadsInWebContent = true에 시대에NSAppTransportSecurity및 섹및션NSAllowsArbitraryLoads = true가 없을 입니다.

저는 언급된 많은 옵션을 조합하여 이 문제를 해결할 수 있었습니다.이 작업을 수행하기 위해 제가 해야 했던 모든 작업의 체크리스트를 포함하겠습니다.

간단히 말해서:

  1. NSAllowsArbitraryLoads내 시계 확장(내 시계 앱이 아님)에 대해 사실입니다.
  2. 사용 중인지 확인https그리고 아닌http.

1단계:

첫 번째로 그리고 가장 명백하게 나는 추가해야 했습니다.NSAppTransportSecurity내 시계 확장판의 사전과 같은 키info.plist라는 하위 키를 사용하여NSAllowsArbitraryLoadstrue로 설정된 부울 값입니다.시계 앱의 플리스트가 아닌 시계 확장에서만 설정하십시오.그러나 이렇게 하면 모든 연결이 허용되고 안전하지 않을 수 있습니다.

여기에 이미지 설명 입력

또는

<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”];

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을 사용합니다.감사해요.

XCode 13의 경우, 추가Allow Arbitrary Loads그렇게 사소한 일이 아닙니다.기본적으로 이름이 지정된 키가 없기 때문입니다.App Transport Security Settings.

Info/Custom iOS Target Properties(정보/사용자 지정 iOS 대상 속성) 아래에 표시되는 더하기 버튼 중 하나를 눌러 새 루트 레벨 키를 추가하는 방법을 찾아야 합니다.

자세한 내용은 다음 링크를 참조하십시오.

https://stackoverflow.com/a/72400983/1644618

"NSallowsArbitraryLoads" 옵션이 아닌 1년 서명된 인증서를 사용하여 자체 호스팅된 구문 분석 서버의 경우 이 문제를 해결했습니다.

서버를 임의의 node.js 서버로 구문 분석하면 지정해야 하는 공용 https URL이 표시됩니다.예를 들어:

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

구성 파일을 언제든지 확인할 수 있습니다.

다음을 사용하는 것이 좋습니다.https호출만 가능합니다.전송 보안은 iOS 9.0에 도입되었으며, 오직https기본적으로 앱에서 호출됩니다.

그러나 여전히 모든 non을 허용하려면https호출 - 추가NSAppTransportSecurity(사전) Info.plist 및 이름이 지정된 하위 키 추가NSAllowsArbitraryLoadsYES라는 부울 값을 사용합니다.업데이트 후 목록은 다음과 같아야 합니다.

여기에 이미지 설명 입력

단계

  • 정보 목록 열기
  • 정보 속성 목록에서 +를 클릭합니다.
  • Security Settings앱 전송 보안 설정 )NSAppTransportSecurity
  • 추가된 앱 전송 보안 설정 아래에서 +를 클릭합니다.
  • 로드 허용(Allow Arbitrary Loads NSAllowsArbitraryLoads)를을 YES로

언급URL : https://stackoverflow.com/questions/32631184/the-resource-could-not-be-loaded-because-the-app-transport-security-policy-requi

반응형