web-dev-qa-db-fra.com

App Transport Security et adresses IP dans iOS9

Je développe mon application iOS à l'aide d'un serveur local fonctionnant sur ma boîte de développement. Lors des tests sur les appareils, je me connecte directement via une adresse IP, qui est via HTTP et non HTTPS (donc je n'ai pas à gérer les certificats auto-signés pendant le développement, ce que l'appareil n'aimerait même pas de toute façon).

J'ai pensé que ce serait suffisant:

enter image description here

Cependant, ne peut pas le faire fonctionner sans ajouter également NSAllowsArbitraryLoads = YES, Alias ​​ceci:

enter image description here

Maintenant, je devrai me rappeler de supprimer cela lors du lancement d'une génération de production mais pas pendant le développement ... arg. Le NSExceptionDomains doit-il fonctionner avec des adresses IP, et sinon, puis-je faire autre chose sans activer également le NSAllowsArbitraryLoads?

52
esilver

L'adresse IP codée en dur ne fonctionnera pas dans iOS9. J'ai également fait face au même problème. J'ai essayé toutes les permutations et combinaisons de solutions disponibles. Enfin, a dû utiliser un nom de domaine approprié.

Donc, NON Dans iOS9, vous ne pouvez tout simplement pas vous en sortir avec des adresses IP codées en dur.

52
PanxShaz

puis-je faire autre chose sans activer également NSAllowsArbitraryLoads?

Une solution de contournement consiste à utiliser xip.io , comme expliqué par QJeffR in this Apple Thread Forums Developer ( qui a été partagé par David L dans son commentaire ):

Un appel DNS à (par exemple) 10.0.1.8.xip.io se résoudra en 10.0.1.8 , permettant l'utilisation du domaine au lieu de l'adresse IP pour le NSExceptionDomains clé.

25
TachyonVortex

Comme @PanxShaz l'a dit, vous ne pouvez pas mettre une adresse IP codée en dur mais vous pouvez utiliser une solution de contournement simple:

  1. Ouvrez votre /etc/hosts fichier en utilisant Sudo et ajoutez un nouveau nom de domaine local pour votre adresse IP. Exemple:

    192.168.99.100 docker-Host.localhost

  2. Rincez ensuite votre DNS:

    dscacheutil -flushcache

  3. Et enfin, utilisez ce nouveau domaine local dans vos exceptions de sécurité de transport d'application.

5
anasaitali

Si vous ciblez iOS 10+, définissez simplement l'indicateur NSAllowsLocalNetworking .

3
Herman Kan