Xcode میں کنسول: کلیدی تصورات، ڈیٹا آؤٹ پٹ اور ڈیبگنگ

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

Xcode میں کنسول iOS ڈویلپمنٹ کے لیے ایک ڈیبگنگ ٹول ہے جو NSLog، print، os_log آؤٹ پٹ اور ایپ کریش لاگ کو ریئل ٹائم میں دکھاتا ہے۔ Apple Unified Logging کے مطابق، iOS 10 سے Apple Unified Logging System کے ذریعے مرکزی پیغام جمع کرنے کے لیے NSLog کے بجائے os_log استعمال کرنے کی تجویز کرتا ہے۔ کنسول ڈیبگر آؤٹ پٹ اور سسٹم پیغامات کو ایک واحد Debug Area ونڈو میں یکجا کرتا ہے، جو ڈویلپمنٹ کے کسی بھی لمحے قابل رسائی ہے۔

اہم نکات

  • کنسول Xcode — Debug Area میں NSLog، os_log، print اور iOS کریش لاگ دیکھنے کے لیے ونڈو
  • Unified Logging System — زمروں، سطحوں اور ڈسک پر ذخیرہ کرنے کے ساتھ Apple کا جدید لاگنگ سسٹم
  • os_log — متحرک سطح کی تشکیل کے ساتھ تجویز کردہ لاگنگ API
  • کریش لاگ ڈیوائس یا سمیولیٹر پر ایپ کریش ہونے پر خود بخود کنسول میں ظاہر ہوتے ہیں
  • بریک پوائنٹ لاگ — Debugger Command کے ذریعے عملدرآمد روکے بغیر کنسول میں پیغام بھیجتے ہیں

Xcode میں کنسول کیا ہے

کنسول Xcode میں Debug Area کا حصہ ہے، جو ایڈیٹر کے نیچے پینل میں واقع ہے (View → Debug Area → Activate Console، شارٹ کٹ Cmd + Shift + Y)۔ کنسول چلتی ہوئی ایپ سے تمام ٹیکسٹ آؤٹ پٹ دکھاتا ہے: NSLog، os_log، print سے پیغامات، رن ٹائم وارننگز اور ایپ کریش ہونے پر خودکار استثنا ڈمپ۔

کنسول سمیولیٹر اور فزیکل ڈیوائس دونوں پر کام کرتا ہے۔ سمیولیٹر میں، پیغامات مقامی پائپ کے ذریعے فوری طور پر پہنچتے ہیں؛ ڈیوائس پر، وہ USB کنکشن کے ذریعے 1–3 فریم کی تاخیر سے آتے ہیں۔ پروڈکشن ایپس کے لیے، ڈیوائس پر کنسول دستیاب نہیں ہے — ڈویلپرز Crashlytics یا log collect کے ذریعے دور دراز سے جمع کرنے کے ساتھ Unified Logging پر انحصار کرتے ہیں۔

Mac پر سسٹم Console.app کے برعکس، Xcode میں کنسول ونڈو صرف موجودہ چلتی ہوئی ایپ کے لاگ دکھاتی ہے (فلٹرنگ کی صلاحیت کے ساتھ)۔ Console.app iOS سمیولیٹر سمیت Mac پر تمام پروسیسز کے لاگ جمع کرتا ہے۔ تاہم، iOS ایپس کو ڈیبگ کرنے کے لیے، ڈویلپرز LLDB ڈیبگر کے ساتھ انضمام کی وجہ سے بلٹ ان Xcode کنسول استعمال کرتے ہیں۔

لاگنگ API: NSLog، os_log اور print

کنسول آؤٹ پٹ کے لیے iOS ڈویلپر کو تین اہم APIs دستیاب ہیں: NSLog (قدیم)، os_log (تجویز کردہ) اور print (صرف Swift)۔ ہر ایک کی کارکردگی، فارمیٹنگ اور Unified Logging System کے ساتھ مطابقت کے لحاظ سے اپنی خصوصیات ہیں۔

NSLog — کلاسک لاگنگ

NSLog Foundation کا ایک فنکشن ہے، جو Objective-C اور Swift میں دستیاب ہے۔ NSLog ٹائم اسٹیمپ، پروسیس نام اور PID کے ساتھ پیغام آؤٹ پٹ کرتا ہے۔ نقصانات: NSLog سسٹم بفر میں ہم آہنگی سے لکھتا ہے، لکھنے کے دوران موجودہ تھریڈ کو بلاک کرتا ہے۔ بار بار کالز کے ساتھ (مثلاً، لوپ میں)، NSLog نمایاں تاخیر پیدا کرتا ہے۔ Apple نئے پروجیکٹس کے لیے NSLog کی سفارش نہیں کرتا، لیکن یہ پرانے کوڈ اور تیسرے فریق کی لائبریریوں کے ساتھ مطابقت رکھتا ہے۔

