موبائل ڈویلپمنٹ میں خرابیوں کا انتظام: یہ کیا ہے، کون سی تکنیکیں اور کیسے منظم کریں

مصنف: IT Sectr اشاعت: 2026-05-23 مطالعے کا وقت: 11 منٹ

خرابیوں کا انتظام موبائل ڈویلپر کے لیے ایک بنیادی مہارت ہے۔ HackerOne (2025) کے مطابق، 62% ڈیٹا کی خلاف ورزیاں غیر پروسیس شدہ استثنیات کی وجہ سے ہوتی ہیں۔ خرابیوں کا صحیح انتظام نہ صرف کریشوں کو روکتا ہے بلکہ صارف کے ڈیٹا کی بھی حفاظت کرتا ہے۔ آئیے iOS، Android اور React Native کے طریقوں کو دیکھتے ہیں۔

اہم نکات

  • iOS خرابیوں کے انتظام کے لیے do-catch، throw، guard let اور if-let استعمال کرتا ہے۔ Swift زبان کی سطح پر غیر پروسیس شدہ استثنیات کی اجازت نہیں دیتا۔
  • Android/Kotlin try-catch، elvis آپریٹر، sealed class اور Result ٹائپ فراہم کرتا ہے۔ Sealed class خرابی کی حالتوں کو ماڈل کرنے کے لیے ایک طاقتور ٹول ہے۔
  • Kotlin Result اور فنکشنل لائبریریوں کا Either کمپائل ٹائم پر خرابیوں کو ہینڈل کرنے پر مجبور کرتا ہے، کوڈ کو زیادہ قابل بھروسہ بناتا ہے۔
  • Crash Reporting (Crashlytics, Sentry) پروڈکشن کے لیے ایک لازمی ٹول ہے۔ اس کے بغیر آپ کو صارفین سے ہی بگ کے بارے میں پتہ چلتا ہے۔
  • React Native میں Error Boundary JavaScript کی غلطیوں کی وجہ سے ایپلیکیشن کے مکمل کریش کو روکتا ہے۔ اسے روٹ کمپوننٹس کے لیے استعمال کریں۔

iOS میں خرابیوں کا انتظام: Do-Catch, Throw, Guard Let

خرابیوں کا انتظام Swift میں چار اہم میکانزم پر مبنی ہے: do-catch، throws، guard let اور if-let۔ بہت سی زبانوں کے برعکس، Swift بغیر پکڑے گئے استثنیات کی اجازت نہیں دیتا — ہر خرابی کو واضح طور پر ہینڈل کیا جانا چاہیے یا throws کے ذریعے اعلان کیا جانا چاہیے۔ خرابیوں کا انتظام موبائل ڈویلپمنٹ کے لیے ایک اہم مہارت ہے، جو براہ راست ایپلیکیشن کے استحکام کو متاثر کرتی ہے۔

Do-Catch اور Throw

do-catch throws سے نشان زد فنکشنز کو کال کرنے کے لیے معیاری بلاک ہے۔ do کے اندر، try کے ساتھ ایک فنکشن کال کیا جاتا ہے، اور اگر یہ خرابی پھینکتا ہے تو کنٹرول catch میں منتقل ہو جاتا ہے۔ پیٹرن میچنگ کے ذریعے مختلف خرابی کی اقسام کو ہینڈل کیا جا سکتا ہے۔ اگر خرابی ہینڈل نہیں کی جاتی ہے، تو یہ اسٹیک میں اوپر پھیل جاتی ہے (Error Propagation)۔ iOS میں مؤثر خرابی کے انتظام کے لیے، do-catch کو بنیادی میکانزم کے طور پر استعمال کریں۔

Throw فنکشن کے دستخط میں اعلان کیا جاتا ہے: func fetchData() throws -> Data۔ اس کا مطلب ہے کہ کال کرنے والے کوڈ کو try، try? یا try! کے ذریعے خرابی کو ہینڈل کرنا ہوگا۔ try? خرابی کو nil میں تبدیل کرتا ہے، try! خرابی پر کریش کا سبب بنتا ہے (صرف اس وقت استعمال کریں جب آپ کامیابی کے بارے میں یقین رکھتے ہوں)۔ throw کے ذریعے خرابی کا انتظام Swift میں ایک لازمی عمل ہے۔

Optional/Nullable اور Guard Let

