دو غلطی کوڈز iOS پر Network Extension VPN کی بیشتر پہلی کوششوں کی وضاحت کرتے ہیں: NEVPNErrorDomain Code=4 اور Code=5۔ ان میں سے کوئی بھی سرور کی شکایت نہیں ہے۔ ایک اس وقت ظاہر ہوتا ہے جب ایپ کسی ایسی چیز میں ترتیبات لکھتی ہے جو کبھی ڈسک سے نہیں پڑھی گئی، اور دوسرا اس وقت جب تحریر ہی ناکام ہو، اکثر اس لیے کہ پروفائل ابھی غیر فعال ہوتے ہوئے محفوظ کیا جا رہا ہے۔ دونوں کو چار کالوں کی ترتیب بدل کر ٹھیک کیا جاتا ہے، IKEv2 پیرامیٹرز کو چھوئے بغیر۔

پہلے لوڈ کریں، ورنہ محفوظ کرنے کے پاس موازنہ کرنے کو کچھ نہیں

منتظم محفوظ شدہ پروفائل کی ایک نقل رکھتا ہے، اور جو چیز آپ ترمیم کرتے ہیں وہ اسے پڑھنے تک وہ نقل نہیں ہے۔ پہلے loadFromPreferences کال کریں، اس کے تکمیلی ہینڈلر کے اندر ترمیم کریں، پھر محفوظ کریں۔ اگر پڑھنا چھوڑ دیں تو فریم ورک اپنے پاس موجود اور آپ کے لکھے ہوئے کے درمیان فرق دیکھتا ہے۔ Swift میں ہر مرحلے کی شکل ایک جیسی ہے، اور ہر مرحلہ اپنے کلوزر میں آتا ہے:

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

محفوظ کرنے کے کلوزر کے اندر سے ٹنل شروع کرنا دوسری جگہ وہی غلطی ہے۔ یہ پروفائل دوبارہ پڑھے جانے سے پہلے چلتا ہے، اس لیے شروع کرنے والی کال وہ حالت دیکھتی ہے جو آپ نے بنائی، محفوظ شدہ حالت نہیں۔ محفوظ کرنے کا کلوزر دوسری 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 کے تحت دکھائی دیتا ہے، اور ہر کلوزر کی غلطی درج کریں۔ یہ دو حقائق بغیر اندازے کے ترتیب کی خرابی کو اجازت کی خرابی سے الگ کرتے ہیں۔

متعلقہ مضامین