os_log — جدید معیار

os_log os.framework کا ایک API ہے، جو iOS 10 میں متعارف کرایا گیا۔ os_log غیر متزامن ہے: پیغام قطار میں لگایا جاتا ہے اور کالنگ تھریڈ کو بلاک کیے بغیر بفر میں لکھا جاتا ہے۔ WWDC 2016 کے مطابق، زیادہ بوجھ والے منظرناموں میں os_log NSLog سے 50 گنا تیز ہے۔ os_log متحرک کنٹرول بھی سپورٹ کرتا ہے: DEBUG سطح کے پیغامات صرف Debug بلڈ میں جمع کیے جاتے ہیں، اور Release میں بغیر کسی اوور ہیڈ کے نظر انداز کر دیے جاتے ہیں۔

print() — صرف Swift آؤٹ پٹ

print() Swift میں سب سے آسان آؤٹ پٹ طریقہ ہے۔ print stdout (معیاری آؤٹ پٹ) میں لکھتا ہے، جسے Xcode کنسول میں ری ڈائریکٹ کرتا ہے۔ print میٹا ڈیٹا (وقت، سطح) شامل نہیں کرتا، لیکن stdout بفرنگ کو سپورٹ کرتا ہے۔ فوری ڈیبگنگ کے لیے، print ایک آسان ٹول ہے، لیکن مستقل لاگنگ کے لیے یہ فعالیت اور کنٹرول میں os_log سے پیچھے ہے۔

swift
import os.log

// NSLog — قدیم، مسدود
NSLog("Application started")

// os_log — تجویز کردہ، غیر متزامن
let log = OSLog(
    subsystem: "com.myapp",
    category: "lifecycle"
)
os_log("Application started", log: log)

// print — تیز Swift آؤٹ پٹ
print("Application started")

Unified Logging: زمرے، سطحیں اور ذیلی نظام

Unified Logging System (ULS) Apple کا اینڈ ٹو اینڈ لاگنگ انفراسٹرکچر ہے، جو iOS 10 اور macOS Sierra میں متعارف کرایا گیا۔ ULS تمام سسٹم پروسیسز سے پیغامات کو ایک اسٹوریج میں جمع کرتا ہے جس میں Mac پر log کمانڈ لائن ٹول کے ذریعے دور دراز تک رسائی کی صلاحیت ہے۔ ڈویلپر ULS میں لکھنے کے لیے os_log اور پڑھنے کے لیے کنسول استعمال کرتے ہیں۔

ذیلی نظام اور زمرے

ہر OSLog کی شناخت subsystem (مثلاً com.myapp.network) اور category (مثلاً http، websocket) کے جوڑے سے ہوتی ہے۔ ذیلی نظام ایپلیکیشن ڈومین ہے (ایک ایپ کے مختلف ماڈیولز کے لیے متعدد ذیلی نظام ہو سکتے ہیں)۔ زمرہ ذیلی نظام کے اندر ایک جزو ہے۔ subsystem + category کا امتزاج کنسول اور log collect میں لچکدار لاگ فلٹرنگ کی اجازت دیتا ہے۔

OSLog لاگنگ کی سطحیں

سطحOSLogTypeکنسول ڈسپلےRelease میں جمع
Default.defaultہمیشہہاں
Info.infoos_log UI فعال ہونے پرہاں
Debug.debugصرف Debug بلڈ میںنہیں
Error.errorہمیشہ سرخ لیبل کے ساتھہاں
Fault.faultہمیشہ جامنی لیبل کے ساتھہاں

log collect — دور دراز لاگ جمع کرنا

Mac پر log collect کمانڈ منسلک iOS ڈیوائس سے محفوظ شدہ لاگ کو .logarchive فائل میں جمع کرتا ہے۔ اس فائل کو Mac پر Console.app میں کھول کر تفصیلی تجزیہ کیا جا سکتا ہے، جس میں os_log پیغامات، کریش لاگ اور سسٹم تشخیص شامل ہیں۔ ڈیوائس پر جمع کرنے کو فعال کرنے کے لیے، ڈیولپر موڈ کو فعال کرنا اور ڈیوائس کو USB کے ذریعے منسلک کرنا ضروری ہے۔

کنسول کے ساتھ کام: مرحلہ وار ڈیبگنگ اور کریش لاگ تجزیہ

کنسول کے ساتھ عملی کام میں تین اہم منظرنامے شامل ہیں: ڈویلپمنٹ کے دوران فعال لاگنگ، کریش کے بعد کریش لاگ تجزیہ اور .logarchive کے ذریعے دور دراز تشخیص۔ ہر منظرنامے کے لیے ٹولز اور سیٹنگز کا ایک بہترین سیٹ ہے۔