Guard let اگر قدر nil ہو تو فنکشن سے جلد باہر نکلنے کے لیے ایک تعمیر ہے۔ if-let کے برعکس، guard let کو else شاخ میں ایک اخراج (return، throw، break) کی ضرورت ہوتی ہے۔ یہ کوڈ کو زیادہ ہموار اور پڑھنے کے قابل بناتا ہے — بغیر نیسٹڈ if بلاکس کے۔ اگر optional nil نہیں ہو سکتا — تو force unwrap (!) استعمال کریں، صرف اس وقت جب آپ مکمل طور پر یقین رکھتے ہوں۔ موبائل ایپ میں، guard let اختیاری اقدار کو ہینڈل کرتے وقت کریشوں سے بچنے میں مدد کرتا ہے۔

Optional Chaining (user?.address?.city) اور nil-coalescing (??) بغیر کھولے optional کے ساتھ کام کرنے کے لیے نحوی شکر ہے۔ IT Sectr میں، ہم API ان پٹ پیرامیٹرز کی تصدیق کے لیے guard let استعمال کرتے ہیں اور ٹیم کو واضح تبصرے کے بغیر force unwrap سے بچنے کا پابند کرتے ہیں۔ ہر سطح پر ایک خرابی کا ہینڈلر غیر متوقع ناکامیوں سے بچاتا ہے۔

Android میں خرابیوں کا انتظام: Try-Catch, Elvis, Sealed Class

Kotlin Android ڈویلپمنٹ کے لیے بنیادی زبان ہے۔ یہ Java سے try-catch حاصل کرتا ہے لیکن محفوظ متبادل شامل کرتا ہے: elvis آپریٹر، require، check اور sealed class۔ Kotlin میں خرابیوں کا انتظام ان میکانزم کے امتزاج پر مبنی ہے۔ Swift کے برعکس، Kotlin کو چیک شدہ استثنیات کو ہینڈل کرنے کی ضرورت نہیں ہے (تمام استثنیات غیر چیک شدہ ہیں)۔ Android پر موبائل ایپلیکیشنز میں خرابیوں کے انتظام کے لیے، sealed class کو بنیادی پیٹرن کے طور پر استعمال کریں۔

Try-Catch اور Elvis آپریٹر

Try-catch Kotlin میں ایک اظہار کے طور پر کام کرتا ہے — یہ ایک قدر لوٹاتا ہے۔ val result = try { fetchData() } catch (e: Exception) { fallbackValue }۔ یہ کوڈ کو مختصر کرتا ہے۔ Elvis آپریٹر (?:) nullable اقسام کے لیے nil-coalescing کا مشابہ ہے: val name = user?.name ?: "Guest"۔ موبائل ایپلیکیشنز میں خرابیوں کے انتظام کے لیے، اظہار کے طور پر try-catch سب سے مختصر طریقہ ہے۔

Sealed class کامیابی اور خرابی کی حالتوں کو ماڈل کرنے کے لیے ایک طاقتور ٹول ہے۔ sealed class NetworkResult { data class Success(val data: T) : NetworkResult(); data class Error(val message: String) : NetworkResult() }. جب when اظہار میں استعمال کیا جاتا ہے، تو کمپائلر شاخوں کی مکملیت کی جانچ کرتا ہے۔ sealed class کے ذریعے خرابی کا انتظام اس بات کی ضمانت دیتا ہے کہ کوئی بھی حالت غیر ہینڈل نہیں رہتی۔

kotlin
// Sealed class + try-catch — Android کے لیے مخصوص پیٹرن
sealed class NetworkResult<out T> {
    data class Success<out T>(val data: T) : NetworkResult<T>()
    data class Error(val message: String) : NetworkResult<Nothing>()
}

fun fetchUser(id: String): NetworkResult<User> {
    return try {
        NetworkResult.Success(api.getUser(id))
    } catch (e: Exception) {
        NetworkResult.Error("Failed: ${e.message}")
    }
}

مثال میں، sealed class NetworkResult دو حالتوں کو ماڈل کرتی ہے: ڈیٹا کے ساتھ کامیابی اور پیغام کے ساتھ خرابی۔ fetchUser فنکشن کسی بھی صورت میں نتیجہ لوٹاتا ہے، اور کال کرنے والا کوڈ when کے ذریعے دونوں شاخوں کو ہینڈل کرتا ہے۔ یہ غیر ہینڈل شدہ خرابی کے امکان کو ختم کرتا ہے۔ sealed class کے ذریعے خرابی کا انتظام IT Sectr میں Android ڈویلپمنٹ کا معیار ہے۔

