Вопреки тому, что можно подумать (один пример: РАБОТА С ПРИЛОЖЕНИЕМ APPLE TRANSPORT SECURITY) NSAllowsArbitraryLoads
НЕ работает как флаг, который переключает режимы внесения в черный и белый списки, по крайней мере, это не очень хорошо работает с Чарльзом:
Подход с внесением в черный список (НЕ РАБОТАЕТ ДЛЯ МЕНЯ В IOS 9.0 — Чарльз не распознает трафик от/до промежуточного хоста):
Пример B: ATS для всех, за некоторыми исключениями
Если вы ожидаете, что все ваши домены будут работать с ATS, за исключением нескольких, которые, как вы знаете, не будут работать, вы можете указать исключения, для которых не следует использовать ATS, оставив весь остальной трафик включенным. Для этого сценария вам понадобится использовать NSExceptionDomains для указания доменов, для которых вы хотите переопределить настройки ATS по умолчанию.
Подход с добавлением в белый список (РАБОТАЕТ, но не очень хороший способ сделать это): Если для NSAllowsArbitraryLoads
установлено значение YES
, функция Application Transport Security отключена для всех доменов, кроме тех, которые перечислены под NSExceptionDomains
.
Пример C: ATS отключен, за некоторыми исключениями
И наоборот, вы можете захотеть, чтобы ATS работала только с теми доменами, которые, как вы точно знаете, могут ее поддерживать. Например, если вы разрабатываете клиент Twitter, вам может потребоваться загрузить бесчисленное множество URL-адресов, которые могут не поддерживать ATS, хотя вам нужны такие вещи, как вход в систему и другие запросы к Twitter для использования ATS. В этом случае вы можете отключить ATS по умолчанию, а затем указать URL-адрес, который вы хотите использовать ATS.
Еще один подход, описанный здесь: Этот странный прием делает разработку приложений iOS против a Local Server Way Easier предлагает добавить этап сборки сценария запуска, который использует PlistBuddy для исправления plist-файла приложения на лету. Вот их пример того, как приложение не использует ATS, когда разработчик работает с сервером на своей локальной машине (конечно, это может быть и промежуточный хост):
/usr/libexec/PlistBuddy -c "Add :NSAppTransportSecurity:NSExceptionDomains:$LOCAL_NETWORK_NAME:NSIncludesSubdomains bool true" $INFO_PLIST
/usr/libexec/PlistBuddy -c "Add :NSAppTransportSecurity:NSExceptionDomains:$LOCAL_NETWORK_NAME:NSThirdPartyExceptionAllowsInsecureHTTPLoads bool true" $INFO_PLIST
ИМО, исправление Plist — это лучший способ условно отключить ATS для промежуточных хостов, чем использование подхода с белым списком, описанного выше, поэтому мы будем придерживаться PlistBuddy.
person
Stanislav Pankevich
schedule
23.10.2015