ڈویلپمنٹ کے لیے کنسول سیٹ اپ

ہر ایپلیکیشن ماڈیول کے لیے سطحوں کے ساتھ ایک علیحدہ OSLog بنانے کی سفارش کی جاتی ہے: debug (تفصیلی ڈیبگنگ)، info (اہم حالت کی منتقلی)، error (استثنا اور ناکامیاں)۔ Xcode کنسول میں، اپنی ایپلیکیشن کے سب سسٹم کے مطابق فلٹرنگ کو فعال کریں تاکہ سسٹم کے پیغامات کو خارج کیا جا سکے جو شور پیدا کرتے ہیں اور ایپ منطق سے توجہ ہٹاتے ہیں۔

کریش لاگ تجزیہ

جب ایپ کریش ہوتی ہے، Xcode خود بخود عملدرآمد روک دیتا ہے اور کنسول میں مکمل اسٹیک ٹریس کے ساتھ وہ تھریڈ دکھاتا ہے جہاں کریش ہوا۔ کریش لاگ کی پہلی لائن میں استثنا کی قسم (NSException، EXC_BAD_ACCESS) اور وجہ ہوتی ہے۔ اسٹیک ٹریس کو نیچے سے اوپر تک پڑھیں: آخری کال کیا گیا طریقہ کریش کا مقام ہے۔ خفیہ کردہ پتوں کے لیے (Release میں)، dSYM کے ذریعے symbolication ضروری ہے۔

swift
// OSLog کی ماڈیولر ترتیب کی مثال
extension OSLog {
    static let uiLifecycle = OSLog(
        subsystem: "com.myapp.ui",
        category: "lifecycle"
    )
    static let network = OSLog(
        subsystem: "com.myapp.network",
        category: "http"
    )
    static let database = OSLog(
        subsystem: "com.myapp.data",
        category: "core-data"
    )
}

// سطحوں کے ساتھ استعمال
os_log("View did load", log: .uiLifecycle, type: .debug)
os_log("HTTP 200 received", log: .network, type: .info)
os_log("Failed to save: \(error.localizedDescription)",
    log: .database, type: .error)

اعلیٰ خصوصیات: بریک پوائنٹ لاگ اور حسب ضرورت فارمیٹس

Xcode کنسول کئی اعلیٰ خصوصیات کو سپورٹ کرتا ہے جو سادہ لاگنگ سے آگے بڑھتی ہیں۔ بریک پوائنٹ لاگ آپ کو عملدرآمد روکے بغیر کنسول میں پیغام بھیجنے کی اجازت دیتے ہیں، اور Debugger Command میں LLDB کمانڈز آؤٹ پٹ فارمیٹنگ پر مکمل کنٹرول دیتے ہیں۔

بغیر رکے بریک پوائنٹ لاگ

آپ بریک پوائنٹ ترتیب دے سکتے ہیں تاکہ وہ کنسول میں پیغام بھیجے اور خود بخود عملدرآمد جاری رکھے۔ مطلوبہ لائن پر بریک پوائنٹ لگائیں، دایاں کلک کریں → Edit Breakpoint → Debugger Command شامل کریں: «po self» یا «expr @import UIKit» + Debugger Command: «po self.view»۔ Automatically continue after evaluating کو نشان زد کریں۔ شروع کرنے کے بعد، بریک پوائنٹ ہر بار لائن پر پہنچنے پر کمانڈ کا نتیجہ کنسول میں بھیجے گا، بغیر تھریڈ میں خلل ڈالے۔

کنسول میں LLDB کمانڈز

Xcode کنسول بریک پوائنٹ پر رکتے ہوئے صوابدیدی LLDB کمانڈز کے عملدرآمد کو سپورٹ کرتا ہے۔ po (print object) کسی آبجیکٹ کی تفصیل آؤٹ پٹ کرتا ہے، p (print) ابتدائی اقدار آؤٹ پٹ کرتا ہے، اور expr Swift/ObjC اظہارات پر عملدرآمد کرتا ہے۔ فارمیٹ شدہ آؤٹ پٹ کے لیے، p/CGRectGetWidth استعمال کریں۔ LLDB آؤٹ پٹ بریک پوائنٹ تک پہنچنے کے فوراً بعد کنسول میں ظاہر ہوتا ہے۔

swift
func processUserData(user: User) {
    // Debugger Command کے ساتھ بریک پوائنٹ:
    // po "User name: \(user.name)"
    // expr user.age = 30
    print("Processing user: \(user.name)")
}

// ترتیب کے ساتھ حسب ضرورت لاگنگ کی مثال
func trackMethodCall(
    file: String = #file,
    function: String = #function
) {
    os_log("[\(function)] called",
        log: .uiLifecycle, type: .debug)
}

Instruments کے ساتھ انضمام

