ඔබේ යෙදුම විසන්ධි යැයි කියයි, මෙනු තීරුව සම්බන්ධිත යැයි කියයි, සහ රථවාහන පැහැදිලිව ගලා යයි. එම පරතරය නැවත උත්සාහයකින් නිවැරදි කළ හැකි තරඟ තත්ත්වයක් නොවේ: යෙදුම සහ ටනලය වෙන වෙනම ක්‍රියාවලි වන අතර, ඔබේ කේතය කියවන වස්තුව පද්ධතිය ගබඩා කරන වින්‍යාසයක කෑෂ් කළ දසුනකි. Apple හි Personal VPN මතුපිට පාලන API එකකි, දත්ත මාර්ගයක් නොවේ, සහ එහි අමුතු හැසිරීමේ බොහෝමයක් එම එකම කරුණෙන් පැමිණේ. සෑම ඇමතුමක් යටතේම සැබවින්ම සිදුවන්නේ මෙයයි.

මැනේජර වස්තුව කෑෂ් කළ දසුනකි, ටනලය නොවේ

NETunnelProviderManager පද්ධතියට හිමි මනාප ගබඩාවකින් පුරවනු ලැබේ, එබැවින් loadFromPreferences සම්පූර්ණ වන තෙක් එහි ගුණාංගවලට කිසිදු අර්ථයක් නැත. ඊට පෙර connection.status කියවන්නේ නම් ඔබට පෙරනිමි අගයක් ලැබේ, එබැවින්ම නැවත ආරම්භ කිරීමෙන් පසු පළමු තත්ත්ව නැවුම් කිරීම ටනලය ක්‍රියාත්මකව තිබියදීත් විසන්ධි ලෙස වාර්තා කරයි. පළමුව load කරන්න, පසුව එම සම්පූර්ණ කිරීමේ හසුරුවෙන්ම තත්ත්වය සහ ප්‍රොටොකෝල් වින්‍යාසය කියවන්න. පසුකාලීන වෙනස්කම් විමසීම වෙනුවට NEVPNStatusDidChange හරහා නිරීක්ෂණය කරන්න, සහ On Demand මගින් ආරම්භ වූ සම්බන්ධතා සඳහාද දැනුම්දීම ක්‍රියාත්මක වන බව සලකන්න, එහිදී යමක් ආපසු දීමට යෙදුම් ඇමතුමක්ම නොමැත. ප්‍රොටොකෝල් සැකසීම් සඳහාද එයම වලංගුය: ඒවා load කළ වින්‍යාසයෙන් කියවනු ලැබේ, යෙදුම ලබා දුන් දෙයින් නොවේ.

ටනලයම Network Extension සපයන්නාගේ ක්‍රියාවලියේ ජීවත් වේ, එබැවින් යෙදුමට සම්බන්ධතාව නොදැන තමන්ගේම තත්ත්වය අහිමි කර ගත හැක. අතුරුමුහුණත පෙන්වන සියල්ල මැනේජරයෙන් නැවත ගොඩනගන්නට ඕනෑ, පෙර සැසියෙන් මතක තබා ගන්නට නොවේ.

ආරම්භ කිරීමේ අනුපිළිවෙල: සුරකින්න, load කරන්න, පසුව ආරම්භ කරන්න

සපයන්නා පදනම් කරගත් සම්බන්ධතාවකට අනුපිළිවෙලින් පියවර තුනක් අවශ්‍යයි. සපයන්නාගේ වින්‍යාසය ලියා saveToPreferences අමතන්න, සුරකින ලද වින්‍යාසය ඔබ අතේ ඇති එකම වන පරිදි මැනේජරය load කරන්න, පසුව NETunnelProviderSession.startVPNTunnel() හරහා ආරම්භ කරන්න. සුරැකීම මග හැරියොත් ආරම්භයට ආරම්භ කිරීමට කිසිවක් නැත; සුරැකීමට පෙර load කළොත් මැනේජරය තවමත් පැරණි වින්‍යාසය පිළිබිඹු කරයි.

startVPNTunnel ආපසු දෙන බූලියන් අගය කියන්නේ ඉල්ලීම පිළිගත් බව පමණි. සපයන්නා මට්ටමේ අසාර්ථකතා පසුව විසන්ධි තත්ත්වයට වෙනස්වීමක් ලෙස පැමිණේ, එය ඔබ NEVPNStatusDidChange දැනුම්දීම හරහා නිරීක්ෂණය කරයි, සහ දැනුම්දීම් හසුරුව loadFromPreferences ට පසුව connection.status නැවත කියවිය යුතුය, මන්ද කෑෂ් කළ අගය තවමත් පැරණි එක විය හැක. ඉල්ලීම් මට්ටමේ අසාර්ථකතා ඇමතුමේ ව්‍යතිරේක විසි කරන ආකාරයෙන් වහාම ආපසු එයි, නැතහොත් startVPNTunnelAndReturnError: හි දෝෂ ප්‍රතිදාන පරාමිතිය හරහා. ආපසු දෙන අගය ප්‍රතිඵලය ලෙස සලකන කේතය කිසි විටෙකත් ස්ථාපිත නොවූ සම්බන්ධතාවක් වාර්තා කරයි. අනෙක් නිහඬ අසාර්ථකතාව වන්නේ ස්ථාපිත දිගුව සමඟ නොගැලපෙන සපයන්නාගේ බණ්ඩල් හඳුනාගැනීමයි: ඉල්ලීම ප්‍රතික්ෂේප වේ, සහ පණිවිඩයේ කිසිවක් හඳුනාගැනීම දෙසට යොමු නොකරයි. හඳුනාගැනීම වැරදි නම් ඉල්ලීම සාමාන්‍යයෙන් වහාම අසාර්ථක වේ, සපයන්නාගේ එකදු ලොග් පේළියක් පවා එළඹෙන්නට පෙර.

