Безопасность транспорта приложений и IP-адреса в iOS9


Я разрабатываю свое приложение iOS, используя локальный сервер, работающий на моем dev box. При тестировании на устройствах я подключаюсь напрямую через IP-адрес, который находится через HTTP, а не HTTPS (поэтому мне не нужно иметь дело с самозаверяющими сертификатами во время разработки, которые устройству даже не понравятся).

Я думал, что этого будет достаточно:

, не может заставить его работать без добавления NSAllowsArbitraryLoads = YES, АКА это:

Сейчас, Я придется помнить, чтобы удалить это при прокатке производственной сборки, но не во время разработки...аргумент. Должен ли NSExceptionDomains работа с IP-адресами, а если нет, есть ли что-нибудь еще, что я могу сделать без включения NSAllowsArbitraryLoads?

4 52

4 ответа:

жестко закодированный IP-адрес не будет работать в iOS9. Я также столкнулся с той же проблемой. Перепробовал все перестановки и комбинации доступных решений. Наконец, пришлось использовать правильное доменное имя.

Итак, NO.In iOS9 вы просто не можете уйти с жестко закодированными IP-адресами.

есть ли что-нибудь еще, что я могу сделать без включения NSAllowsArbitraryLoads?

один обходной путь заключается в использовании xip.io, Как объяснил QJeffR на это Apple Developer Forums thread (который был разделен Дэвидом L в комментарии):

вызов DNS (например) 10.0.1.8.xip.io разрешу до 10.0.1.8, что позволяет использовать домен вместо IP адрес для NSExceptionDomains ключ.

как @PanxShaz сказал, что вы не можете поставить жесткий IP-адрес, но вы можете использовать простой обходной путь:

  1. открыть /etc/hosts файл с помощью sudo и добавить новое локальное доменное имя для вашего IP-адреса. Пример:

    192.168.99.100 docker-host.localhost

  2. затем промойте DNS:

    dscacheutil -flushcache

  3. и, наконец, используйте этот новый локальный домен в исключениях безопасности транспорта вашего приложения.

Если вы нацелены на iOS 10+, просто установите NSAllowsLocalNetworking флаг.