Я столкнулся с проблемой, когда я обновил свой 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. Но когда я обновил Xcode 7.0 на iOS 9.0, у меня возникла проблема, подобная следующей, когда я вызываю вышеуказанный метод веб-службы. Зарегистрированная ошибка, которую я получаю:
Ошибка подключения: ошибка Domain = NSURLErrorDomain Code = -1022 «Не удалось загрузить ресурс, поскольку политика безопасности транспорта приложений требует использования безопасного подключения». UserInfo = {NSUnderlyingError = 0x7fada0f31880 {Error Domain = kCFErrorDomainCFNetwork Code = -1022 "(null)"}, NSErrorFailingURLStringKey = MyServiceURL , NSErrorFailingURLKey = MyServiceURL загружен, поскольку безопасность не может быть использована, т.к. соединение.}
Я пробовал следующие вопросы и ответы, но не получил никакого результата, есть ли какая-либо предварительная идея, как я могу устранить эту ошибку вызова службы?
источник
Ответы:
Я решил это с добавлением ключа в info.plist. Шаги, которые я выполнил:
Открыл
info.plist
файл цели моего проектаДобавлен ключ под
NSAppTransportSecurity
названиемDictionary
.NSAllowsArbitraryLoads
asBoolean
и установите его значениеYES
как на следующем изображении.Очистите проект, и теперь все работает как обычно.
Ссылка: https://stackoverflow.com/a/32609970
РЕДАКТИРОВАТЬ: ИЛИ В исходный код
info.plist
файла мы можем добавить, что:источник
NSExceptionDomains
. Или же это будет исключениемNSAllowArbitraryLoads
, тогда вы должны использовать https, чтобы посетить этоexception
App Transport Security Settings
иAllow Arbitrary Loads
соответственноИмейте
NSAllowsArbitraryLoads = true
в виду , использование в проектеinfo.plist
позволяет небезопасно все подключения к любому серверу. Если вы хотите убедиться, что через небезопасное соединение доступен только определенный домен , попробуйте следующее:Или, как исходный код:
Очистить и построить проект после редактирования.
источник
Транспортная безопасность обеспечивается в iOS 9.0 или новее, а также в OS X v10.11 и новее.
Таким образом, по умолчанию только вызовы https разрешены только в приложениях. Чтобы отключить App Transport Security, добавьте следующие строки в файл info.plist ...
Для получения дополнительной информации:
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»
источник
В Swift 4 можно использовать
-> Перейти Info.plist
-> Нажмите плюс из списка свойств информации
-> Добавить параметры безопасности транспорта приложения в качестве словаря
-> Щелкните значок «Плюс». Настройки безопасности транспорта приложения.
-> Добавить Разрешить произвольные нагрузки установить ДА
Ниже изображение выглядит
источник
Я решил как файл plist.
Добавьте NSAppTransportSecurity: словарь.
Добавить подраздел с именем «NSAllowsArbitraryLoads» в качестве логического значения: ДА
источник
Не удалось загрузить ресурс, поскольку политика безопасности транспорта приложений требует использования безопасного соединения, работающего в Swift 4.03.
Откройте ваш pList.info как исходный код и вставьте:
источник
Из документации Apple
Если вы разрабатываете новое приложение, вы должны использовать исключительно HTTPS. Если у вас есть существующее приложение, вы должны использовать HTTPS настолько, насколько вы можете прямо сейчас, и составить план миграции остальной части вашего приложения как можно скорее. Кроме того, ваше общение через высокоуровневые API должно быть зашифровано с использованием TLS версии 1.2 с прямой секретностью. Если вы попытаетесь установить соединение, которое не соответствует этому требованию, выдается сообщение об ошибке. Если вашему приложению нужно отправить запрос в небезопасный домен, вы должны указать этот домен в файле Info.plist вашего приложения.
Чтобы обойти безопасность транспорта приложения:
Разрешить все небезопасные домены
Подробнее: Настройка исключений безопасности транспорта приложений в iOS 9 и OSX 10.11
источник
Если вы используете Xcode 8.0 и swift 3.0 или 2.2
источник
В Xcode 7.1 и более поздних версиях (Swift 2.0)
источник
Это способ Apple обеспечить более строгую защиту вашего API (принудительно использовать https через http). Я объясню, как удалить этот параметр безопасности.
Большинство ответов здесь указывают на добавление этого ключа в ваш info.plist
Одно это не решило эту проблему для меня. Я должен был добавить тот же ключ внутрь
Project -> Targets -> Info -> Custom iOS Target Properties
Это позволит небезопасным соединениям происходить от кого бы то ни было. Если вы хотите разрешить использовать незащищенные соединения только для определенного домена, вы можете добавить следующее в ваш info.plist.
источник
Вам просто нужно использовать HTTPS, а не HTTP в вашем URL, и он будет работать
источник
Если вы не большой поклонник XML, просто добавьте тег ниже в ваш файл plist.
источник
iOS 9 (может) заставит разработчиков использовать исключительно App Transport Security . Я случайно услышал это где-то случайно, так что сам не знаю, правда ли это. Но я подозреваю это и пришел к такому выводу:
Приложение, работающее на iOS 9, больше не будет (возможно) подключаться к серверу Meteor без SSL.
Это означает, что запуск метеоритного запуска ios или запуск метеоритного ios-устройства (вероятно?) Больше не будет работать.
В info.plist приложения
NSAppTransportSecurity [Dictionary]
должен быть ключ,NSAllowsArbitraryLoads [Boolean]
который нужно установить,YES
или Метеор должен скороhttps
его использоватьlocalhost server
.источник
Если вы используете Xcode 8.0 до 8.3.3 и swift 2.2 до 3.0
источник
Откройте свой pList.info как Исходный код и внизу непосредственно перед
</dict>
добавлением следующего кода,И, наконец, изменить
your.domain.com
с вашей базой URL. Спасибо.источник
Для тех из вас, кто разрабатывает на 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
Примечание: в итоге оно должно выглядеть примерно так, как показано на следующем рисунке.
источник
Мне удалось решить это с помощью комбинации множества упомянутых вариантов. Я включу контрольный список всех вещей, которые я должен был сделать, чтобы заставить это работать.
Короче говоря:
NSAllowsArbitraryLoads
значение true для моего расширения часов (не мое приложение часов).https
и нетhttp
.Шаг первый:
Во-первых и наиболее очевидно, что мне нужно было добавить
NSAppTransportSecurity
ключ в качестве словаря в моих расширениях часовinfo.plist
с подключом, называемымNSAllowsArbitraryLoads
как логическое значение true. Установите это только в расширении часов, а не в списке приложений часов. Хотя обратите внимание, что это разрешает все соединения и может быть небезопасным.или
Шаг второй:
Затем я должен был убедиться, что URL, который я пытался загрузить, был
https
не простоhttp
. Для любых URL, которые все еще были http, я использовал:Свифт :
let newURLString = oldURLString.stringByReplacingOccurrencesOfString("http", withString: "https")
Obj-C:
NSString *newURLString = [oldURLString stringByReplacingOccurrencesOfString:@“http” withString:@“https”];
источник
Убедитесь, что вы изменили правильный файл info.plist .
Это второй раз, когда я трачу время на эту проблему, потому что я не заметил, что я изменяю info.plist в MyProjectNameUITests.
источник
Если вы используете FireBase, он будет добавлен
NSAllowsArbitraryLoadsInWebContent = true
вNSAppTransportSecurity
разделе, иNSAllowsArbitraryLoads = true
не будет работатьисточник
Я решил эту проблему в случае самодостаточного сервера синтаксического анализа, использующего сертификат, подписанный на один год, а не параметр «NSAllowsArbitraryLoads»
Parse Server как любой сервер node.js представляет общедоступный URL-адрес https, который вы должны указать. Например:
parse-server --appId --masterKey --publicServerURL https: //your.public.url/some_nodejs
Не стесняйтесь взглянуть на мои файлы конфигурации
источник