Profil quraşdırırsan, tunel qalxır və hər şey bitmiş görünür. Sonra telefon yenidən başlayır, on-demand heç bir tətbiq ön planda olmadan bağlantını oyadır və tunel başlamaqdan imtina edir. Profil yerindədir və parol hələ də düzgündür, buna görə bu nasazlıq insanları yanlış yerə baxmağa göndərir. Network Extension sirrini profildən oxuya bilməz: ona özü həll edə biləcəyi keychain istinadı lazımdır.

Aşağıdakı icmal bir bağlantı cəhdini bu ötürmə boyunca izləyir: istinadı quran sorğudan onu yoxlayan yenidən başlamaya qədər.

Profil sirri deyil, bir tutacaq saxlayır

NEVPNProtocol passwordReference və sharedSecretReference-i bir səbəbdən açır. Daemon tunel başladanda sənin prosesinin içində işləməyə bilər, ona görə kodunu çağırıb parol istəyə bilməz. Daimi keychain istinadını oxuyur, onu öz kontekstində həll edir və elementi özü götürür.

Bu istinadı keychain-dən soruşaraq qurursan; bu, məlumatı soruşmaqdan fərqli bir sorğudur:

let query: [String: Any] = [
  kSecClass as String: kSecClassGenericPassword,
  kSecAttrService as String: "vpn-credentials",
  kSecAttrAccount as String: "user",
  kSecReturnPersistentRef as String: true,
  kSecMatchLimit as String: kSecMatchLimitOne
]

Qaytarılan obyekti protokola ver, elementin məlumatını yox. Praktikada profil sirrin harada yaşadığını qeyd edir, buna görə də konfiqurasiya ehtiyat nüsxəsi parolu səssizcə plist-ə köçürmür.

API nə üçün -50 cavabı verir

errSecParam sorğunun və ya dəyərin əməliyyat üçün qüsurlu olduğunu bildirir və istinad sorğuları ilə məlumat sorğuları qarışanda ən çox görülən xətadır. Qəbul edən kod istinad gözləyərkən məlumat istəmək, passwordReference-ə xam baytlar mənimsətmək və ya tətbiqin istifadə edə bilmədiyi giriş qrupu ilə sorğu vermək bunların hamısı onu yaradır.

Sarğı kitabxanaları buna dəvət edir. Bayt qaytaran köməkçi istinad qaytaranla dəyişdirilə bilməz, ona görə düzəliş adətən başqa parol deyil, başqa sorğudur.

Eyni uyğunsuzluq şikayətsiz saxlanan və sonra qoşula bilməyən profili izah edir: saxlanan şey blob-dur, tutacaq deyil, və daemonun həll edəcək bir şeyi yoxdur.

Yaxşı saxlanır, qoşulma anında uğursuz olur

Saxlama tətbiqinin kontekstini işlədir. Qoşulma daemonun kontekstini işlədir və ikisinin girişi eyni deyil. Buna görə profil simulyatorda keçirdiyin hər testi keçib ilk on-demand başlamada uğursuz ola bilər.

Yenidən başlama simptomunun forması da budur: tətbiq açıqkən işləyir və sistem tuneli özü başladanda ölür.

Göndərməzdən əvvəl fon yolunu qəsdən yoxla. Tətbiq bağlı ikən on-demand bağlantısı yarat, sonra tətbiq jurnalını deyil, cihaz konsolunu oxu, çünki nasazlığı istinadı həll etməyə çalışan proses qeyd edir. Konsol daemonun elementi rədd etdiyini göstərirsə, istinad qaydasındadır və problem elementin əlçatanlığındadır.

Yenidən başlamanın işləyib-işləmədiyini əlçatanlıq həll edir

Element tuneli başladan hansı sistem prosesi olursa olsun onun üçün oxunaqlı olmalıdır və bu, tətbiqin ön planda oturduğu halda olduğundan daha geniş auditoriyadır. Bu məhdudiyyət əlçatanlıq atributunu sənin üçün seçir. İlk açılışa qədər qorunan element cihaz bir dəfə açıldıqdan sonra fon başlaması üçün əlçatandır; cihazın indi açıq olmasını tələb edən element isə deyil.

Daha sərt sinfi seçmək cəlbedicidir və kilidli telefonda on-demand profili məhz bu pozur.

Sinfi dəyişdikdən sonra mövcud elementin atributlarını redaktə etmək əvəzinə elementi yenidən yarat, sonra protokolu təzə istinadla yenidən saxla. Mövcud elementdə atribut dəyişiklikləri sənədləşmənin ima etdiyi davranışı həmişə vermir və yenidən qurulmuş element şübhəni aradan qaldırır.

Rotasiya saxlanan profillərin çürüdüyü yerdir

Keychain-də parolu dəyişmək saxlanan profilin nəyə işarə etdiyini avtomatik dəyişmir. Elementi silmək daha pisdir: profil artıq mövcud olmayan bir şeyə istinad saxlayır və nasazlıq autentifikasiya imtinası kimi görünür.

Bir ardıcıllıqla rotasiya et. Elementi yenilə, yeni daimi istinad soruş, protokolu yenidən saxla, sonra daemonun onu hələ də həll edə bildiyini sübut etmək üçün tətbiq bağlı ikən qoşul. İstifadəçi parolunu və paylaşılan sirri ayrı elementlərdə saxla ki, hər biri öz cədvəli ilə dövr etsin və sorğu lüğətini və ya istinadın özünü heç vaxt jurnala yazma. Tutacaq sirr deyil, amma ona aparan xəritədir.

Əlaqəli məqalələr