NSAllowsArbitraryLoads не работает

У меня было рабочее приложение, которое загружает некоторую информацию из домена http. Но после обновления Swift 2.0 и Xcode 7 мое приложение не может подключиться к серверу и загрузить данные json, я получаю "App Transport Security заблокировал загрузку ресурсов HTTP с открытым текстом (http://), так как он небезопасен. Временные исключения можно настроить с помощью информации вашего приложения.plist файл." ошибка.

Я попытался поместить эти строки в свою информацию.файл plist:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

но я получаю ту же ошибку, это не работать. Я всегда получаю нулевые данные из методов загрузки. У кого-нибудь есть такая же ошибка? Спасибо!

EDIT: вот изображение из моей информации.plist file:

Info.plist file

9 ответов


Я чувствую себя так глупо. Я добавил ключи для отключения ATS по неправильной информации.файл plist. Вместо того, чтобы добавлять его в вспомогательные файлы/информацию.plist файл, я добавил его на MyAppTests/вспомогательные файлы / информация.plist файл. Не совсем ошибка в Xcode, но ошибка в моем мозгу. Спасибо всем за ответы!


вы можете попробовать использовать

nscurl --ats-diagnostics <your-URL>

в терминале. Это поможет вам найти настройки, которые позволят вашему приложению подключиться к вашему-URL. Это работает только на OSX El Capitan. Проверьте apple technote.

но если вы пробовали NSArbitraryLoads в вашей информации.plist файл, этот диагностический инструмент, вероятно, не поможет вам. Думаю, вы нашли жучок.


у меня была такая же проблема, я пробовал добавлять NSExceptionMinimumTLSVersion и это работает.

<key>NSAppTransportSecurity</key>
<dict>
   <key>NSExceptionMinimumTLSVersion</key>
   <string>TLSv1.0</string>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Я не уверен, почему это помогает, Но... так и есть! Я надеюсь, что это полезно для кого-то там тоже


в моем случае мне нужно было удалить все другие ключи, такие как" разрешить произвольные нагрузки в веб-контенте "или" Домены исключений", чтобы получить" разрешить произвольную нагрузку "для работы, как это установлено в true в разделе" Настройки безопасности транспорта приложения " в Info.файл plist.

протестировано с помощью XCode 8.2.1, iOS 10.2.


ни одно из предыдущих решений не работало для меня, у меня были nsallowsarbitraryloads установлены в true, но все же HTP не будет работать, осмотревшись, я заметил, что информация.файл plist имеет раздел NSExceptionDomains, поэтому я удалил его для тестирования, и все сработало.

таким образом, кажется, что наличие NSExceptionDomains отменяет NSAllowsArbitraryLoads, надеюсь, это полезно.


Если вам нужно загрузить http:// ресурс только в web (UIWebView/WKWebView/SafariViewController), тогда должно быть достаточно следующего.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>

вы пытались добавить свой домен, например? Вы должны добавить его в NSAppTransportSecurity словарь.

<key>NSExceptionDomains</key>
        <dict>
            <key>abcde.com</key>
            <dict>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <true/>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>

У меня была аналогичная проблема и через некоторое время я понял, что информация.plist файл был поврежден. Я могу только посоветовать проверить xml непосредственно не только редактор plist в xcode.


У меня была та же проблема в Xcode версии 8.3.2 (8E2002) с iOS 10.3. После удаления всех ключей, таких как" разрешить произвольные нагрузки в веб-контенте "или" Домены исключений", ключ" разрешить произвольную нагрузку " работает должным образом. Спасибо @dariukas.