Kotlin میں خرابیوں کا انتظام: Result اور Either

Result ایک بلٹ ان Kotlin قسم ہے جو کسی آپریشن کے نتیجے کو ظاہر کرتی ہے جو ناکام ہو سکتا ہے۔ یہ fold، getOrThrow یا map کے ذریعے کامیابی اور ناکامی کو ہینڈل کرنے پر مجبور کرتا ہے۔ Result غیر متزلزل زنجیروں (coroutines) میں مفید ہے۔ Result کے ساتھ خرابی کا انتظام Kotlin میں موبائل ڈویلپمنٹ کے لیے ایک معیار ہے۔

Result بمقابلہ Either

Either Arrow لائبریری سے ایک فنکشنل قسم ہے جو دو اقسام میں سے ایک کی قدر واپس کرنے کی اجازت دیتی ہے (Left — خرابی، Right — کامیابی)۔ Result کے برعکس، Either میں کوئی بھی صارف کی وضاحت کردہ خرابی کی قسم ہو سکتی ہے۔ سادہ پروجیکٹس کے لیے، بلٹ ان Result کافی ہے؛ پیچیدہ پروجیکٹس کے لیے، Arrow سے Either استعمال کریں۔ خرابی کے انتظام کے آلے کا انتخاب پروجیکٹ کی پیچیدگی پر منحصر ہے۔

خرابی کا پھیلا

خرابی کا پھیلا ایک میکانزم ہے جس میں خرابی کال اسٹیک میں اوپر پھیلتی ہے جب تک کہ اسے ہینڈل نہ کیا جائے۔ Kotlin میں، یہ ڈیفالٹ طور پر ہوتا ہے (غیر چیک شدہ استثنیات)۔ Swift میں، یہ صرف throws سے نشان زد فنکشنز پر لاگو ہوتا ہے۔ Result اور Either کے ساتھ، خرابیاں نہیں پھیلتیں — وہ قسم میں رہتی ہیں اور آپ کو انہیں ہینڈل کرنا ہوگا۔ یہ موبائل ایپلیکیشنز میں خرابی کے انتظام کو زیادہ محفوظ بناتا ہے۔

پیرامیٹر iOS (Swift) Android (Kotlin)
بنیادی میکانزمdo-catch + throwstry-catch (expression)
Optional/Nullableguard let, if-let, ???. let, elvis (?:)
فنکشنل طریقہResult (Swift 5+)Result, Either (Arrow)
خرابی کی ماڈلنگEnum: ErrorSealed class
چیک شدہ استثنیاتہاں (throws)نہیں (تمام غیر چیک شدہ)
Non-fatalos_log, CrashlyticsTimber, Crashlytics

جدول اہم فرق دکھاتا ہے۔ iOS کو خرابی کے واضح اعلان (throws) کی ضرورت ہوتی ہے، جو کوڈ کو محفوظ لیکن زیادہ لفظی بناتا ہے۔ Android ڈویلپر کے نظم و ضبط پر منحصر ہے۔ IT Sectr میں، ہم Android کے لیے sealed class اور iOS کے لیے throws استعمال کرتے ہیں — یہ موبائل ایپلیکیشنز میں خرابی کے انتظام کے لیے دونوں پلیٹ فارمز کا بہترین عمل ہے۔

کریش رپورٹنگ: Crashlytics اور Sentry

کریش رپورٹنگ ایپلیکیشن کریشوں کو جمع کرنے اور تجزیہ کرنے کا ایک نظام ہے۔ کریش رپورٹنگ پروڈکشن میں خرابی کے انتظام کا ایک لازمی حصہ ہے۔ اس کے بغیر، آپ کو صارفین سے مسائل کے بارے میں پتہ چلتا ہے، جو پروڈکشن کے لیے ناقابل قبول ہے۔ دو اہم ٹولز: Firebase Crashlytics (مفت) اور Sentry (بنیادی استعمال کے لیے مفت)۔ موبائل ایپلیکیشنز میں خرابی کے انتظام کے لیے، پہلی ریلیز سے ہی کریش رپورٹنگ کو نافذ کریں۔

Firebase Crashlytics

