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-ഉം കാണിക്കുന്ന സ്ക്രീൻ വാഗ്ദാനം ചെയ്യരുത്.

അനുബന്ധ ലേഖനങ്ങൾ