С тестированием 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?

Другие вопросы по тегам