NEVPNManager yadda saxlamır? Sıra: yüklə, aktivləşdir, saxla, qoşul
Kod 4 və kod 5 adətən profilin yüklənməmişdən əvvəl redaktə edildiyini və ya deaktiv vəziyyətdə saxlanıldığını bildirir. Çağırış sırasını düzəldin, sonra hüququ yoxlayın.
İki səhv kodu iOS-da Network Extension VPN üçün ilk cəhdlərin çoxunu izah edir: NEVPNErrorDomain Code=4 və Code=5. Heç biri serverin şikayəti deyil. Biri tətbiq ayarları diskdən heç oxunmamış obyektə yazanda, digəri isə yazmanın özü uğursuz olanda görünür, ən çox da profil hələ deaktiv ikən saxlanıldığı üçün. Hər ikisi IKEv2 parametrlərinə toxunmadan dörd çağırışın sırasını dəyişməklə düzəlir.
Əvvəl yüklə, yoxsa saxlamanın müqayisə edəcəyi heç nə olmaz
Menecer saxlanmış profilin surətini saxlayır və redaktə etdiyiniz obyekt onu oxuyana qədər həmin surət deyil. Əvvəlcə loadFromPreferences çağırın, tamamlanma işləyicisinin içində redaktə edin, sonra saxlayın. Oxumağı atlasanız, çərçivə özündə olanla yazdığınız arasında uyğunsuzluq görür. Swift-də forma hər addımda eynidir və hər addım öz bağlanışına aiddir:
let mgr = NEVPNManager.shared()
mgr.loadFromPreferences { loadErr in
guard loadErr == nil else { return }
let proto = NEVPNProtocolIKEv2()
proto.serverAddress = "vpn.example.net"
proto.username = "alice"
proto.useExtendedAuthentication = true
mgr.protocolConfiguration = proto
mgr.isEnabled = true
mgr.saveToPreferences { saveErr in
// do not start here; reload, then connect
}
}
Tuneli saxlama bağlanışının içindən başlatmaq eyni səhvin başqa yerdə təkrarıdır. O, profil yenidən oxunmazdan əvvəl işləyir, ona görə başlatma çağırışı saxlanılan vəziyyəti deyil, sizin qurduğunuz vəziyyəti görür. Saxlama bağlanışı ikinci loadFromPreferences ilə bitir və yalnız həmin tamamlanma işləyicisi startVPNTunnel çağırır.
Aktivləşdirmə bayrağı saxlamağın bir hissəsidir
Saxlanmış profil işə salınana qədər hərəkətsizdir. isEnabled = true-i həmin yazmada qoyun, yoxsa profil diskə deaktiv düşür və Ayarlar tam görünən konfiqurasiya göstərsə də startVPNTunnel imtina edir.
Xarici redaktələr bunun digər yarısıdır. İstifadəçi Ayarlarda nəyisə dəyişsə və ya cihaz şəbəkələr arasında keçsə, yaddaşda saxladığınız dəyərlərə güvənməzdən əvvəl yenidən oxuyun. Obyekt bu dəyişiklikləri sizin üçün izləmir. Köhnəlmiş surət tətbiqin istifadəçi redaktəsini səssizcə geri qaytaran profil yazmasının yoludur. İki qonşu sahə eyni anda sakit problem yaradır: on-demand qaydaları boş yer tutucu deyil, qayda obyektlərindən ibarət massiv olmalıdır və disconnectOnSleep kopyalanmış standart dəyəri deyil, seçdiyiniz davranışı əks etdirməlidir.
Üçüncü tərəf tətbiqləri üçün yalnız iki protokol var
Network Extension tətbiqlərə IPsec və IKEv2 verir. L2TP və PPTP sistemin içində qalır, ona görə onlara ehtiyacı olan tətbiq onları əldə edə bilməz və real cavablar IKEv2 dəstəkli şlüz və ya idarə olunan konfiqurasiya profilidir.
Etimadnamələr eyni nümunəni izləyir. Parolu Keychain-ə qoyun və sətir yerinə davamlı istinad ötürün. Saxlama zamanı boş istinad adətən element yazılmazdan əvvəl axtarışın işlədiyini bildirir, menecerin xarab olduğunu deyil.
Hər ikisi düzəltmə deyil, dizayn qərarıdır. Parolu öz seçimlərində saxlayan tətbiq çərçivənin tövsiyə etmədiyi yolu seçir və onun yaratdığı uğursuzluq saxlama səhvi kimi oxunur.
Kodu yenidən yazmadan əvvəl hüququ istisna edin
loadFromPreferences heç vaxt geri çağırmırsa, ehtimal olunan səbəb çatışmayan Network Extension imkanı və ya onu daşımayan təminat profilidir. Bu uğursuzluq xəta vermək yerinə asılır, buna görə işləyən kod saatlarla yenidən yazılır. Buraxmağı planladığınız imzalanmış buraxılışda hüququ yoxlayın, çünki simulyator və cihaz işə salınması fərqlənə bilər və əhəmiyyətli hədəf cihazdır. Hədəfin imzalama ayarlarını açın və Network Extension imkanının məhz həmin buraxılış üçün mövcud olduğunu təsdiqləyin.
Hüququ olmayan təminat profili avadanlıqda eyni şəkildə uğursuz olur, halbuki eyni buraxılış simulyatorda normal yüklənə bilər. Çağırış sırasını yenidən yazmadan əvvəl imzalanmış arxivi real cihazda yoxlayın.
Vəziyyət dəyişikliklərini izləyin, fərziyyələri deyil
NEVPNStatusDidChangeNotification-u izləyin və hər addımdan sonra manager.connection.status-u qeyd edin. Heç vaxt invalid vəziyyətindən çıxmayan status profilin saxlanmadığını və ya hüququn olmadığını bildirir. connecting-ə çatıb heç vaxt qoşulmayan bağlantı təklifə və ya etimadnamələrə işarə edir və bu, fərqli dəlillərlə fərqli araşdırmadır.
Profilin Ayarlar, Ümumi, VPN altında göründüyünü təsdiqləyin və hər bağlanışdakı xətanı qeyd edin. Bu iki fakt sıra səhvi ilə icazə səhvi arasında təxmin etmədən fərq qoyur.