Seorang manajer produk meminta tombol yang menyalakan VPN perusahaan, dan permintaan itu terdengar sepele. Di iOS ini bukan fitur kecil; ia berada di luar kontrak publik, dan setiap akal-akalan entah gagal review atau rusak pada rilis berikutnya. Telusuri permintaan itu lewat apa yang sebenarnya diizinkan platform, dan desainnya sebagian besar menulis dirinya sendiri. Aplikasi bisa memiliki konfigurasi VPN dan memulainya. Aplikasi tidak bisa mencapai sakelar sistem, tidak bisa membaca status profil yang tidak dibuatnya, dan tidak bisa menjaga pengguna tetap terhubung bertentangan dengan keinginannya.

Mulai dari tiga hal yang dimaksud pengguna

Pisahkan maknanya sebelum memisahkan API-nya. Kadang pengguna ingin terowongan aplikasi Anda terhubung, kadang ia ingin sakelar di Pengaturan diaktifkan untuk profil yang dipasang orang lain, dan kadang ia ingin ponsel tidak bisa menjelajah tanpa terowongan. Itu memetakan ke tiga mekanisme berbeda, dan hanya yang pertama terbuka bagi aplikasi biasa.

Makna kedua itulah yang memunculkan pertanyaan Stack Overflow, dan tidak ada jawaban yang didukung. Sakelar di Pengaturan milik pengguna dan, pada perangkat terkelola, milik profil. Tidak ada API publik yang mendaftar konfigurasi VPN, melaporkan apakah terowongan sistem aktif, atau mengubahnya.

Apa yang sebenarnya bisa dibuat aplikasi

NetworkExtension memberi aplikasi konfigurasinya sendiri melalui NEVPNManager. Dengan hak Personal VPN dan persetujuan pengguna, aplikasi menyimpan konfigurasi yang muncul di Pengaturan dengan namanya sendiri, dan aplikasi bisa memulai atau menghentikan koneksi tunggal itu. Itu kemampuan nyata yang bisa direview, dan itu juga seluruh cakupannya: pengelola hanya membaca dan menulis apa yang dibuatnya.

Hak itu tidak otomatis. Anda memintanya ke Apple dan menjelaskan mengapa aplikasi perlu terowongan sama sekali, dan klien yang satu-satunya tujuan adalah menyalakan profil orang lain tidak punya jawaban bagus. Penyedia terowongan paket mengikuti aturan yang sama dengan kelas berbeda: NETunnelProviderManager memiliki konfigurasi berbasis penyedia yang dipasang aplikasi sendiri. Tak satu pun dari kedua jalur itu mencapai profil yang dikirim MDM.

Persetujuan juga berlaku saat menyimpan. Menulis konfigurasi meminta pengguna, dan permintaan itu bukan sesuatu yang boleh ditekan aplikasi demi kenyamanan.

Membaca status menabrak dinding yang sama

Status tampak lebih ramah daripada kontrol dan sama tertutupnya. NEVPNStatus melaporkan tidak valid, terputus, menghubungkan, terhubung, menegaskan ulang, atau memutuskan untuk konfigurasi aplikasi sendiri, dan notifikasi muncul pada setiap perubahan. Ia tidak mengatakan apa pun tentang terowongan yang dipasang profil manajemen, padahal itulah status yang ingin dilihat meja bantuan.

Pemantauan jalur jaringan dan perubahan antarmuka ditawarkan sebagai pengganti dalam review desain. Keduanya menggambarkan jalur yang dilalui lalu lintas aplikasi, yang berubah karena alasan tak terkait status VPN, dan memakainya sebagai pembacaan VPN menghasilkan antarmuka yang berbohong ke dua arah.

On Demand dan Always On adalah tuas yang sebenarnya

Tuas yang didukung hidup di profil, bukan di aplikasi. Aturan On Demand memberi tahu sistem kapan harus terhubung: daftar kondisi berurutan dengan tindakan, dievaluasi oleh sistem operasi, bukan oleh kode Anda. Aturan yang terhubung di antarmuka mana pun menciptakan rasa selalu terhubung tanpa memberi kendali apa pun kepada aplikasi.

Always On VPN adalah mekanisme pemaksaan, dan ia terikat pada pengawasan. Di perangkat yang diawasi, MDM memasang profil yang menjaga terowongan tetap aktif; di ponsel pribadi tanpa pengawasan kunci yang sama tidak menghasilkan perilaku yang sama. Asimetri itu disengaja, dan tidak ada kombinasi kunci payload yang menghapusnya. Ketika persyaratannya benar-benar bahwa VPN harus menyala, persyaratannya sebenarnya adalah perangkat harus dikelola.

Di antara keduanya duduk sepupu yang lebih lemah: aturan yang menyambung ulang setelah pengguna memutuskan. Ia menyambung ulang saat aturan dievaluasi berikutnya, yang tidak sama dengan seketika, dan pengguna yang memutuskan dengan sengaja akan menyadari bedanya. Rancang antarmuka di sekitar celah itu alih-alih menjanjikan kunci.

Kirim jalur yang didukung

Empat pertanyaan menentukan mekanismenya sebelum ada kode: siapa yang memiliki perangkat, apakah diawasi, klien mana yang mengakhiri terowongan, dan dari mana profilnya berasal. Jika salah satunya tidak diketahui, permintaan fitur itu belum siap diperkirakan.

API privat yang mengutak-atik VPN sistem akan lolos demo dan gagal review, dan jika dikirim lewat jalan lain ia rusak pada rilis iOS berikutnya. Tidak ada versi dari pertukaran itu yang layak untuk sebuah sakelar.

Telemetri manajemen adalah kanal terpisah: ia melaporkan bahwa profil terpasang dan apakah perangkat patuh, yang merupakan pelaporan dan bukan permukaan kendali per aplikasi. Uji alurnya di perangkat nyata setelah setiap pembaruan, karena perilaku yang didukung hidup di OS dan OS bergerak.

Artikel terkait