API اسی فون پر Safari میں جواب دیتا ہے، جبکہ ایپ کی درخواست وقت کی حد سے گزر جاتی ہے۔ یہ فرق عام طور پر ٹنل نہیں ہوتا: اندرونی سروس کو کال کرنے والی ایپ عام HTTPS درخواست کرتی ہے، اور ڈیوائس پر موجود VPN صرف یہ طے کرتا ہے کہ اس درخواست کا کوئی راستہ ہے یا نہیں۔ ایپ میں دوسری ٹنل لکھنا ایک پروڈکٹ فیصلہ ہے، وقت کی حد کے لیے مرمت نہیں۔ نیچے دیا گیا حصہ ناکامی کو اس جگہ کے مطابق درجہ بندی کرتا ہے جہاں وہ ہوتی ہے، ایپ کے پاس پہلے سے موجود غلطی کی سطح استعمال کرتے ہوئے۔

ٹنل سے نہیں، غلطی سے شروع کریں

URLSession ٹرانسپورٹ ناکامیوں کو NSError اقدار کے طور پر NSURLErrorDomain میں رپورٹ کرتا ہے، اور کوڈ سب سے سستا دستیاب ثبوت ہے۔ کوئی بھی کنفیگریشن بدلنے سے پہلے وہ کوڈ ناکام ہونے والے ہوسٹ نام اور کام کے گزرے وقت کے ساتھ لاگ کریں۔ وقت کی حد، نام کی ناکامی اور اعتماد کی ناکامی اسکرین پر یکساں دکھتی ہیں اور تین مختلف مرمتیں مانگتی ہیں۔ پہلے درجہ بندی کریں، پھر اس طبقے کا حصہ پڑھیں۔

کام کی پیمائشیں اگلے سوال کا جواب دیتی ہیں، کہ کبھی کوئی کنکشن قائم ہوا یا نہیں، جو بغیر راستے والی درخواست کو اس درخواست سے الگ کرتا ہے جس کا سرور نے بہت دیر سے جواب دیا۔ ان میں سے کسی کے لیے ٹنل بدلنے کی ضرورت نہیں؛ درخواست کی اپنی تشخیص کو ایسی جگہ چھاپنے کی ضرورت ہے جہاں آپ اسے پڑھ سکیں۔

نام کا حل ہر چیز سے پہلے ناکام ہوتا ہے

جیسے کہ api.corp.example جیسا مختصر دفتری نام عام طور پر اس تلاش ڈومین پر منحصر ہوتا ہے جو فون میں نہیں ہوتا، اس لیے ایپ ایسا نام حل کرتی ہے جو صرف عمارت کے اندر موجود ہے۔ NSURLErrorCannotFindHost اس کا دستخط ہے۔ مکمل ہوسٹ نام VPN جو بھی ریزولور نصب کرے اس کے ذریعے حل ہونا چاہیے، اور جب تلاش ڈومین کی ضمانت نہ ہو تو ایپ کو مکمل طور پر اہل شکل مانگنی چاہیے۔ نام کو پتے سے بدلنا اور سرٹیفکیٹ جانچ بند کرنا ناکامی کو درست کرنے کے بجائے منتقل کرتا ہے۔

نجی DNS ریکارڈ اور بالکل اسی نام کے لیے جاری سرٹیفکیٹ معاون جوڑی ہیں۔ باقی سب ایک ایسا راستہ ہے جو صارفین تک پہنچتا ہے۔

وقت کی حد نام کا نہیں، راستے کا سوال ہے

