Jalankan ulang aplikasi, tanyakan status koneksi ke manajer, dan ia melaporkan terputus padahal menu sistem jelas menunjukkan tunnel yang aktif. Atau panggilan penyimpanan mengembalikan galat yang tidak menjelaskan apa pun, atau sebuah secret bersama dinyatakan hilang beberapa detik setelah ditetapkan. Tiga gejala, satu mekanisme: manajer adalah tampilan atas penyimpanan sistem, dan tampilan terbaca kosong sampai seseorang memuatnya.

Sebelum men-debug salah satunya, tentukan API mana yang seharusnya Anda pakai. Tunnel IPsec atau IKEv2 sistem cocok untuk manajer bawaan; protokol yang tidak diimplementasikan sistem memerlukan penyedia tunnel dengan penanganan paket Anda sendiri, dan tidak ada kombinasi field yang mengubahnya.

Manajer adalah tampilan atas penyimpanan

Buat atau ambil manajer, minta ia memuat preferensinya, dan biarkan handler penyelesaian selesai sebelum membaca status atau mengubah pengaturan protokol. Saat tugasnya menghitung konfigurasi tersimpan, gunakan panggilan semua varian alih-alih memakai ulang satu instans untuk dua tujuan. Sebelum pemuatan tiba, status biasanya tidak valid, dan memetakan tidak valid ke mati justru bug yang membuat aplikasi tampak salah hanya setelah dijalankan ulang.

Penulisan mengikuti urutan yang sama. Penyimpanan yang dicoba pada manajer yang tidak pernah memuat apa pun bisa gagal tanpa pesan berguna, karena tidak ada identitas tersimpan tempat perubahan diterapkan. Muat, ubah, simpan, lalu baca status lagi. Objek yang dihubungkan sistem adalah profil tersimpan, bukan yang Anda sunting di memori.

Perubahan status datang hanya saat Anda melihat

Setelah preferensi dimuat, status bergerak melalui terputus, menyambung, tersambung, menegaskan ulang, dan memutus. Inisialisasi antarmuka dari satu pembacaan, lalu dengarkan notifikasi perubahan alih-alih melakukan polling dengan pengatur waktu. Polling bekerja di latar depan dan berbohong di latar belakang, dan begitulah aplikasi berakhir dengan spinner yang tidak pernah selesai.

Notifikasi hanya datang saat aplikasi di latar depan. Apa pun yang mempertahankan status di latar belakang akan tampak kedaluwarsa setelah dijalankan ulang, jadi segarkan saat peluncuran dan lagi saat aplikasi kembali ke latar depan. Jika penyedia memiliki tunnel, kendalikan melalui objek sesi yang sesuai; properti koneksi biasa tidak memodelkan siklus hidup penyedia.

Secret adalah referensi, bukan string

Laporan secret bersama yang hilang jarang berarti tidak ada yang menetapkannya. Objek protokol menginginkan referensi: satu untuk kata sandi pengguna dan satu untuk kunci pra-bagi IPsec. Melewatkan nil, atau referensi yang diturunkan dari entri keychain yang salah, memberi keluhan yang sama dengan slot kosong. Galat menyebut gejalanya dan menyembunyikan penyebabnya, karena itu orang memasukkan ulang secret yang sama beberapa kali.

Tulis secret sebagai item kata sandi generik dahulu, lalu baca kembali referensi persisten ke sana. Referensi persisten bertahan setelah dijalankan ulang, berbeda dengan pointer di memori, dan itulah representasi yang diserialkan profil. Pilih kelas aksesibilitas yang tetap mengizinkan akses setelah perangkat dibuka, atau tunnel yang harus menyambung ulang di layar terkunci akan gagal autentikasi dengan secret yang sepenuhnya valid.

Ekstensi punya tampilan keychain sendiri

Ekstensi jaringan adalah proses terpisah, jadi akses keychain bawaan aplikasi tidak menjangkaunya. Beri kedua target grup akses keychain yang sama di entitlement masing-masing, simpan item sekali di dalam grup itu, dan biarkan setiap proses membacanya. Tanpa grup, ekstensi tidak menemukan apa pun dan melaporkan kegagalan kredensial yang tidak dapat direproduksi aplikasi.

Jika penyedia dikonfigurasi melalui objek konfigurasi penyedianya, jangan juga menyematkan secret di dalam aplikasi. Dua salinan menyimpang, dan penyimpangan itu tampil sebagai kredensial buruk, bukan sebagai duplikasi. Widget atau proses kedua yang melaporkan status lain punya penjelasan yang sama: masing-masing butuh grup, dan masing-masing harus memuat preferensi sebelum membaca.

Cocokkan API dengan protokol

Manajer bawaan membawa objek protokol IPsec dan IKEv2. Ia tidak berubah menjadi klien SSL VPN generik melalui field tambahan, dan profil yang tidak cocok bisa tersimpan rapi namun tetap tidak pernah tersambung. Tentukan kategori Anda sebelum menyelidiki status, karena bug status dan protokol yang tidak didukung tampak identik dari luar.

Untuk peluncuran berikutnya, daftar periksanya singkat: muat preferensi, baca status, pertahankan langganan perubahan di latar depan, bangun ulang referensi dari grup bersama, dan pastikan objek protokol sesuai dengan API yang Anda implementasikan. Menjalankan daftar itu butuh satu menit; menebaknya butuh satu sore.

Artikel terkait