webentwicklung-frage-antwort-db.com.de

App-Transportsicherheit und IP-Adressen in iOS9

Ich entwickle meine iOS-App mit einem lokalen Server, der auf meiner Entwicklungsbox läuft. Beim Testen auf Geräten stelle ich eine direkte Verbindung über eine IP-Adresse her, die über HTTP und nicht über HTTPS erfolgt (daher muss ich mich während der Entwicklung nicht mit selbstsignierten Zertifikaten befassen, die das Gerät sowieso nicht mag).

Ich dachte, dass dies ausreichen würde:

enter image description here

Kann es jedoch nicht zum Laufen bringen, ohne auch NSAllowsArbitraryLoads = YES Hinzuzufügen. AKA this:

enter image description here

Jetzt muss ich daran denken, dies zu entfernen, wenn ein Produktionsbuild gerollt wird, aber nicht während der Entwicklung ... arg. Sollte das NSExceptionDomains mit IP-Adressen arbeiten, und wenn nicht, gibt es noch etwas, was ich tun kann, ohne auch NSAllowsArbitraryLoads zu aktivieren?

52
esilver

Fest codierte IP-Adressen funktionieren in iOS9 nicht. Ich stand auch vor dem gleichen Problem. Versuchte alle Permutationen und Kombinationen der verfügbaren Lösungen. Schließlich musste ein richtiger Domainname verwendet werden.

In iOS9 kommt man mit fest codierten IP-Adressen einfach nicht durch.

52
PanxShaz

kann ich noch etwas tun, ohne NSAllowsArbitraryLoads zu aktivieren?

Eine Problemumgehung besteht darin, xip.io zu verwenden, wie durch QJeffR in this Apple Entwicklerforumsthread (erläutert. die von David L in geteilt wurde sein Kommentar ):

Ein DNS-Aufruf an (zum Beispiel) 10.0.1.8.xip.io wird in 10.0.1.8 aufgelöst und ermöglicht die Verwendung der Domäne anstelle der IP-Adresse für NSExceptionDomains Schlüssel.

25
TachyonVortex

Wie @PanxShaz sagte, können Sie keine fest codierte IP-Adresse eingeben, aber Sie können eine einfache Problemumgehung verwenden:

  1. Öffne dein /etc/hosts Datei mit Sudo und fügen Sie einen neuen lokalen Domainnamen für Ihre IP-Adresse hinzu. Beispiel:

    192.168.99.100 docker-Host.localhost

  2. Dann leeren Sie Ihren DNS:

    dscacheutil -flushcache

  3. Und schließlich verwenden Sie diese neue lokale Domäne in den Sicherheitsausnahmen für den App-Transport.

5
anasaitali

Wenn Sie auf iOS 10+ abzielen, setzen Sie einfach das Flag NSAllowsLocalNetworking .

3
Herman Kan