જ્યારે તમે iOS એપની અંદર VPN સ્ક્રીન બનાવો છો, ત્યારે પહેલું આશ્ચર્ય એ છે કે Settings એપની પ્રોટોકોલ યાદી API યાદી નથી. Network Extension ફ્રેમવર્ક તમારી એપને એક વ્યક્તિગત VPN રૂપરેખાંકન બનાવવા દે છે, જે તે એપની માલિકીનું હોય છે, અને તે ફક્ત થોડા પ્રોટોકોલ ઑબ્જેક્ટ સ્વીકારે છે. લોકો જે બીજું બધું અપેક્ષા રાખે છે, L2TP થી ડાઉનલોડ કરેલી પ્રોફાઇલ સુધી, તે સપાટીની બહાર રહે છે અથવા Apple માટે ખાનગી છે. આગળ આવતી નિષ્ફળતાઓ સામાન્ય રીતે બગ નથી, તે API છે જે એવું કામ નકારે છે જે તેને ક્યારેય આપવામાં આવ્યું ન હતું.

દંતકથા: API એ Settings એડિટર છે

એવું માનવામાં આવે છે કે કારણ કે iOS IKEv1, IKEv2, L2TP અને IPsec પ્રોફાઇલો ગોઠવી શકે છે, એક એપ તેમાંથી કોઈપણ પ્રોગ્રામેટિક રીતે બનાવી શકે છે. તે નથી કરી શકતું. ફ્રેમવર્ક કૉલ કરતી એપને બરાબર એક રૂપરેખાંકન સ્લોટ આપે છે, અને તે સ્લોટ ફક્ત જાહેર પ્રોટોકોલ ક્લાસના નાના સમૂહને સ્વીકારે છે. લોકો જે બીજું બધું અપેક્ષા રાખે છે, L2TP થી ડાઉનલોડ કરેલી પ્રોફાઇલ સુધી, તે સપાટીની બહાર રહે છે અથવા Apple માટે ખાનગી છે.

આગળ આવતી નિષ્ફળતાઓ સામાન્ય રીતે બગ નથી. તે API છે જે એવું કામ નકારે છે જે તેને ક્યારેય આપવામાં આવ્યું ન હતું, અને ઉપાય એ છે કે સ્ક્રીન એવી ડિઝાઇન કરો કે API જેની માલિકી ધરાવે તેની આસપાસ હોય.

ત્રણ પ્રોટોકોલ ઑબ્જેક્ટ અને જે અસ્તિત્વમાં નથી

તમારા વિકલ્પો છે IKEv1 NEVPNProtocolIPSec દ્વારા, IKEv2 NEVPNProtocolIKEv2 દ્વારા, અને NETunnelProviderProtocol જો તમે તમારું પોતાનું પેકેટ ટનલ એક્સ્ટેન્શન મોકલો. NEVPNManager સંદર્ભ સ્વીકૃત પ્રોટોકોલ ઑબ્જેક્ટની યાદી આપે છે. L2TP અને PPTP ક્યારેય તે યાદીમાં દેખાતા નથી કારણ કે Apple એ તેમના માટે કોઈ ક્લાસ પ્રકાશિત કર્યો ન હતો. બંનેમાંથી કોઈપણ પ્રયાસ કરવાથી સાચવવાના સમયે ભૂલ સાથે અંત આવે છે, અથવા વધુ ખરાબ, એવા રૂપરેખાંકન સાથે જેનો સિસ્ટમ ચુપચાપ ઉપયોગ કરવાનો ઇનકાર કરે છે.

ડેસ્કટોપ કોડ અલગ નિયમો અનુસરે છે. macOS પર, SCNetworkInterfaceCreateWithInterface IPv4 પર L2TP જેવા ઇન્ટરફેસ પ્રકારને સ્ટેક કરે છે અને તેને નેટવર્ક સેવા સાથે જોડે છે, અને networksetup -connectpppoeservice પરિણામ શરૂ કરે છે. એડમિનિસ્ટ્રેટર અધિકારો અને સહાયક સાધન જરૂરી છે, કારણ કે શેર કરેલ રહસ્ય અને પાસવર્ડ સિસ્ટમ કીલેસમાં જાય છે. તે ડિઝાઇન iOS પર કૉપિ કરો અને કંઈપણ કમ્પાઇલ થતું નથી.

પાસવર્ડ નહીં, કીલેસ સંદર્ભ આપો

