Γιατί η εφαρμογή σας για iPhone δεν μπορεί να ενεργοποιήσει ή να απενεργοποιήσει το VPN του συστήματος
Μια δημόσια εφαρμογή δεν μπορεί να αλλάξει το VPN του συστήματος, να διαβάσει την κατάστασή του ή να επιβάλει σύνδεση. Κανόνες On Demand, προφίλ Always On σε εποπτευόμενες συσκευές και MDM είναι οι επιλογές.
Ένας product manager ζητά ένα κουμπί που ενεργοποιεί το εταιρικό VPN, και το αίτημα ακούγεται τετριμμένο. Στο iOS δεν είναι μικρή δυνατότητα· βρίσκεται έξω από το δημόσιο συμβόλαιο, και κάθε παράκαμψη ή αποτυγχάνει στην αξιολόγηση ή σπάει στην επόμενη έκδοση. Περάστε το αίτημα μέσα από όσα επιτρέπει πραγματικά η πλατφόρμα και ο σχεδιασμός γράφεται σχεδόν μόνος του. Μια εφαρμογή μπορεί να κατέχει μια ρύθμιση VPN και να την ξεκινά. Μια εφαρμογή δεν μπορεί να φτάσει τον διακόπτη του συστήματος, δεν μπορεί να διαβάσει την κατάσταση ενός προφίλ που δεν δημιούργησε και δεν μπορεί να κρατήσει έναν χρήστη συνδεδεμένο παρά τη θέλησή του.
Ξεκινήστε από τα τρία πράγματα που εννοεί ο χρήστης
Διαχωρίστε τις έννοιες πριν διαχωρίσετε τα API. Μερικές φορές ο χρήστης θέλει τη σήραγγα της εφαρμογής σας συνδεδεμένη, μερικές φορές θέλει τον διακόπτη στις Ρυθμίσεις γυρισμένο για ένα προφίλ που εγκατέστησε κάποιος άλλος, και μερικές φορές θέλει το τηλέφωνο να μην μπορεί να περιηγηθεί χωρίς τη σήραγγα. Αυτά αντιστοιχούν σε τρεις διαφορετικούς μηχανισμούς, και μόνο ο πρώτος είναι ανοιχτός σε μια συνηθισμένη εφαρμογή.
Η δεύτερη έννοια είναι αυτή που παράγει τις ερωτήσεις στο Stack Overflow, και δεν έχει υποστηριζόμενη απάντηση. Ο διακόπτης στις Ρυθμίσεις ανήκει στον χρήστη και, σε διαχειριζόμενες συσκευές, στο προφίλ. Κανένα δημόσιο API δεν απαριθμεί ρυθμίσεις VPN, δεν αναφέρει αν η σήραγγα του συστήματος είναι ενεργή ούτε τη γυρίζει.
Τι μπορεί πραγματικά να δημιουργήσει μια εφαρμογή
Το NetworkExtension δίνει σε μια εφαρμογή δική της ρύθμιση μέσω NEVPNManager. Με τη δυνατότητα Personal VPN και τη συγκατάθεση του χρήστη, η εφαρμογή αποθηκεύει μια ρύθμιση που εμφανίζεται στις Ρυθμίσεις με το δικό της όνομα, και μπορεί να ξεκινήσει ή να σταματήσει αυτή τη μία σύνδεση. Αυτή είναι μια πραγματική δυνατότητα που περνά αξιολόγηση, και είναι επίσης όλο το εύρος: ο διαχειριστής διαβάζει και γράφει μόνο ό,τι δημιούργησε.
Η δυνατότητα δεν είναι αυτόματη. Τη ζητάτε από την Apple και αιτιολογείτε γιατί η εφαρμογή χρειάζεται καθόλου σήραγγα, και ένας πελάτης του οποίου ο μόνος σκοπός είναι να ενεργοποιήσει το προφίλ κάποιου άλλου δεν έχει καλή απάντηση. Οι πάροχοι σηράγγων πακέτων ακολουθούν τον ίδιο κανόνα με διαφορετική κλάση: το NETunnelProviderManager κατέχει ρυθμίσεις βασισμένες σε πάροχο που εγκατέστησε η ίδια η εφαρμογή. Καμία από τις δύο διαδρομές δεν φτάνει σε προφίλ που παρέδωσε το MDM.
Η συγκατάθεση ισχύει και τη στιγμή της αποθήκευσης. Η εγγραφή μιας ρύθμισης ρωτά τον χρήστη, και αυτή η ερώτηση δεν είναι κάτι που μια εφαρμογή μπορεί να καταστείλει για ευκολία.
Η ανάγνωση της κατάστασης χτυπά τον ίδιο τοίχο
Η κατάσταση φαίνεται φιλικότερη από τον έλεγχο και είναι εξίσου κλειστή. Το NEVPNStatus αναφέρει άκυρο, αποσυνδεδεμένο, σύνδεση, συνδεδεμένο, επαναβεβαίωση ή αποσύνδεση για τη δική της ρύθμιση της εφαρμογής, και σε κάθε αλλαγή ενεργοποιείται μια ειδοποίηση. Δεν λέει τίποτα για σήραγγα που εγκατέστησε προφίλ διαχείρισης, και αυτή είναι ακριβώς η κατάσταση που θέλει να δει ένα help desk.
Η παρακολούθηση της διαδρομής δικτύου και οι αλλαγές διεπαφής προσφέρονται ως υποκατάστατα στις αξιολογήσεις σχεδίασης. Περιγράφουν τη διαδρομή που ακολουθεί η κίνηση της εφαρμογής, η οποία αλλάζει για λόγους άσχετους με την κατάσταση του VPN, και η χρήση τους ως ένδειξη VPN δίνει μια διεπαφή που λέει ψέματα και προς τις δύο κατευθύνσεις.
Το On Demand και το Always On είναι οι πραγματικοί μοχλοί
Οι υποστηριζόμενοι μοχλοί ζουν στο προφίλ και όχι στην εφαρμογή. Οι κανόνες On Demand λένε στο σύστημα πότε να συνδεθεί: μια διατεταγμένη λίστα συνθηκών με ενέργειες, που αξιολογείται από το λειτουργικό σύστημα και όχι από τον κώδικά σας. Ένας κανόνας που συνδέεται σε οποιαδήποτε διεπαφή δημιουργεί αίσθηση μόνιμης σύνδεσης χωρίς να δίνει σε καμία εφαρμογή έλεγχο.
Το Always On VPN είναι ο μηχανισμός επιβολής και είναι δεμένο με την εποπτεία. Σε εποπτευόμενη συσκευή, το MDM εγκαθιστά ένα προφίλ που κρατά τη σήραγγα ενεργή· σε προσωπικό τηλέφωνο χωρίς εποπτεία τα ίδια κλειδιά δεν παράγουν την ίδια συμπεριφορά. Αυτή η ασυμμετρία είναι σκόπιμη, και κανένας συνδυασμός κλειδιών ωφέλιμου φορτίου δεν την αφαιρεί. Όταν η απαίτηση είναι πραγματικά ότι το VPN πρέπει να είναι ενεργό, η απαίτηση είναι στην ουσία ότι η συσκευή πρέπει να διαχειρίζεται.
Ανάμεσά τους βρίσκεται ο πιο αδύναμος ξάδελφος: ένας κανόνας που επανασυνδέεται αφού ο χρήστης αποσυνδεθεί. Επανασυνδέεται όταν ο κανόνας αξιολογηθεί την επόμενη φορά, που δεν είναι το ίδιο με αμέσως, και ένας χρήστης που αποσυνδέθηκε επίτηδες θα προσέξει τη διαφορά. Σχεδιάστε τη διεπαφή γύρω από αυτό το κενό αντί να υπόσχεστε κλείδωμα.
Παραδώστε την υποστηριζόμενη διαδρομή
Τέσσερις ερωτήσεις καθορίζουν τον μηχανισμό πριν υπάρξει κώδικας: ποιος κατέχει τη συσκευή, αν είναι υπό εποπτεία, ποιος πελάτης τερματίζει τη σήραγγα και από πού έρχεται το προφίλ. Αν κάτι από αυτά είναι άγνωστο, το αίτημα δυνατότητας δεν είναι έτοιμο για εκτίμηση.
Ένα ιδιωτικό API που ψαχουλεύει το VPN του συστήματος θα περάσει ένα demo και θα αποτύχει στην αξιολόγηση, και αν παραδοθεί με άλλον τρόπο σπάει στην επόμενη έκδοση του iOS. Δεν υπάρχει εκδοχή αυτής της ανταλλαγής που να αξίζει για έναν διακόπτη.
Η τηλεμετρία διαχείρισης είναι ξεχωριστό κανάλι: αναφέρει ότι ένα προφίλ είναι εγκατεστημένο και αν η συσκευή συμμορφώνεται, που είναι αναφορά και όχι επιφάνεια ελέγχου ανά εφαρμογή. Δοκιμάστε τη ροή σε πραγματική συσκευή μετά από κάθε ενημέρωση, γιατί η υποστηριζόμενη συμπεριφορά ζει στο λειτουργικό σύστημα και το λειτουργικό σύστημα κινείται.