Не удалось загрузить ресурс, так как политика безопасности транспорта приложения требует использования безопасного подключения
я столкнулся с проблемой, когда я обновил свой Xcode до 7.0 или iOS 9.0. Как-то он начал давать мне название error
" не удалось загрузить ресурс, так как приложение Transport Security политика требует использования безопасного соединения"
Webservice Метод:
-(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, но когда я обновился до Xcode 7.0, который находится на iOS 9.0, он запустился чтобы дать мне проблему, как показано ниже, когда я вызываю выше метод веб-службы. Регистрируемая ошибка, которую я получаю:
ошибка подключения: ошибка Domain=NSURLErrorDomain код=-1022 "в не удалось загрузить ресурс, так как политика безопасности транспорта приложения требуется использование защищенного соединения." UserInfo={NSUnderlyingError=0x7fada0f31880 {ошибка Домен=Kcferrordomaincfnetwork Code=-1022 "(null)"}, NSErrorFailingURLStringKey=MyServiceURL, NSErrorFailingURLKey=MyServiceURL, NSLocalizedDescription=не удалось загрузить ресурс, так как Политика безопасности транспорта приложений требует использования безопасного соединение.}
Я пробовал следующие вопросы и ответы, но не получил никакого результата там, есть ли предварительная идея, как я могу удалить эту ошибку вызова службы?
- ресурс не может быть загружен iOS 9 охота
- приложение Transport Security Xcode 7 beta 6
- https://stackoverflow.com/a/32609970
18 ответов:
я решил его с добавлением некоторого ключа в информации.файл plist. Шаги, которые я следовал:
открыл цель моего проекта
info.plist
fileдобавлен ключ под названием
NSAppTransportSecurity
какDictionary
.- добавлен подраздел под названием
NSAllowsArbitraryLoads
какBoolean
и установите его значение вYES
как на следующем изображении.очистите проект, и теперь все работает нормально, как как и раньше.
ссылка на ссылку:https://stackoverflow.com/a/32609970
EDIT: Или в исходном коде
будьте в курсе, используя
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>
очистить и построить проект после редактирования.
безопасность на транспорте предоставляется в iOS 9.0 или более поздней версии, а также в OS X v10.11 и более поздних версиях.
Так что по умолчанию только https звонки только в приложениях. Чтобы отключить безопасность транспорта приложений, добавьте следующие строки в информация.файл plist...
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
дополнительные info:
https://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.03.
откройте pList.info как исходный код и вставить:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
из документации Apple
если вы разрабатываете новое приложение, вы должны использовать HTTPS исключительно. Если у вас есть существующее приложение, вы должны использовать HTTPS столько, сколько вы можете прямо сейчас, и создать план для миграции остальной части вашего приложения как можно скорее. Кроме того, ваша связь через API более высокого уровня должна быть зашифрована с помощью TLS версии 1.2 с прямой секретностью. При попытке установить соединение, которое не соответствует этому требованию, возникает ошибка брошенный. Если ваше приложение должно сделать запрос к небезопасным домена, вы должны указать этот домен в инфо вашего приложения.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
в Swift 4 Вы можете использовать
- > Go Info.файл plist
-> нажмите плюс списка свойств информации
->добавить Настройки Безопасности Транспорта Приложения как Dictionary
-> нажмите значок "плюс" Настройки Безопасности Транспорта Приложения
-> добавить Разрешить Произвольные Нагрузки set да
ниже изображение выглядит как
iOS 9 (май) заставить разработчиков использовать Безопасность Транспорта Приложения исключительно. Я подслушал это где-то случайно, поэтому я не знаю, правда ли это. Но я подозреваю это и пришел к такому выводу:
приложение, работающее на iOS 9, больше не будет (возможно) подключаться к серверу Meteor без SSL.
Это означает, что запуск meteor run ios или meteor run ios-устройство будет (вероятно?) больше не работает.
в приложения информация.файл plist,
NSAppTransportSecurity [Dictionary]
нужно клавишуNSAllowsArbitraryLoads [Boolean]
значениеYES
или Метеор должен использоватьhttps
для своегоlocalhost server
в ближайшее время.
мне удалось решить эту проблему с помощью комбинации многих из упомянутых вариантов. Я включу контрольный список всех вещей, которые я должен был сделать, чтобы заставить это работать.
короче:
- Set
NSAllowsArbitraryLoads
true для моего расширения часов (не мое приложение для часов).- убедитесь, что я был с помощью
https
, а неhttp
.
Шаг первый:
во-первых и наиболее очевидно, я должен был добавить
NSAppTransportSecurity
ключ как a словарь в моих часах расширенияinfo.plist
С подразделом под названиемNSAllowsArbitraryLoads
как логическое значение true. только установите это в расширение часов, а не в plist приложения для часов. Хотя обратите внимание, что это позволяет все соединения и может быть небезопасно.или
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
Шаг второй:
тогда я должен был убедиться, что url, который я пытался загрузить, был
https
и не простоhttp
. Для любых URL-адресов, которые все еще были http, я использовал:Свифт:
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: 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. Спасибо.
Я решил эту проблему в случае самодостаточного parse-сервера, используя один год подписанный сертификат, а не опцию "NSAllowsArbitraryLoads"
разбирать сервер как любой узел.сервер JS представляет собой общественные HTTPS в URL-адрес что вы должны указать. Например:
parse-server --appId --masterKey --publicServerURL https://your.общественный.URL-адрес/some_nodejs
Не стесняйтесь взглянуть на мой настройки файлы