App Transport Security и IP-адреса в iOS9
Я разрабатываю свое приложение для iOS, используя локальный сервер, работающий на моем компьютере разработчика. При тестировании на устройствах я подключаюсь напрямую через IP-адрес, который использует HTTP, а не HTTPS (поэтому мне не приходится иметь дело с самозаверяющими сертификатами во время разработки, которые в любом случае не понравятся устройству).
Я думал, что этого будет достаточно
Тем не менее, не может заставить его работать без добавления NSAllowsArbitraryLoads = YES
Ака это:
Теперь я должен помнить, чтобы удалить это при развертывании производственной сборки, но не во время разработки... arg. Если NSExceptionDomains
работать с IP-адресами, и если нет, могу ли я сделать что-то еще, не включая NSAllowsArbitraryLoads
?
4 ответа
Жестко закодированный IP-адрес не будет работать в iOS9. Я также столкнулся с той же проблемой. Перепробовал все перестановки и комбинации доступных решений. Наконец, пришлось использовать правильное доменное имя.
Итак, нет. В iOS9 вы просто не можете избежать жестко закодированных IP-адресов.
Есть ли что-нибудь еще, что я могу сделать без включения
NSAllowsArbitraryLoads
?
Одним из обходных путей является использование http://xip.io/, как объяснил QJeffR в этой ветке форумов Apple Developer Forum (которой поделился David L в своем комментарии):
DNS-вызов (например) 10.0.1.8.xip.io преобразуется в http://10.0.1.8/, что позволяет использовать домен вместо IP-адреса для
NSExceptionDomains
ключ.
Как сказал @PanxShaz, вы не можете ввести жестко закодированный IP-адрес, но вы можете использовать простой обходной путь:
Открыть свой
/etc/hosts
использование файлаsudo
и добавьте новое локальное доменное имя для вашего IP-адреса. Пример:192.168.99.100 docker-host.localhost
Затем очистите свой DNS:
dscacheutil -flushcache
И, наконец, используйте этот новый локальный домен в исключениях безопасности транспорта вашего приложения.
Если вы нацелены на iOS 10+, просто установите флаг NSAllowsLocalNetworking.