Екі қате коды iOS-те Network Extension VPN-ге алғашқы әрекеттердің көбін түсіндіреді: NEVPNErrorDomain Code=4 және Code=5. Екеуі де сервердің шағымы емес. Біреуі қосымша дискіден ешқашан оқылмаған нысанға параметрлерді жазғанда пайда болады, екіншісі жазу өзі сәтсіз болғанда, көбіне профиль әлі өшірулі күйде сақталып жатқандықтан. Екеуі де төрт шақырудың ретін өзгерту арқылы түзеледі, IKEv2 параметрлерін ұстамай.

Алдымен жүктеңіз, әйтпесе сақтаудың салыстырар ештеңесі жоқ

Менеджер сақталған профильдің көшірмесін ұстайды, ал сіз өңдеп жатқан нысан оны оқығанша сол көшірме емес. Алдымен loadFromPreferences шақырыңыз, оның аяқталу өңдегішінің ішінде өңдеңіз, содан кейін сақтаңыз. Оқуды өткізіп жіберсеңіз, қаңқа өзінде бар мен жазып жатқан нәрсенің арасында сәйкессіздікті көреді. Swift-те пішін әр қадамда бірдей, және әр қадам өз closure-ына тиесілі:

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

Туннельді сақтау closure-ының ішінен бастау — бұл басқа жердегі сол қате. Ол профиль қайта оқылмай тұрып іске қосылады, сондықтан бастау шақыруы сақталған күйді емес, сіз құрған күйді көреді. Сақтау closure-ы екінші loadFromPreferences-пен аяқталады, және тек сол аяқталу өңдегіші startVPNTunnel шақырады.

Қосу жалауы сақтаудың бөлігі

Сақталған профиль қосылғанша әрекетсіз. isEnabled = true-ні сол жазбада орнатыңыз, әйтпесе профиль дискіге өшірулі түрде түседі және Параметрлер толық көрінетін конфигурацияны көрсетсе де startVPNTunnel бас тартады.

Сыртқы өңдеулер — бұның екінші жартысы. Егер пайдаланушы Параметрлерде бірдеңені өзгертсе немесе құрылғы желілер арасында ауысса, жадында әлі ұстап отырған мәндерге сенбес бұрын қайта оқыңыз. Нысан бұл өзгерістерді сіз үшін бақыламайды. Ескірген көшірме — қосымшаның пайдаланушы өңдеуін үнсіз кері қайтаратын профиль жазу жолы. Көршілес екі өріс бір мезетте тыныш қиындық туғызады: on-demand ережелері бос орнын толтырғыш емес, ереже нысандарының массиві болуы керек, ал disconnectOnSleep көшірілген әдепкі емес, сіз таңдаған мінез-құлықты көрсетуі керек.

Үшінші тарап қосымшаларына тек екі протокол қолжетімді

Network Extension қосымшаларға IPsec және IKEv2 береді. L2TP мен PPTP жүйенің ішінде қалады, сондықтан оларға мұқтаж қосымша оларды ала алмайды, ал шынайы жауаптар — IKEv2 қолдайтын шлюз немесе басқарылатын конфигурация профилі.

Тіркелгі деректері де сол үлгіні ұстанады. Құпиясөзді Keychain-ге салыңыз және жолдың орнына тұрақты сілтеме беріңіз. Сақтау кезіндегі нөлдік сілтеме әдетте іздеу элемент жазылмай тұрып жүргенін білдіреді, менеджердің бұзылғанын емес.

Екеуі де дизайн шешімдері, айналма жолдар емес. Құпиясөзді өз теңшелімдерінде ұстайтын қосымша қаңқа ұсынбайтын жолды таңдайды, және оның тудыратын сәтсіздігі сақтау қатесіндей оқылады.

Кодты қайта жазбас бұрын құқықты алып тастаңыз

loadFromPreferences мүлдем кері шақырмаса, ықтимал себеп — жетіспейтін Network Extension мүмкіндігі немесе оны алып жүрмейтін дайындау профилі. Бұл сәтсіздік қате берудің орнына ілініп қалады, сондықтан жұмыс істеп тұрған код сағаттап қайта жазылады. Жіберуге ниеттенген қол қойылған билдтегі құқықты тексеріңіз, өйткені симуляторда және құрылғыда іске қосу өзгеше болуы мүмкін және маңызды мақсат — құрылғы. Мақсаттың қол қою параметрлерін ашып, Network Extension мүмкіндігінің дәл сол билд үшін бар екенін растаңыз.

Құқықсыз дайындау профилі аппараттық жасақтамада дәл солай сәтсіз болады, ал сол билд симуляторда қалыпты жүктелуі мүмкін. Шақыру ретін қайта жазбас бұрын қол қойылған мұрағатты нақты құрылғыда сынаңыз.

Болжамдарды емес, күй өзгерістерін бақылаңыз

NEVPNStatusDidChangeNotification-ты бақылаңыз және әр қадамнан кейін manager.connection.status жазып отырыңыз. invalid-тен ешқашан шықпайтын күй профиль сақталмағанын немесе құқық жоқтығын білдіреді. connecting-ке жетіп, ешқашан қосылмайтын байланыс ұсынысқа немесе тіркелгі деректеріне нұсқайды, ал бұл басқа дәлелдермен басқа тергеу.

Профильдің Параметрлер, Жалпы, VPN астында көрінетінін растаңыз және әр closure-дың қатесін жазып алыңыз. Осы екі факт болжамсыз рет қатесін рұқсат қатесінен ажыратады.

Қатысты мақалалар