બંને IKE ક્લાસમાંથી કોઈ પણ પાસવર્ડને ટેક્સ્ટ તરીકે સ્વીકારતું નથી. બે પ્રોપર્ટી passwordReference અને sharedSecretReference ચિરસ્થાયી કીલેસ સંદર્ભ માંગે છે, જે તમે SecItemCopyMatching માંથી kSecReturnPersistentRef માંગીને મેળવો છો. આઇટમ ડેટા પાસ કરવાથી, અથવા ફીલ્ડમાં સ્ટ્રિંગ નાખવાથી, સાચવવામાં નિષ્ફળતા અથવા ખાલી ઓળખપત્રો સાથે કનેક્શન થાય છે. સંદર્ભ ફક્ત તેની પાછળની કીલેસ આઇટમ જેટલું જ ટકાઉ છે, એટલે કે રૂપરેખાંકન એસેમ્બલ થાય તે પહેલાં આઇટમ અસ્તિત્વમાં હોવી જોઈએ. તેને સાચવવાની સાથેની જ ટ્રાન્ઝેક્શનમાં બનાવો અને તમે ક્રમબદ્ધતાના બગનો આખો વર્ગ દૂર કરો છો.

પ્રમાણપત્ર પ્રમાણીકરણ બીજો રસ્તો લે છે: PKCS#12 બ્લોબ માટે identityData વત્તા identityDataPassword. તે બ્લોબને એપ બંડલની અંદર મોકલવી એ નમૂના કોડમાંથી આવેલી આદત છે, પ્રકાશન નિર્ણય નહીં, કારણ કે પાસવર્ડ તેની સાથે મુસાફરી કરે છે અને એપની દરેક નકલ સમાન ઓળખ ધરાવે છે.

અધિકાર અને ઉપલબ્ધતા બધું નક્કી કરે છે

મેનેજર બિલકુલ અસ્તિત્વમાં ન પણ હોય, અને કારણ પ્રોવિઝનિંગ છે. તમારા એપ ઓળખકર્તાને Network Extension ક્ષમતા સાથે વ્યક્તિગત VPN અધિકારની જરૂર છે, અને બિલ્ડને સહી કરતી પ્રોફાઇલે બંને ધરાવવા જોઈએ.

તે છોડી દો તો શેર કરેલ ઇન્સ્ટન્સ nil પરત કરે છે, અથવા સાચવવું એવી ભૂલ સાથે નિષ્ફળ જાય છે જે ક્યારેય અધિકારનો ઉલ્લેખ કરતી નથી. ઉપલબ્ધતા બીજું દ્વાર છે. iOS 8 કરતાં જૂનું કંઈપણ લક્ષ્ય બનાવો તો રનટાઇમ પર સિમ્બોલ ખૂટે છે, તેથી નિષ્ફળતા ક્રેશ અથવા nil મેનેજર છે, રૂપરેખાંકન વિનાનું મેનેજર નહીં. તમારા ઑબ્જેક્ટ ગ્રાફને ડિબગ કરતા પહેલાં રનટાઇમ અને અધિકાર તપાસો.

લોડ કરો, બદલો, સાચવો, પછી માંગ પરના ક્રમને જુઓ

જીવનચક્રને લોડ, બદલો, સાચવો તરીકે ગણો અને લોડ ક્યારેય છોડશો નહીં. જ્યાં સુધી loadFromPreferences પૂર્ણ ન થાય, મેનેજર કંઈ ધરાવતું નથી અને પ્રોટોકોલ ઑબ્જેક્ટ વાંચી કે બદલી શકાતું નથી.

બીજું સાચવવું બીજું ઉમેરવાને બદલે રૂપરેખાંકનને બદલે છે, તેથી અડધું પૂરું થયેલું સાચવવું કામ કરતી પ્રોફાઇલને નુકસાન પહોંચાડી શકે છે. માંગ પરના નિયમો ક્રમાંકિત એરે બનાવે છે, અને તે ક્રમ જ નીતિ છે. કનેક્ટ-ક્યાંય-પણ નિયમને ડિસ્કનેક્ટ નિયમની આગળ મૂકો અને મેન્યુઅલ ડિસ્કનેક્ટ પછી તરત જ ફરી કનેક્ટ થાય છે, જે ખામી જેવું લાગે છે પણ દસ્તાવેજીકૃત મૂલ્યાંકનને અનુસરે છે.

જ્યારે વપરાશકર્તાની ક્રિયા જીતવી જોઈએ ત્યારે ડિસ્કનેક્ટ નિયમને આગળ ખસેડો. એપના નિયંત્રણની બહાર જે રહે છે તે પણ એટલું જ મહત્વનું છે. રૂટ્સ ટનલ અથવા સર્વર નીતિમાંથી આવે છે, તમે સેટ કરેલી પસંદગીમાંથી નહીં, અને પેકેટ ટનલ પ્રદાતા શરૂ થાય ત્યારે તેમની જાણ કરે છે. એપ બીજી એપ અથવા રૂપરેખાંકન પ્રોફાઇલ દ્વારા ઇન્સ્ટોલ કરેલી પ્રોફાઇલોની યાદી બનાવી કે સંપાદિત કરી શકતી નથી, તેથી ઉપકરણના દરેક VPN દર્શાવતી સ્ક્રીનનું વચન આપશો નહીં.

સંબંધિત લેખો