NEVPNManager iOS वर काय तयार करू शकते (आणि काय नाही)
iOS चा VPN API तीन प्रोटोकॉल वर्गांपासून ॲपच्या मालकीचे एक कॉन्फिगरेशन तयार करतो. L2TP, PPTP आणि स्वाक्षरी केलेली प्रोफाइल्स त्या पृष्ठभागाचा भाग नाहीत.
iOS ॲपच्या आत VPN स्क्रीन बनवताना पहिले आश्चर्य हे आहे की Settings ॲपची प्रोटोकॉल यादी API ची यादी नाही। Network Extension फ्रेमवर्क तुमच्या ॲपला त्या ॲपच्या मालकीचे एक वैयक्तिक VPN कॉन्फिगरेशन तयार करू देतो, आणि तो फक्त काही प्रोटोकॉल ऑब्जेक्ट स्वीकारतो। लोक ज्याची अपेक्षा करतात ते बाकी सर्व, L2TP पासून डाउनलोड केलेल्या प्रोफाइलपर्यंत, त्या पृष्ठभागाबाहेर आहे किंवा Apple साठी खाजगी आहे। पुढे येणार्या अपयशा सहसा बग नसतात, ते API ने असे काम नाकारणे आहे जे त्याला कधीही दिले गेले नाही।
दंतकथा: API हा Settings संपादक आहे
असे मानले जाते की iOS IKEv1, IKEv2, L2TP आणि IPsec प्रोफाइल्स कॉन्फिगर करू शकतो म्हणून ॲप त्यापैकी कोणतेही प्रोग्रामेटिकरित्या तयार करू शकते। ते नाही करू शकत। फ्रेमवर्क कॉल करणार्या ॲपला नेमका एक कॉन्फिगरेशन स्लॉट देतो, आणि तो स्लॉट फक्त सार्वजनिक प्रोटोकॉल वर्गांचा छोटा संच स्वीकारतो। लोक ज्याची अपेक्षा करतात ते बाकी सर्व, L2TP पासून डाउनलोड केलेल्या प्रोफाइलपर्यंत, त्या पृष्ठभागाबाहेर आहे किंवा Apple साठी खाजगी आहे।
पुढे येणार्या अपयशा सहसा बग नसतात। ते API ने असे काम नाकारणे आहे जे त्याला कधीही दिले गेले नाही, आणि उपाय म्हणजे API कशाची मालकी धारण करतो त्याभोवती स्क्रीनची रचना करणे।
तीन प्रोटोकॉल ऑब्जेक्ट आणि जे अस्तित्वात नाहीत
तुमचे पर्याय आहेत NEVPNProtocolIPSec द्वारे IKEv1, NEVPNProtocolIKEv2 द्वारे IKEv2, आणि स्वतःचे पॅकेट टनेल विस्तारवजा पाठवत असल्यास NETunnelProviderProtocol। NEVPNManager संदर्भ स्वीकारलेल्या प्रोटोकॉल ऑब्जेक्टची यादी देतो। L2TP आणि PPTP त्या यादीत कधीही दिसत नाहीत कारण Apple ने त्यांच्यासाठी कोणताही वर्ग प्रकाशित केला नाही। त्यापैकी कोणतेही प्रयत्न करणे जतन करताना त्रुटीने संपते, किंवा त्याहून वाईट, सिस्टम गुपचूप वापरण्यास नकार देते अशा कॉन्फिगरेशनने।
डेस्कटॉप कोड वेगळ्या नियमांचे पालन करतो। macOS वर SCNetworkInterfaceCreateWithInterface IPv4 वरच्या L2TP सारख्या इंटरफेस प्रकाराची रचना करून तो नेटवर्क सेवेला जोडतो, आणि networksetup -connectpppoeservice निकाल सुरू करतो। प्रशासकीय अधिकार आणि सहाय्यक साधन आवश्यक आहे, कारण सामायिक रहस्य आणि संकेतशब्द सिस्टम कीचेनमध्ये जातात। ती रचना iOS वर कॉपी करा आणि काहीही कंपाइल होत नाही।
संकेतशब्द नाही, कीचेन संदर्भ द्या
कोणताही IKE वर्ग संकेतशब्द मजकूर म्हणून स्वीकारत नाही। passwordReference आणि sharedSecretReference हे दोन गुणधर्म कायमस्वरूपी कीचेन संदर्भ मागतात, जो तुम्ही kSecReturnPersistentRef मागून SecItemCopyMatching कडून मिळवता। आयटमचा डेटा पाठवणे, किंवा फील्डमध्ये स्ट्रिंग टाकणे, जतन अपयश किंवा रिकाम्या ओळखपत्रांसह कनेक्शन निर्माण करते। संदर्भ त्या मागील कीचेन आयटमइतकाच टिकाऊ असतो, म्हणून कॉन्फिगरेशन जुळवण्यापूर्वी आयटम असणे आवश्यक आहे। तो जतनाच्याच व्यवहारात तयार करा आणि क्रमवारीच्या बगचा संपूर्ण वर्ग दूर करता।
प्रमाणपत्र प्रमाणीकरण वेगळा मार्ग घेते: PKCS#12 ब्लोबसाठी identityData आणि identityDataPassword। तो ब्लोब ॲप बंडलमध्ये पाठवणे ही नमुना कोडमधून आलेली सवय आहे, प्रकाशनाचा निर्णय नाही, कारण संकेतशब्द त्याच्याबरोबर प्रवास करतो आणि ॲपची प्रत्येक प्रत तीच ओळख बाळगते।
अधिकार आणि उपलब्धता सर्व गोष्टींचे दार आहेत
व्यवस्थापक अजिबात नसू शकतो, आणि कारण प्रोव्हिजनिंग आहे। तुमच्या ॲप ओळखकर्त्याला Network Extension क्षमता आणि वैयक्तिक VPN अधिकार दोन्ही आवश्यक आहेत, आणि बिल्डवर स्वाक्षरी करणार्या प्रोफाइलमध्ये दोन्ही असणे आवश्यक आहे।
हे वगळल्यास सामायिक इन्स्टन्स nil परत करतो, किंवा जतन अशा त्रुटीने अयशस्वी होते जी अधिकाराचा कधीही उल्लेख करत नाही। उपलब्धता हे दुसरे दार आहे। iOS 8 पेक्षा जुने काही लक्ष्य केल्यास रनटाइमवर चिन्ह नसते, त्यामुळे अपयश क्रॅश किंवा nil व्यवस्थापक असते, कॉन्फिगरेशन नसलेला व्यवस्थापक नाही। तुमचा ऑब्जेक्ट ग्राफ डीबग करण्यापूर्वी रनटाइम आणि अधिकार तपासा।
लोड करा, बदला, जतन करा, नंतर मागणीनुसार क्रम पहा
जीवनचक्र लोड, बदल, जतन म्हणून घ्या आणि लोड कधीही वगळू नका। loadFromPreferences पूर्ण होईपर्यंत व्यवस्थापक काहीही धरत नाही आणि प्रोटोकॉल ऑब्जेक्ट वाचता किंवा बदलता येत नाही।
दुसरे जतन दुसरे जोडण्याऐवजी कॉन्फिगरेशन बदलते, त्यामुळे अर्धवट जतन काम करणार्या प्रोफाइलचे नुकसान करू शकते। मागणीनुसार नियम क्रमबद्ध अॅरे बनवतात, आणि तो क्रमच धोरण आहे। कुठूनही कनेक्ट नियम डिस्कनेक्ट नियमाच्या आधी ठेवा आणि मॅन्युअल डिस्कनेक्टनंतर त्वरित पुन्हा कनेक्ट होते, जे दोषासारखे वाटते पण दस्तऐवजीकृत मूल्यांकनाचे पालन करते।
वापरकर्त्याची क्रिया जिंकली पाहिजे तेव्हा डिस्कनेक्ट नियम पुढे आणा। ॲपच्या नियंत्रणाबाहेर जे राहते तेही तितकेच महत्त्वाचे आहे। मार्ग तुम्ही सेट केलेल्या प्राधान्यातून नाही, तर टनेल किंवा सर्व्हर धोरणातून येतात, आणि पॅकेट टनेल प्रदाता सुरू होताना त्यांची नोंद देतो। ॲप इतर ॲप्स किंवा कॉन्फिगरेशन प्रोफाइलने स्थापित केलेली प्रोफाइल्स सूचीबद्ध किंवा संपादित करू शकत नाही, म्हणून डिव्हाइसवरील प्रत्येक VPN दाखवणार्या स्क्रीनचे वचन देऊ नका।