Отключить безопасность транспорта приложений в Xcode 9.2?

Я не могу отключить безопасность транспорта приложений (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.


person chrismanderson    schedule 06.12.2017    source источник
comment
Похоже, что это не работает должным образом в симуляторах 11.x. Возможно, сейчас попробуйте запустить симулятор iOS 10. Однако для этого определенно нужен радар. forum.developer.apple.com/thread/93298   -  person wottle    schedule 07.12.2017
comment
Только что увидел, что вы используете домен .dev. Читал в твиттере о предварительной загрузке HSTS, что Google теперь применяет HTTPS ко всему трафику .dev. Подробности см. В моем ответе ниже.   -  person wottle    schedule 07.12.2017


Ответы (2)


Первоначально я не собирал это вместе, но я думаю, что в iOS 11 Apple поддерживает HSTS. Я считаю, что недавно появилась поддержка списков предварительной загрузки HSTS в сочетании с Google добавление TLD .dev в список предварительной загрузки HSTS, вероятно, приведет к тому, что iOS попытается заставить вас использовать https, что дает сбой (я пропустил, что вы пытаетесь использовать локальный домен .dev для тестирования, что действительно является ключевым элементом здесь).

Я думаю, что ваше единственное решение - сменить локальный домен тестирования на другой домен, кроме домена .dev. Если вы это сделаете, вы сможете подключиться, и он не будет пытаться заставить вас перейти на https в вашей локальной среде разработки.

Короче говоря, Google получил права на домен верхнего уровня .dev и недавно добавил его в список предварительной загрузки HSTS, чтобы обеспечить безопасность всей связи с доменами .dev. На устройствах, поддерживающих списки предварительной загрузки HSTS, это приводит к перенаправлению всего трафика через HTTPS, что вызывает ошибки на серверах, не поддерживающих HTTPS.

person wottle    schedule 07.12.2017
comment
Ага, я думаю, вы совершенно правы. Мы также начали получать ошибки HSTS локально в Safari. Похоже, многие инженеры пытаются это сделать. (medium.engineering/use -a-dev-domain-not-anymore-95219778e6fd) - person chrismanderson; 07.12.2017
comment
Да, это статья, которую я нашел сегодня утром в твиттере. Изначально я не связывал их, пока не перечитал ваш пост и не понял, что вы используете домен .dev для своей локальной среды. Рад, что это не более широкая проблема с iOS 11 / Xcode 9. - person wottle; 07.12.2017

В навигаторе в левой части экрана в XCode щелкните основной файл проекта, в котором хранятся все файлы и папки. Щелкните вкладку «Информация». В разделе «Настраиваемые целевые свойства iOS» вы видели возможность изменить настройки безопасности транспорта приложений (ATS). Это явно не указано, но все еще доступно.

При наведении указателя мыши на параметры вы должны увидеть + в маленьком кружке. Нажмите здесь. XCode предложит вам создать «категорию приложений». В появившемся списке прокрутите вверх и выберите «Настройки безопасности транспорта приложений».

Нажмите на эту опцию. Как только он будет создан, он должен предложить вам изменить значение BOOL (по умолчанию должно быть «NO»). Справа вы должны увидеть набор стрелок вверх и вниз. Нажмите на это, чтобы изменить BOOL на да.

person Hugo Budd    schedule 11.02.2018
comment
Где это. Щелкните вкладку «Информация». В настраиваемых целевых свойствах iOS - person Pintu Rajput; 10.09.2019