Crashlytics Firebase کا حصہ ہے۔ یہ خود بخود کریش جمع کرتا ہے، انہیں کال اسٹیک کے مطابق گروپ کرتا ہے اور متاثرہ صارفین کی تعداد دکھاتا ہے۔ یہ recordException() کے ذریعے غیر مہلک خرابیوں کی لاگنگ کو سپورٹ کرتا ہے۔ انضمام: build.gradle (Android) یا Podfile (iOS) میں SDK شامل کریں۔ Crashlytics پروجیکٹ شروع کرتے وقت خرابی کے انتظام کے لیے بہترین مفت ٹول ہے۔

Sentry

Sentry ایک کراس پلیٹ فارم خرابی کی نگرانی کا نظام ہے۔ Crashlytics کے برعکس، Sentry تفصیلی ٹریسنگ (breadcrumbs)، کارکردگی کی نگرانی اور React Native سپورٹ فراہم کرتا ہے۔ یہ خرابی کے وقت ایپلیکیشن کی حالت دیکھنے کی اجازت دیتا ہے۔ IT Sectr ان پروجیکٹس کے لیے Sentry کی سفارش کرتا ہے جنہیں موبائل ڈویلپمنٹ میں خرابی کے انتظام پر مکمل کنٹرول کی ضرورت ہوتی ہے۔

React Native میں Error Boundary

Error Boundary ایک React کمپوننٹ ہے جو چائلڈ کمپوننٹ ٹری میں JavaScript کی غلطیوں کو پکڑتا ہے اور فال بیک UI دکھاتا ہے، ایپلیکیشن کے مکمل کریش کو روکتا ہے۔ Error Boundary React Native میں خرابی کے انتظام کے لیے ایک اہم کمپوننٹ ہے۔ اہم اسکرینز اور نیویگیشن کے لیے error boundaries استعمال کریں۔ React Native پر موبائل ایپلیکیشنز میں خرابی کے انتظام کے لیے اوپری سطح پر مناسب Error Boundary سیٹ اپ کی ضرورت ہوتی ہے۔

Error Boundary کا نفاذ

Error Boundary componentDidCatch(error, errorInfo) یا static getDerivedStateFromError(error) کے ذریعے بنایا جاتا ہے۔ یہ غیر متزلزل کوڈ (setTimeout, requestAnimationFrame)، سرور سائڈ رینڈرنگ یا مقامی خرابیوں (Native Modules) میں غلطیوں کو نہیں پکڑتا۔ لاگنگ کے لیے، componentDidCatch کے اندر کریش رپورٹنگ SDK استعمال کریں۔ Error Boundary UI پرت کے لیے ایک سادہ لیکن مؤثر خرابی کا ہینڈلر ہے۔

مہلک بمقابلہ غیر مہلک خرابیاں

مہلک خرابی ایک غیر ہینڈل شدہ استثنا ہے جو ایپلیکیشن کریش کا سبب بنتی ہے۔ غیر مہلک خرابی ایک استثنا ہے جسے آپ نے پکڑا اور ہینڈل کیا، لیکن یہ کوڈ میں کسی مسئلے کی نشاندہی کرتی ہے۔ غیر مہلک خرابیاں Crashlytics/Sentry کے ذریعے لاگ کی جاتی ہیں اور مہلک ہونے سے پہلے بگ تلاش کرنے میں مدد کرتی ہیں۔ مہلک اور غیر مہلک دونوں خرابیوں کو موبائل ڈویلپمنٹ میں مناسب خرابی کے انتظام کی ضرورت ہوتی ہے۔

اکثر پوچھے گئے سوالات

Kotlin میں try-catch اور Result میں کیا فرق ہے؟

try-catch استثنیات کے لیے ایک زبان کا میکانزم ہے۔ Result ایک ریپر ٹائپ ہے جو کمپائل ٹائم پر خرابی کے انتظام پر مجبور کرتا ہے۔ IT Sectr میں، ہم کاروباری منطق کے لیے Result اور بیرونی نظاموں کے ساتھ کام کرنے کے لیے try-catch کو ترجیح دیتے ہیں۔ دونوں طریقے Kotlin میں عمومی خرابی کے انتظام کا حصہ ہیں۔

React Native میں Error Boundary کیا ہے؟