ආරම්භයෙන් පසු මනාප නැවත load කිරීම තත්ත්ව තිර නිවැරදි කරන දෙයයි. පද්ධතිය වින්‍යාසය වෙනස් කරන විට මැනේජරය ඔබ වෙත නව වින්‍යාසයක් තල්ලු නොකරයි.

විශ්වාස ද්‍රව්‍ය පැමිණෙන්නේ පැතිකඩ හරහා ය, කිසි විටෙකත් යෙදුම් කේතයෙන් නොවේ

iOS විශ්වාස ගබඩාවට මූල සහතිකයක් එක් කිරීමට යෙදුමකට සහාය දක්වන මාර්ගයක් නැත, එබැවින් Personal VPN වින්‍යාසයකට යොමු කළ හැක්කේ උපාංගය දැනටමත් විශ්වාස කරන ද්‍රව්‍යයට පමණි: ස්ථාපිත පැතිකඩකින්, උපාංග කළමනාකරණයෙන් හෝ පද්ධතිය වෙනත් හේතූන් නිසා විශ්වාස කරන CA එකකින් ස්ථාපිත කළ දාමයක්. පළමු ධාවනයේදී තමන්ගේම CA සාදා පද්ධතිය එය අනුමත කරනු ඇතැයි බලාපොරොත්තු වන යෙදුමක් සපයන්නා තුළම වලංගු කිරීමේදී අසාර්ථක වේ, එහිදී යෙදුමේ අතුරුමුහුණතට හේතුව බැලිය නොහැක.

එම සීමාව එය ඇති පරිදිම නිර්මාණ සීමාවක් ලෙස සලකා, ලියාපදිංචි පැතිකඩ සමඟ විශ්වාස ලංකරය යවන්න. VPN සත්‍යාපනය විශ්වාස තීරණයෙන් වෙන් කර තබන්න, මන්ද ඒවා විවිධ තැන්වල අසාර්ථක වන අතර විවිධ පුද්ගලයින් ඒවා නිදොස් කරයි.

ගණන් කරන්නන් පැමිණෙන්නේ අතුරුමුහුණතෙන්, VPN API එකෙන් නොවේ

මැනේජරය තත්ත්වය සහ වින්‍යාසය හෙළිදරව් කරයි, සහ එක් එක් ටනලයට බයිට් ගණන් කරන කිසිවක් නැත. ඔබට භාවිත සංඛ්‍යා අවශ්‍ය නම් getifaddrs() අමතා අදාළ අතුරුමුහුණත සඳහා if_data කියවන්න: Wi-Fi සඳහා en0, සෙලියුලර් සඳහා pdp_ip අතුරුමුහුණත්, සහ ටනලය සඳහාම utun උපාංගය. utun ගණන් කරන්නන් අභ්‍යන්තර රථවාහන විස්තර කරන අතර ප්‍රොටොකෝල් අධිභාරය ඇතුළත් කරයි.

එම සංඛ්‍යා ඇස්තමේන්තු ය, යෙදුම අනුව ගිණුම්කරණය නොවේ, සහ අතුරුමුහුණත නැවත සෑදූ විට ඒවා යළි සකසනු ලැබේ. අතුරුමුහුණතේ ඒවා එසේ ලේබල් කරන්න, නැතහොත් යමෙක් ඒවා ගැනුම්කරුට බිල්පත් කිරීමට භාවිත කරයි. ඔබට යෙදුම අනුව සංඛ්‍යා අවශ්‍ය නම් සම්පූර්ණයෙන්ම වෙනස් යාන්ත්‍රණයක් අවශ්‍යයි, මෙම ක්ෂේත්‍රවල වඩා හොඳ කියවීමක් නොවේ.

පිරිසිදු කිරීම stopVPNTunnel තුළ ය, අවසානයේ නොවේ

applicationWillTerminate පද්ධතියට ක්‍රියාවලිය මරා දැමිය හැකි පෙර ඔබට තත්පර කිහිපයක් ලබා දෙයි, එය සම්බන්ධතාවක් ගලවා දැමීමට විශ්වාසදායක තැනක් නොවේ. නැවැත්වීම stopVPNTunnel() වෙත යවන්න නැතහොත් සපයන්නාගේ නැවැත්වීම් ආපසු ඇමතුමේ හසුරුවන්න, සහ ඔබ ආරම්භ කළ මැනේජර හෝ වින්‍යාස හඳුනාගැනීම තබා ගන්න, එවිට නැවැත්වීම උපාංගයේ සෑම වින්‍යාසයක්ම වෙනුවට එම සම්බන්ධතාවම ඉලක්ක කරයි.

එම හඳුනාගැනීම එය අයත් පැතිකඩ අසල ගබඩා කරන්න, මන්ද මැනේජර වස්තුව පරිශීලකයා තෝරාගත් වින්‍යාසය වාර්තා නොකරයි. සහ මතක තබා ගන්න On Demand මගින් ඔසවන සම්බන්ධතාවක පිටුපස යෙදුම් ඇමතුමක්ම නොමැති බව, එබැවින් තත්ත්ව තිරයකට යමක් ඇඳීමට පෙර තවමත් මනාප load කළ යුතුය.

අදාළ ලිපි