С тестированием Xcode 7 приложение iOS 9 не может получить данные из запроса http
Я разрабатываю приложение в iOS. Для своей разработки я использую Xcode beta7. Раньше я тестировал свое приложение на своем мобильном телефоне с iOS 8.4 после обновления до iOS 9, я не могу установить то же самое приложение на свой мобильный. Пожалуйста, дайте мне несколько предложений. Большое спасибо!
3 ответа
Добавьте эту строку в ваш файл.plist:
Если используется только один домен, добавьте его в свой.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yoursite.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
В настоящее время это всего лишь обходной путь, но я одобрил его в App Store несколько недель назад.
Исходя из изначально минимальной информации о проблеме, проблема, вероятно, заключается в сбое http-запроса к серверу, который не соответствует современным рекомендациям по безопасности.
iOS9 теперь по умолчанию требует, чтобы сервер поддерживал https с TLS 1.2, передавал безопасность и защищал методы шифрования.
От: Приложение Техника безопасности транспорта
Поведение по умолчанию:
Все соединения, использующие API-интерфейсы NSURLConnection, CFURL или NSURLSession, используют поведение App Transport Security по умолчанию в приложениях, созданных для iOS 9.0 или более поздней версии и OS X 10.11 или более поздней версии. Соединения, которые не соответствуют требованиям, потерпят неудачу.
Решение заключается в обновлении сервера до https TLS 1.2 и пересылке безопасности. Также поддерживается только метод шифрования в приведенной выше технике безопасности.
Другим решением является внесение белого списка URL в список приложений или даже при необходимости разрешить все http-соединения. Это снижает безопасность соединения, лучший подход - обновить сервер.
При необходимости все URL-адреса могут быть разрешены, это обычно требуется только тогда, когда URL-адреса, к которым осуществляется доступ, неизвестны, возможно, предоставлены пользователем или существует большое количество известных URL-адресов.
Чтобы отключить безопасность для всех URL-адресов, добавьте это в plist-файл приложения:
(не рекомендуется), если вам действительно не нужен доступ к неизвестным URL
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><YES/>
</dict>
Чтобы отключить безопасность для отдельных URL-адресов (и вложенных URL-адресов), добавьте это в plist-файл приложения (измените "yourdomain.com на правильный URL-адрес"):
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourdomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
Apple предоставила информацию об этом нескольких местах:
Была описана сессия 706 WWDC 2015, а также заметки о выпуске: что нового в iOS iOS 9.0. Я полагаю, что это было также упомянуто в основном докладе WWDC.
Также посмотрите этот SO Ответ: О ATS SSL в версии для iOS 9.
Обязательно установите NSAppTransportSecurity для совместимости.
Смотрите: Как я могу добавить NSAppTransportSecurity в мой файл info.plist?