Error Boundary ایک React کمپوننٹ ہے جو چائلڈ کمپوننٹ ٹری میں JavaScript کی غلطیوں کو پکڑتا ہے اور پوری ایپلیکیشن کو کریش کرنے کے بجائے فال بیک UI دکھاتا ہے۔ یہ غیر متزلزل کوڈ یا سرور سائڈ رینڈرنگ میں غلطیوں کو نہیں پکڑتا۔ Error Boundary React Native پر موبائل ایپلیکیشنز میں خرابی کے انتظام کا ایک اہم عنصر ہے۔

کیا مجھے نئے پروجیکٹ کے لیے Crashlytics یا Sentry استعمال کرنا چاہیے؟

Crashlytics (Firebase) شروع کرنے کے لیے بہترین انتخاب ہے: مفت، سادہ انضمام، خودکار کریش گروپنگ۔ Sentry ان پروجیکٹس کے لیے ہے جنہیں تفصیلی خرابی سے باخبر رہنے اور کارکردگی کی نگرانی کی ضرورت ہوتی ہے۔ خرابی کے انتظام کے آلے کا انتخاب بجٹ اور نگرانی کی ضروریات پر منحصر ہے۔

غیر مہلک خرابی کیا ہے اور یہ مہلک سے کیسے مختلف ہے؟

مہلک خرابی ایپلیکیشن کریش ہے (بغیر پکڑا گیا استثنا)۔ غیر مہلک خرابی ایک استثنا ہے جسے آپ نے پکڑا اور ہینڈل کیا، لیکن یہ کوڈ میں کسی مسئلے کی نشاندہی کرتی ہے۔ غیر مہلک خرابیاں الگ سے لاگ کی جاتی ہیں اور مہلک ہونے سے پہلے بگ تلاش کرنے میں مدد کرتی ہیں۔ موبائل ایپلیکیشن میں خرابی کے انتظام میں دونوں اقسام کی نگرانی شامل ہونی چاہیے۔

Swift میں if-let کے بجائے guard let کب استعمال کرنا چاہیے؟

guard let قدر کی عدم موجودگی میں فنکشن سے جلد نکلنے کے لیے استعمال ہوتا ہے — یہ کوڈ کو زیادہ لکیری اور پڑھنے کے قابل بناتا ہے۔ if-let اس وقت موزوں ہے جب بلاک کے اندر optional کی ضرورت ہو اور فنکشن سے نکلنے کی ضرورت نہ ہو۔ guard let ان پٹ پیرامیٹرز کی تصدیق کے لیے بہتر ہے اور iOS میں خرابی کے انتظام کا حصہ ہے۔

خلاصہ

  • iOS do-catch، throws اور guard let استعمال کرتا ہے — ہر خرابی کو فنکشن دستخط میں اعلان کیا جانا چاہیے۔ iOS میں خرابی کے انتظام کے لیے واضح اعلانات کی ضرورت ہوتی ہے۔
  • Android/Kotlin اظہار کے طور پر try-catch، elvis آپریٹر اور خرابی کی ماڈلنگ کے لیے sealed class فراہم کرتا ہے۔ Android میں خرابی کا انتظام زیادہ لچکدار ہے لیکن نظم و ضبط کی ضرورت ہے۔
  • Sealed class اور Result Kotlin میں فنکشنل خرابی کے انتظام کے لیے بہترین طریقے ہیں۔ وہ غیر ہینڈل شدہ حالتوں کو ختم کرتے ہیں۔
  • کریش رپورٹنگ (Crashlytics, Sentry) پروڈکشن کے لیے لازمی ہے۔ Crashlytics سے شروع کریں، پروجیکٹ بڑھنے پر Sentry پر جائیں۔ نگرانی کے بغیر موبائل ایپلیکیشنز میں خرابی کا انتظام ناممکن ہے۔
  • React Native میں Error Boundary مکمل UI کریش کو روکتا ہے۔ اوپری نیویگیشن سطح پر استعمال کریں۔
  • غیر مہلک خرابیاں مہلک خرابیوں کی طرح اہم ہیں — وہ ایپ کریش سے پہلے مسائل کی نشاندہی کرتی ہیں۔ خرابی کے ہینڈلر کو دونوں اقسام کو لاگ کرنا چاہیے۔
  • Global Exception Handler دفاع کی آخری لائن ہے۔ تمام بغیر پکڑی گئی خرابیوں کو لاگ کرنے کے لیے Thread.setDefaultUncaughtExceptionHandler (Android) یا NSSetUncaughtExceptionHandler (iOS) نافذ کریں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں