Starten Sie die App neu, fragen Sie den Manager nach dem Verbindungsstatus, und er meldet getrennt, während das Systemmenü klar einen laufenden Tunnel zeigt. Oder ein Speicheraufruf liefert einen Fehler, der nichts erklärt, oder ein gemeinsames Geheimnis wird Sekunden nach der Zuweisung als fehlend gemeldet. Drei Symptome, ein Mechanismus: Der Manager ist eine Sicht auf einen Systemspeicher, und eine Sicht liest sich leer, bis jemand sie lädt.

Bevor Sie irgendetwas davon debuggen, klären Sie, welche API Sie verwenden sollen. Ein Systemtunnel nach IPsec oder IKEv2 passt zum eingebauten Manager; ein Protokoll, das das System nicht implementiert, braucht einen Tunnelanbieter mit eigener Paketverarbeitung, und keine Feldkombination ändert das.

Der Manager ist eine Sicht auf einen Speicher

Erstellen oder holen Sie den Manager, lassen Sie ihn seine Einstellungen laden und warten Sie, bis der Completion-Handler fertig ist, bevor Sie den Status lesen oder Protokolleinstellungen ändern. Wenn gespeicherte Konfigurationen aufgelistet werden sollen, nutzen Sie den Aufruf für alle Varianten, statt eine Instanz für zwei Zwecke wiederzuverwenden. Bevor das Laden ankommt, ist der Status typischerweise ungültig, und ungültig als aus zu deuten ist genau der Fehler, der eine App erst nach einem Neustart falsch aussehen lässt.

Das Schreiben folgt derselben Reihenfolge. Ein Speicherversuch auf einem Manager, der nie etwas geladen hat, kann ohne brauchbare Meldung scheitern, weil es keine gespeicherte Identität gibt, auf die die Änderung angewendet werden könnte. Laden, ändern, speichern, dann den Status erneut lesen. Das Objekt, mit dem sich das System verbindet, ist das gespeicherte Profil, nicht das, das Sie im Speicher bearbeitet haben.

Statusänderungen kommen nur, solange Sie hinsehen

Sobald die Einstellungen geladen sind, durchläuft der Status getrennt, verbindend, verbunden, erneut bestätigend und trennend. Initialisieren Sie die Oberfläche aus einem Lesevorgang und hören Sie dann auf die Änderungsbenachrichtigung, statt per Timer zu pollen. Polling funktioniert im Vordergrund und lügt im Hintergrund, und so bleiben Apps mit einem Spinner hängen, der sich nie auflöst.

Benachrichtigungen kommen nur an, solange die App im Vordergrund ist. Alles, was Zustand im Hintergrund hält, wirkt nach einem Neustart veraltet, also aktualisieren Sie beim Start und erneut, wenn die App in den Vordergrund zurückkehrt. Wenn ein Anbieter den Tunnel besitzt, steuern Sie ihn über das passende Sitzungsobjekt; die einfache Verbindungseigenschaft bildet den Lebenszyklus eines Anbieters nicht ab.

Geheimnisse sind Referenzen, keine Strings

Die Meldung, ein gemeinsames Geheimnis fehle, bedeutet selten, dass niemand eines zugewiesen hat. Das Protokollobjekt will eine Referenz: eine für das Benutzerpasswort und eine für den vorab vereinbarten IPsec-Schlüssel. nil zu übergeben oder eine Referenz aus dem falschen Keychain-Eintrag abzuleiten, erzeugt dieselbe Beschwerde wie ein leerer Platz. Der Fehler nennt das Symptom und verbirgt die Ursache, deshalb geben Leute dasselbe Geheimnis mehrfach neu ein.

Schreiben Sie das Geheimnis zuerst als generisches Passwort-Element und lesen Sie dann eine persistente Referenz darauf zurück. Eine persistente Referenz übersteht einen Neustart, anders als ein Zeiger im Speicher, und sie ist die Darstellung, die das Profil serialisiert. Wählen Sie eine Zugänglichkeitsklasse, die nach dem Entsperren des Geräts noch Zugriff erlaubt, sonst scheitert ein Tunnel, der sich bei gesperrtem Bildschirm neu verbinden muss, mit einem völlig gültigen Geheimnis an der Authentifizierung.

Die Erweiterung hat ihre eigene Keychain-Sicht

Eine Netzwerkerweiterung ist ein eigener Prozess, daher erreicht der Standard-Keychain-Zugriff der App sie nicht. Geben Sie beiden Zielen dieselbe Keychain-Zugriffsgruppe in ihren Berechtigungen, speichern Sie das Element einmal innerhalb dieser Gruppe, und lassen Sie jeden Prozess es lesen. Ohne die Gruppe findet die Erweiterung nichts und meldet einen Anmeldedatenfehler, den die App nicht reproduzieren kann.

Wird der Anbieter über sein Anbieterkonfigurationsobjekt konfiguriert, betten Sie das Geheimnis nicht zusätzlich in die App ein. Zwei Kopien driften auseinander, und die Drift zeigt sich als schlechte Anmeldedaten statt als Duplikat. Ein Widget oder ein zweiter Prozess, der einen anderen Zustand meldet, hat dieselbe Erklärung: Jeder braucht die Gruppe, und jeder muss die Einstellungen laden, bevor er liest.

Stimmen Sie die API auf das Protokoll ab

Der eingebaute Manager trägt IPsec- und IKEv2-Protokollobjekte. Er wird durch zusätzliche Felder nicht zu einem generischen SSL-VPN-Client, und ein unpassendes Profil lässt sich sauber speichern und verbindet trotzdem nie. Entscheiden Sie vor der Statusuntersuchung, in welche Kategorie Sie fallen, denn ein Statusfehler und ein nicht unterstütztes Protokoll sehen von außen identisch aus.

Für den nächsten Neustart ist die Checkliste kurz: Einstellungen laden, Status lesen, Änderungsabonnements im Vordergrund halten, Referenzen aus der gemeinsamen Gruppe neu aufbauen und bestätigen, dass das Protokollobjekt zur implementierten API passt. Diese Liste abzuarbeiten dauert eine Minute; daran herumzuraten dauert einen Nachmittag.

Ähnliche Artikel