Ikki xato kodi iOS'da Network Extension VPN bilan birinchi urinishlarning ko’pini tushuntiradi: NEVPNErrorDomain Code=4 va Code=5. Ikkalasi ham server shikoyati emas. Biri ilova diskdan hech qachon o’qilmagan obyektga sozlamalarni yozganda, ikkinchisi yozishning o’zi muvaffaqiyatsiz bo’lganda paydo bo’ladi, ko’pincha profil hali o’chirilgan holatda saqlanayotgani uchun. Ikkalasi ham IKEv2 parametrlariga tegmasdan, to’rt qo’ng’iroq tartibini o’zgartirish bilan tuzatiladi.

Avval yuklang, aks holda saqlashga solishtiradigan narsa yo’q

Menejer saqlangan profilning nusxasini ushlab turadi va siz tahrirlayotgan obyekt uni o’qimaguningizcha o’sha nusxa emas. Avval loadFromPreferences chaqiring, uning tugatish ishlovchisi ichida tahrirlang, keyin saqlang. O’qishni o’tkazib yuborsangiz, ramka o’zida bor narsa bilan yozayotganingiz o’rtasida nomuvofiqlikni ko’radi. Swift'da har qadamning shakli bir xil va har qadam o’z closure'iga tegishli:

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
    }
}

Tunnelni saqlash closure'i ichidan boshlash boshqa joydagi xuddi shu xato. U profil qayta o’qilishidan oldin ishlaydi, shuning uchun boshlash chaqiruvi saqlangan holatni emas, siz qurgan holatni ko’radi. Saqlash closure'i ikkinchi loadFromPreferences bilan tugaydi va faqat o’sha tugatish ishlovchisi startVPNTunnel chaqiradi.

Yoqish bayrog'i saqlashning bir qismi

Saqlangan profil yoqilmaguncha harakatsiz. isEnabled = true ni xuddi shu yozuvda o’rnating, aks holda profil diskka o’chirilgan holatda tushadi va Sozlamalar to’liq ko’rinadigan konfiguratsiyani ko’rsatsa ham startVPNTunnel rad etadi.

Tashqi tahrirlar buning ikkinchi yarmi. Agar foydalanuvchi Sozlamalarda biror narsani o’zgartirsa yoki qurilma tarmoqlar orasida harakatlansa, xotirada hali ushlab turgan qiymatlarga ishonishdan oldin qayta o’qing. Obyekt bu o’zgarishlarni siz uchun kuzatmaydi. Eskirgan nusxa — ilova foydalanuvchi tahririni jimgina qaytaradigan profil yozish usuli. Yonma-yon ikki maydon bir vaqtning o’zida jimgina muammo keltiradi: on-demand qoidalari bo’sh joy egallovchi emas, qoida obyektlari massivi bo’lishi kerak va disconnectOnSleep nusxalangan standartni emas, siz tanlagan xatti-harakatni aks ettirishi kerak.

Uchinchi tomon ilovalari uchun faqat ikkita protokol mavjud

Network Extension ilovalarga IPsec va IKEv2 beradi. L2TP va PPTP tizim ichida qoladi, shuning uchun ularga muhtoj ilova ularni ololmaydi, real javoblar esa IKEv2 qo’llab-quvvatlaydigan shlyuz yoki boshqariladigan konfiguratsiya profili.

Hisob ma’lumotlari ham xuddi shu namunaga amal qiladi. Parolni Keychain'ga qo’ying va satr o’rniga doimiy havola bering. Saqlash paytida nolinchi havola odatda qidiruv element yozilishidan oldin ishlaganini bildiradi, menejer buzilganini emas.

Ikkalasi ham dizayn qarori, aylanma yo’l emas. Parolni o’z sozlamalarida ushlab turadigan ilova ramka tavsiya qilmaydigan yo’lni tanlaydi va uning keltirib chiqargan muvaffaqiyatsizligi saqlash xatosi kabi o’qiladi.

Kodni qayta yozishdan oldin huquqni istisno qiling

loadFromPreferences umuman qayta chaqirmasa, ehtimoliy sabab yetishmayotgan Network Extension qobiliyati yoki uni olib yurmaydigan tayyorlash profilidir. Bu muvaffaqiyatsizlik xato berish o’rniga osilib qoladi, shuning uchun ishlaydigan kod soatlab qayta yoziladi. Yubormoqchi bo’lgan imzolangan builddagi huquqni tekshiring, chunki simulyator va qurilmada ishga tushirish farq qilishi mumkin va muhim maqsad qurilma. Maqsadning imzolash sozlamalarini oching va Network Extension qobiliyati aynan o’sha build uchun borligini tasdiqlang.

Huquqsiz tayyorlash profili apparatda xuddi shunday muvaffaqiyatsiz bo’ladi, holbuki o’sha build simulyatorda normal yuklanishi mumkin. Qo’ng’iroqlar tartibini qayta yozishdan oldin imzolangan arxivni haqiqiy qurilmada sinab ko’ring.

Taxminlarni emas, holat o’zgarishlarini kuzating

NEVPNStatusDidChangeNotification ni kuzating va har qadamdan keyin manager.connection.status ni yozib oling. invalid dan hech qachon chiqmaydigan holat profil saqlanmaganini yoki huquq yo’qligini bildiradi. connecting ga yetib, hech qachon ulanmaydigan ulanish taklif yoki hisob ma’lumotlariga ishora qiladi va bu boshqa dalillar bilan boshqa tekshiruv.

Profil Sozlamalar, Umumiy, VPN ostida ko’rinishini tasdiqlang va har closure xatosini yozib oling. Bu ikki fakt taxmin qilmasdan tartib xatosini ruxsat xatosidan ajratadi.

O'xshash maqolalar