App Transport Security 정책에 보안 연결을 사용해야하므로 리소스를로드 할 수 없습니다
Xcode를 7.0 또는 iOS 9.0으로 업데이트 할 때 문제가 발생합니다. 어떻게 든 제목 오류가 발생하기 시작했습니다.
"앱 전송 보안 정책에 보안 연결을 사용해야하므로 리소스를로드 할 수 없습니다."
웹 서비스 방법 :
-(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 = NSURLErrorDomain 코드 = -1022 "App Transport Security 정책에 보안 연결을 사용해야하므로 리소스를로드 할 수 없습니다." UserInfo = {NSUnderlyingError = 0x7fada0f31880 {오류 도메인 = kCFErrorDomainCFNetwork 코드 = -1022 "(null)"}, NSErrorFailingURLStringKey = MyServiceURL , NSErrorFailingURLKey = MyServiceURL , NSLocalizedDescription = 앱 전송 보안 정책에 보안을 사용해야하므로 리소스를로드 할 수 없습니다 연결.}
다음 질문과 답변을 시도했지만 결과가 나타나지 않습니다. 해당 서비스 호출 오류를 제거하는 방법에 대한 사전 아이디어가 있습니까?
info.plist에 키를 추가하여 해결했습니다. 내가 따르는 단계는 다음과 같습니다.
내 프로젝트 대상의
info.plist
파일을 열었습니다라는 키 추가
NSAppTransportSecurity
A와를Dictionary
.NSAllowsArbitraryLoads
as 이라는 하위 키를 추가하고 다음 이미지와 같이Boolean
값을 설정합니다YES
.
프로젝트를 청소하면 지금처럼 모든 것이 제대로 작동합니다.
참조 링크 : https://stackoverflow.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>
사용주의 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>
편집 후 프로젝트를 정리하고 빌드하십시오.
전송 보안 은 iOS 9.0 이상 및 OS X v10.11 이상에서 제공됩니다.
따라서 기본적으로 https 호출 만 앱에서만 허용됩니다. App Transport Security를 끄려면 info.plist 파일에 다음 줄을 추가 하십시오 ...
<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>
스위프트 4에서는
-> Go Info.plist
-> 정보 속성 목록의 더하기 클릭
-> 앱 전송 보안 설정 을 사전으로 추가
-> 클릭 플러스 아이콘 앱 전송 보안 설정
-> 임의로드 허용 설정 YES
벨로우즈 이미지
plist 파일로 해결했습니다.
NSAppTransportSecurity : Dictionary를 추가하십시오.
"NSAllowsArbitraryLoads"라는 하위 키를 부울로 추가 : YES
App Transport Security 정책에 Swift 4.03에서 작동하는 보안 연결을 사용해야하므로 리소스를로드 할 수 없습니다.
pList.info를 소스 코드로 열고 붙여 넣기 :
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Xcode 8.0 및 swift 3.0 또는 2.2를 사용하는 경우
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 및 OSX 10.11에서 앱 전송 보안 예외 구성
Xcode 7.1 이상 (swift 2.0)
URL에서 HTTP가 아닌 HTTPS를 사용하기 만하면 작동합니다.
XML을 좋아하지 않는다면 plist 파일에 아래 태그를 추가하십시오.
iOS 9는 개발자가 App Transport Security를 독점적 으로 사용하도록 할 수 있습니다 . 나는 이것을 무작위로 어딘가에 들었으므로 이것이 사실인지 알 수 없다. 그러나 나는 그것을 의심 하고이 결론에 도달했습니다.
iOS 9에서 실행되는 앱은 더 이상 SSL없이 Meteor 서버에 연결되지 않습니다.
이것은 유성 실행 ios 또는 유성 실행 ios 장치가 더 이상 작동하지 않을 것임을 의미합니다.
앱의 info.plist에서 NSAppTransportSecurity [Dictionary]
키 NSAllowsArbitraryLoads [Boolean]
를 설정 YES
하거나 Meteor가 곧 사용해야 https
합니다 localhost server
.
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: stackoverflow.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로 변경 하십시오. 감사.
언급 된 많은 옵션을 조합 하여이 문제를 해결했습니다. 이 작업을 수행하기 위해해야 할 모든 일에 대한 체크리스트를 포함하겠습니다.
한마디로 :
NSAllowsArbitraryLoads
시계 확장 프로그램 (시계 앱이 아닌)에 대해 true로 설정 합니다.- 내가 사용
https
하고 있는지 확인하십시오http
.
1 단계 :
먼저 가장 분명하게 부울로 true로 설정된 하위 키를 사용하여 NSAppTransportSecurity
시계 확장에서 사전으로 키 를 추가해야했습니다 . 시계 앱의 plist가 아닌 시계 확장 에서만 설정하십시오. 이로 인해 모든 연결이 허용되고 안전하지 않을 수 있습니다.info.plist
NSAllowsArbitraryLoads
또는
<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”];
올바른 info.plist 파일을 변경하십시오 .
이것은이다 두 번째로 내가 MyProjectNameUITests에서의 Info.plist를 변경하고있어 것을 통지하지 않았기 때문에,이 문제에 대한 I의 시간을 낭비.
"NSAllowsArbitraryLoads"옵션 대신 1 년 서명 된 인증서를 사용하는 자체 호스팅 된 구문 분석 서버의 경우이 문제를 해결했습니다.
임의의 node.js 서버로 서버를 구문 분석 하면 지정해야하는 공개 https URL 이 표시됩니다. 예를 들어 :
parse-server --appId --masterKey --publicServerURL https : //your.public.url/some_nodejs
구성 파일 을 자유롭게 살펴보십시오.
localhost에서 개발하는 사람들은 다음 단계를 따르십시오.
- 옆에있는 "+"버튼을 누르고 유형을
Information Property List
추가App Transport Security Settings
하고 할당하십시오Dictionary
- 새로 만든
App Transport Security Settings
항목 옆의 "+"버튼을 누르고NSExceptionAllowsInsecureHTTPLoads
유형을 추가Boolean
하고 값을로 설정하십시오YES
. NSExceptionAllowsInsecureHTTPLoads
항목을 마우스 오른쪽 단추로 클릭하고 "Shift Row Right"옵션을 클릭하여 위 항목의 하위 항목으로 만드십시오.NSExceptionAllowsInsecureHTTPLoads
항목 옆의 "+"버튼을 누르고Allow Arbitrary Loads
유형을 추가Boolean
하고 값을YES
참고 : 결국 다음 그림과 같이 보일 것입니다.
이것은 당신의 API에 대한 보안을 강화하는 사과 방식입니다 (http를 통해 https를 사용해야 함). 이 보안 설정을 제거하는 방법을 설명하겠습니다.
여기에 대한 대부분의 답변은이 키를 info.plist에 추가하는 것을 지적합니다.
이것만으로는이 문제를 해결하지 못했습니다. 내부에 동일한 키를 추가해야했습니다.
Project -> Targets -> Info -> Custom iOS Target Properties
그러나 모든 사람으로부터 안전하지 않은 연결이 발생할 수 있습니다. 특정 도메인 만 안전하지 않은 연결을 사용하도록하려면 info.plist에 다음을 추가 할 수 있습니다.
'Programing' 카테고리의 다른 글
인터페이스와 추상 클래스의 차이점을 어떻게 설명해야합니까? (0) | 2020.02.16 |
---|---|
int를 문자열로 변환 하시겠습니까? (0) | 2020.02.16 |
PHP의 NOW () 함수 (0) | 2020.02.16 |
일단 조각의 인스턴스 상태를 백 스택에 올바르게 저장하는 방법은 무엇입니까? (0) | 2020.02.16 |
range ()보다 항상 xrange ()를 선호해야합니까? (0) | 2020.02.16 |