NSURLErrorTimedOut کا مطلب ہے کہ نام حل ہو گیا اور کسی نے جواب نہیں دیا، جو راستے، پیکٹ پالیسی یا سروس کی طرف اشارہ کرتا ہے۔ جب ٹنل ہر ایپلیکیشن کے لیے مختص ہو، تو اسی سرور تک پہنچنے والی دوسری ایپ آپ کے بلڈ کے بارے میں کچھ نہیں کہتی، کیونکہ وہ میپنگ مشترک نہیں ہوتی۔ جانچیں کہ آپ جو بنڈل چلا رہے ہیں وہ اس مختصی کے اندر ہے، پھر جانچیں کہ اس کے لیے سروس کا راستہ اجازت شدہ ہے۔ مختصی سے باہر نصب ڈیولپمنٹ بلڈ مکمل طور پر ٹنل سے باہر ہو سکتا ہے اور ٹوٹی API جیسا لگ سکتا ہے۔

براؤزر موازنہ دکھاتا ہے کہ ڈیوائس پر کسی ایپ کا راستہ ہے۔ یہ کبھی ثابت نہیں کرتا کہ آپ کے بلڈ کا ہے، اسی لیے دونوں ٹیسٹ الگ الگ کرنے پڑتے ہیں۔

اعتماد کی ناکامیاں سرٹیفکیٹ پر موجود نام سے متعلق ہیں

NSURLErrorServerCertificateUntrusted اس کے نیچے موجود TLS غلطی کے ساتھ مل کر مطلب ہے کہ زنجیر یا شناخت کی جانچ ناکام ہوئی۔ اندرونی CA ڈیوائس پر قابل اعتماد ہونا چاہیے، اور کسی دوسرے ہوسٹ نام کے لیے جاری سرٹیفکیٹ کتنی ہی نیٹ ورک دوبارہ ترتیب ہو، غلط ہی رہتا ہے۔ Apple کی App Transport Security رہنمائی ان URL لوڈ کرنے والے کنکشنز پر اب بھی لاگو ہے، اور سادہ HTTP سروس کے گرد ٹنل اس سروس کو سرے سے سرے تک محفوظ نہیں بناتی۔

شناخت یا اعتماد کی لنگر درست کریں اور استثنا فہرست خالی رکھیں۔ من مانی لوڈنگ کے لیے عام استثنا ترقی کے دوران ناکامی چھپاتا ہے اور بعد میں ہر صارف کے لیے اسے جگہ پر چھوڑ دیتا ہے۔

HTTP کی نامنظوری ایپ کی ہے، نیٹ ورک کی نہیں

مکمل ہینڈ شیک پر 401 یا 403 کا مطلب ہے کہ درخواست پہنچی اور سروس نے اسے مسترد کر دیا، اس لیے باقی سوال اکاؤنٹ، ٹوکن سامعین، دائرہ یا کلید ہے۔ اسٹیٹس کوڈ اور ہوسٹ نام لاگ کریں، کبھی بیئرر ٹوکن یا جوابی باڈی نہیں۔ اس وقت ٹنل اپنا کام کر رہی ہے اور مزید نیٹ ورک تبدیلیاں صرف اصل مرمت میں تاخیر کرتی ہیں۔

جدول وہ درجہ بندی ہے جو ٹرمینل کے پاس رکھنی چاہیے: ہر اس ناکامی کے لیے ایک قطار جس کی ایپ واقعی رپورٹ کر سکتی ہے۔ کوڈ پڑھنے سے پہلے چھاپیں، کیونکہ آپ جو قطار چنیں گے وہ طے کرتی ہے کہ آپ کون سا حصہ کریں گے۔

Where it failsWhat the app seesFirst check
name resolutionNSURLErrorCannotFindHost (-1003)resolve the fully qualified name from the device itself
no path, or no answerNSURLErrorTimedOut (-1001)is this bundle inside the per-app mapping, and is the service path allowed
TLS trustNSURLErrorServerCertificateUntrusted (-1202)does the certificate name match the host, and is the internal CA trusted
service refusalHTTP 401 or 403 after a completed handshakeaccount, token audience, scope or key

ہر قطار اس کے نیچے والی سے سستا جانچی جاتی ہے، اور ہر ایک اسی درخواست کی مختلف پرت کو خارج کرتی ہے۔ جدول میں نیچے جائیں جب تک کوئی قطار میل نہ کھائے، پھر نیٹ ورک بدلنا بند کریں۔

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