Можно ли отключить ATS в iOS 9 только для среды отладки?

Я работаю над средой разработки без установки HTTPS. Можно ли автоматически отключить ATS только для режима разработки (отладки)?

Ответ 1

Мое решение состоит в том, чтобы сохранить параметр отключения ATS по умолчанию по умолчанию и добавить новую фазу Script, чтобы изменить ее в наборе приложений Info.plist при создании приложения.

введите описание изображения здесь

Это script:

#Disables ATS in debug builds.
INFOPLIST="${TARGET_BUILD_DIR}"/"${INFOPLIST_PATH}"
case "${CONFIGURATION}" in
"Release"|"Adhoc")
/usr/libexec/PlistBuddy -c "Set :NSAppTransportSecurity:NSAllowsArbitraryLoads NO" "${INFOPLIST}"
;;
"Debug")
/usr/libexec/PlistBuddy -c "Set :NSAppTransportSecurity:NSAllowsArbitraryLoads YES" "${INFOPLIST}"
;; 
esac

Ответ 2

Другое решение. Используя INFOPLIST_PREPROCESS = YES и INFOPLIST_PREPROCESSOR_DEFINITIONS = DEBUG=1,

введите описание изображения здесь

это может быть условный препроцесс, такой как код C, используя #ifdef или #if непосредственно в Info.plist.

<key>UIMainStoryboardFile</key>
<string>Main</string>
#if DEBUG
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
#endif
<key>UIRequiredDeviceCapabilities</key>
<array>

Минусы: невозможно открыть редактор списка свойств Xcode, поскольку он не является корректным XML: (

Ответ 3

Да, вы можете настроить параметры проекта для использования другого файла Info.plist для Debug, Release или любой другой конфигурации, которую вы используете в своем проекте (аналогично настройке профилей Provisioning Profiles), поэтому в вашем модуле Debug вы можете отключить ATS полностью.

Перейдите в Проект → Ваша цель → Настройки сборки → Файл Info.plist