Пытался запустить существующее приложение на iOS9, но при использовании не работал AFURLSessionManager
.
__block NSURLSessionDataTask *task = [self.sessionManager dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
if (error) {
} else {
}
}];
[task resume];
Я получаю следующую ошибку:
Error Domain=NSURLErrorDomain Code=-999 "cancelled.
Также получаются следующие журналы:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824
CFNetwork SSLHandshake failed (-9824)
Обновление: я добавил несколько обновлений в свое решение: ошибка HTTP-загрузки NSURLSession / NSURLConnection на iOS 9
Ответы:
Нашел решение:
В iOS9 ATS применяет передовые методы во время сетевых вызовов, включая использование HTTPS.
Из документации Apple:
ATS предотвращает случайное раскрытие информации, обеспечивает безопасное поведение по умолчанию и проста в использовании. Вам следует принять ATS как можно скорее, независимо от того, создаете ли вы новое приложение или обновляете существующее. Если вы разрабатываете новое приложение, вам следует использовать исключительно HTTPS. Если у вас есть существующее приложение, вы должны использовать HTTPS как можно чаще прямо сейчас и как можно скорее создать план по миграции остальной части приложения.
В бета-версии 1 в настоящее время нет возможности определить это в info.plist. Решение - добавить его вручную:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
Обновление 1: это временный обходной путь, пока вы не будете готовы принять поддержку iOS9 ATS.
Обновление 2: для получения дополнительных сведений перейдите по следующей ссылке: http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
Update3: если вы пытаетесь подключиться к хосту (YOURHOST.COM), который имеет только TLS 1.0
Добавьте их в Info.plist вашего приложения.
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>YOURHOST.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>
источник
NSTemporaryExceptionMinimumTLSVersion
есть небольшая ошибка: должен быть, например, TLSv1.0 вместо 1.0 , см. Ключи словаря доменовКак работать с SSL в iOS9 , Одно из решений:
Как говорят в Apple :
iOS 9 и OSX 10.11 требуют TLSv1.2 SSL для всех хостов, с которых вы планируете запрашивать данные, если вы не укажете домены исключений в файле Info.plist вашего приложения.
Синтаксис конфигурации 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 insecure 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> <!--Connect to anything (this is probably BAD)--> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
Если вам нужно это сделать, вероятно, лучше всего обновить свои серверы, чтобы использовать TLSv1.2 и SSL, если они еще не сделали этого. Это следует рассматривать как временное решение.
На сегодняшний день в предварительной документации не упоминаются какие-либо из этих параметров конфигурации каким-либо образом. Как только это произойдет, я обновлю ответ, добавив ссылку на соответствующую документацию.
Для получения дополнительной информации перейдите к iOS9AdaptationTips
источник
Technote от Apple по безопасности транспорта приложений очень удобен ; это помогло нам найти более безопасное решение нашей проблемы.
Надеюсь, это поможет кому-то другому. У нас возникли проблемы с подключением к URL-адресам Amazon S3, которые оказались совершенно действительными, URL-адресами TLSv12 HTTPS. Оказывается, нам пришлось отключить,
NSExceptionRequiresForwardSecrecy
чтобы включить еще несколько шифров, которые использует S3.В нашем
Info.plist
:<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>amazonaws.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict>
источник
Если у вас возникла проблема с Amazon S3, как у меня, попробуйте вставить это в свой info.plist как прямой дочерний элемент вашего тега верхнего уровня.
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>amazonaws.com</key> <dict> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> <key>amazonaws.com.cn</key> <dict> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict>
Вы можете найти дополнительную информацию по адресу:
http://docs.aws.amazon.com/mobile/sdkforios/developerguide/ats.html#resolving-the-issue
источник
Я нашел решение здесь. И это работает для меня.
Проверьте это, это может вам помочь.
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>myDomain.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>
источник
Просто добавьте следующие поля в свой файл .plist
Синтаксис выглядит так:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
источник
Обновить:
Начиная с Xcode 7.1, вам не нужно вручную вводить
NSAppTransportSecurity
словарь вinfo.plist
.Теперь он выполнит автозаполнение для вас, поймет, что это словарь, а затем также автоматически заполнит
Allows Arbitrary
нагрузки. info.plist скриншотисточник
Устранить ошибку NSURLConnection Http load failed Просто добавьте следующий Dict в info.plist:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSAllowsArbitraryLoadsInWebContent</key> <true/> </dict>
источник
Я решил это, добавив ключ в info.plist. Я выполнил следующие шаги:
Я открыл файл info.plist своего проекта
Добавлен ключ NSAppTransportSecurity в качестве словаря.
Добавлен подраздел под названием NSAllowsArbitraryLoads как Boolean и установлен для него значение YES, как показано на следующем рисунке. введите описание изображения здесь
Очистите проект, и теперь все работает нормально, как и раньше.
Ссылка: https://stackoverflow.com/a/32609970
источник
Вот что у меня сработало, когда у меня была эта ошибка:
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>example.com</key> <dict> <key>NSExceptionRequiresForwardSecrecy</key> <false/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> </dict> </dict> </dict>
источник
Вы можете попробовать добавить эту функцию в файл RCTHTTPRequestHandler.m
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]); }
источник
В дополнение к вышеупомянутым ответам еще раз проверьте свой URL
источник
Вы должны добавить
App Transport Security Settings
кinfo.plist
и добавитьAllow Arbitrary Loads
кApp Transport Security Settings
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
источник