Xcode کنسول Instruments — Xcode کے پروفائلنگ ٹول — کے ساتھ قریبی طور پر مربوط ہے۔ Product → Profile کے ذریعے Logging ٹیمپلیٹ کے ساتھ ایپ چلاتے وقت، تمام os_log پیغامات ٹائم اسٹیمپ کے ساتھ Instruments ٹریس میں ریکارڈ ہوتے ہیں۔ یہ آپ کو ایک ہی ٹائم لائن پر بیک وقت لاگ، کارکردگی اور سسٹم ایونٹس دیکھنے کی اجازت دیتا ہے، جو ریس کنڈیشنز اور کارکردگی میں کمی کی تشخیص کے لیے اہم ہے۔

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

NSLog اور os_log میں کیا فرق ہے؟

NSLog ہم آہنگ ہے، تھریڈ کو بلاک کرتا ہے اور ہمیشہ پیغام آؤٹ پٹ کرتا ہے۔ os_log غیر متزامن ہے، زیادہ بوجھ والے منظرناموں میں 50 گنا تیز ہے، زمروں کو سپورٹ کرتا ہے اور کارکردگی کے نقصان کے بغیر Release بلڈز میں ڈیبگ لیولز کو متحرک طور پر غیر فعال کرتا ہے۔

کنسول ایپ سے os_log کیوں نہیں دکھاتا؟

لاگنگ لیول چیک کریں: ڈیفالٹ کے طور پر، کنسول صرف default اور اوپر دکھاتا ہے۔ info اور debug دیکھنے کے لیے، Xcode کنسول میں os_log مینو کھولیں اور سکیم سیٹنگز میں Include Info Messages اور Include Debug Messages کو منتخب کریں (Edit Scheme → Run → Arguments → OS_ACTIVITY_MODE = debug)۔

شیئر کرنے کے لیے کنسول لاگ کو فائل میں کیسے محفوظ کریں؟

کنسول میں مطلوبہ پیغامات کو منتخب کریں، کاپی کریں (Cmd + C) اور کسی بھی ٹیکسٹ ایڈیٹر میں پیسٹ کریں۔ مکمل ڈمپ کے لیے، ٹرمینل کمانڈ استعمال کریں: sudo log collect --device --output /tmp/app_logs.logarchive — یہ iOS ڈیوائس سے تمام لاگ کو ساختہ فارمیٹ میں محفوظ کرتا ہے۔

Release بلڈ میں os_log کو کیسے فعال کریں؟

os_log قسم .default اور .error ڈیفالٹ کے طور پر Release میں کام کرتے ہیں۔ Release میں .info اور .debug کے لیے، آپ کو Xcode سکیم میں -OSLogPreferencesApp «$(PRODUCT_BUNDLE_IDENTIFIER):debug» لانچ آرگیومینٹ شامل کرنا ہوگا۔ اس آرگیومینٹ کے بغیر، ڈیبگ پیغامات Release میں جمع نہیں ہوتے، جس سے ڈیوائس کے وسائل بچتے ہیں۔

تاریخ میں مخصوص کریش لاگ کیسے تلاش کریں؟

Xcode میں Window → Organizer → Crashes کو کھولیں۔ آرگنائزر استثنا کی قسم کے مطابق گروپ کردہ، ٹیسٹرز کے ڈیوائسز سے جمع کردہ تمام کریش لاگ دکھاتا ہے۔ Symbolication کے لیے اس بلڈ سے .dSYM فائل کی ضرورت ہے جس میں کریش ہوا — Xcode خود بخود اسے ڈھونڈ لیتا ہے اگر آرکائیو دستیاب ہو۔

خلاصہ

  • کنسول Xcode — Debug Area میں NSLog، os_log، print اور کریش لاگ دیکھنے کا بلٹ ان ٹول
  • os_log — غیر متزامن تحریر، زمروں اور Unified Logging System سپورٹ کے ساتھ تجویز کردہ API
  • Unified Logging ماڈیولر لاگ تنظیم کے لیے ذیلی نظام اور زمرے فراہم کرتا ہے
  • بریک پوائنٹ لاگ ایپلیکیشن کو روکے بغیر کنسول میں پیغام بھیجتے ہیں
  • LLDB کمانڈز po، p، expr کنسول آؤٹ پٹ فارمیٹنگ پر مکمل کنٹرول دیتے ہیں
  • کریش لاگ تجزیہ کنسول میں استثنا سے شروع ہوتا ہے اور Release کے لیے dSYM کے ذریعے symbolication کی ضرورت ہوتی ہے
  • Instruments کے ساتھ انضمام ایک ٹائم لائن پر لاگ کو پروفائلنگ کے ساتھ جوڑنے کی اجازت دیتا ہے

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

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

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

مزید پڑھیں