Ответ 1
SFSafariViewController может показывать HTTP без ключа NSAppTransportSecurity.
UIWebView и WKWebView требуют, чтобы упомянутый выше ключ NSAppTransportSecurity отображал страницы HTTP.
В iOS 9 Apple блокирует небезопасные HTTP-соединения для приложений, если только определенные хосты не включены в белый список.
http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
Являются ли WebView (-ами) свободными от этих правил по понятным причинам, или мы все еще ожидаем, чтобы белые списки хостов, которые открывается браузером... включая все ссылки с данной страницы?
Я не был уверен, что это была наша ответственность или если это было освобождено.
SFSafariViewController может показывать HTTP без ключа NSAppTransportSecurity.
UIWebView и WKWebView требуют, чтобы упомянутый выше ключ NSAppTransportSecurity отображал страницы HTTP.
В моих приложениях .plist для руководства Apple добавлено следующее:
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections - with and without SSL (DANGEROUS)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
и когда я пытаюсь загрузить мой webView (с сервера HTTPS не менее), я получаю следующую ошибку и не загружается.
NSURLSession/NSURLConnection Ошибка загрузки HTTP (kCFStreamErrorDomainSSL, -9813)
Итак, похоже, что они не только не освобождаются, они не работают, даже если вы внесли правильное дополнение к .plist.
Этот вопрос был первоначально о iOS 9; однако, согласно Apple documentation:
Начиная с iOS 10.0 и более поздних версий поддерживаются следующие подразделы:
- NSAllowsArbitraryLoadsInWebContent
- ...
Используйте NSAllowsArbitraryLoadsInWebContent, так что вам не нужно белым списком каждой страницы, которую может загрузить WebView.
Сохраните NSAllowsArbitraryLoads, чтобы поддерживать обратную совместимость с iOS 9 и включить новую настройку в проект Xcode 8 Info.plist здесь:
Если вашему приложению (например, стороннему веб-браузеру) требуется загрузить произвольный контент, Apple предлагает способ полностью отключить ATS, но я подозреваю, что разумно использовать эту возможность экономно:
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>