Я не могу отключить безопасность транспорта приложений (ATS) в Xcode 9.2. Я (в течение многих лет) отключал ATS при запуске сборок для моей локальной серверной среды, например:
Безопасность транспорта заблокировала открытый текст HTTP
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
В Xcode 9.2 простой запрос (выполняется в локальном приложении Rails в режиме http):
let session = URLSession(configuration: .default)
let url = URL(string: "http://store.dev/api/products.json")!
let task = session.dataTask(with: url) { data, response, error in
print(data)
print(response)
print(error)
}
task.resume()
выходит из строя с сообщением об ошибке
Error Domain = NSURLErrorDomain Code = -1200 «Произошла ошибка SSL, и невозможно установить безопасное соединение с сервером». UserInfo = {_ kCFStreamErrorCodeKey = -9802, NSLocalizedRecoverySuggestion = Вы все равно хотите подключиться к серверу? _kCFStreamErrorDomainKey = 3, _kCFStreamErrorCodeKey = -9802}}, NSLocalizedDescription = Произошла ошибка SSL и невозможно установить безопасное соединение с сервером., NSErrorFailingURLKey = https://store.dev/api/products., NSErrorFailingURLStringKey = https://store.dev/api/products.json, _kCFStreamErrorDomainKey = 3}
Тот же самый запрос (в том числе и тот же проект) успешно выполняется в Xcode 9.1.
В обоих случаях я использую цель развертывания iOS 11.1. Вы можете видеть, что Xcode меняет URL-адрес с http на https, чего я не хочу.
Вот ссылка на супербазовый проект, который работает в Xcode 9.1, но не работает в 9.2 (https://github.com/chrismanderson/ats-sample).
Я также пробовал отключить ATS только для локального домена store.dev
, и опять же, он работает в Xcode 9.1, но не в 9.2.