App Transport Security et adresses IP dans iOS9

Je développe mon application iOS en utilisant un serveur local fonctionnant sur ma boîte de développement. Lorsque je teste sur des appareils, je me connecte directement via une adresse IP, qui est via HTTP et non HTTPS (donc je n’ai pas à traiter de certificates auto-signés en cours de développement, ce que le périphérique n’aimerait même pas).

Je pensais que cela serait suffisant:

entrer la description de l'image ici

Cependant, ne peut pas le faire fonctionner sans append aussi NSAllowsArbitraryLoads = YES , AKA ceci:

entrer la description de l'image ici

Maintenant, je devrai me souvenir de supprimer ceci lors du lancement d’une production mais pas pendant le développement … arg. Les NSExceptionDomains doivent- NSExceptionDomains fonctionner avec des adresses IP et, dans la NSExceptionDomains , y a-t-il autre chose que je puisse faire sans activer NSAllowsArbitraryLoads ?

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

Donc, dans iOS9, vous ne pouvez pas vous contenter d’adresses IP codées en dur.

Y a-t-il autre chose que je puisse faire sans activer également NSAllowsArbitraryLoads ?

Une solution de contournement consiste à utiliser xip.io , comme expliqué par QJeffR dans ce thread des forums de développeurs Apple (partagé par David L dans son commentaire ):

Un appel DNS à (par exemple) 10.0.1.8.xip.io sera résolu en 10.0.1.8 , permettant l’utilisation du domaine à la place de l’adresse IP pour la clé NSExceptionDomains .

Comme @PanxShaz a déclaré que vous ne pouvez pas mettre une adresse IP codée en dur, vous pouvez utiliser une solution de contournement simple:

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

    192.168.99.100 docker-host.localhost

  2. Ensuite, videz votre DNS:

    dscacheutil -flushcache

  3. Et enfin, utilisez ce nouveau domaine local dans vos exceptions de sécurité du transport des applications.

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