تسجيل السجلات في تطبيقات Swift: أفضل الممارسات للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تسجيل السجلات في تطبيقات Swift: أفضل الممارسات للمبتدئين

\n\n

تسجيل السجلات ليس مجرد كتابة رسائل إلى وحدة التحكم. بالنسبة لمطور iOS/macOS المبتدئ، يمكن لنظام تسجيل سليم أن يكون شريان حياة أثناء التصحيح والمراقبة وتحليل أداء التطبيق. في هذه المقالة، سنستعرض أفضل ممارسات تسجيل السجلات في Swift، من الأساليب البسيطة إلى الأدوات الاحترافية.

\n\n

لماذا من المهم تسجيل السجلات بشكل صحيح؟

\n

عندما يعمل تطبيقك على جهاز المستخدم أو على الخادم، لا يمكنك ببساطة "النظر لمعرفة ما حدث خطأ". السجلات هي المصدر الوحيد للمعلومات حول سلوك البرنامج في بيئة الإنتاج. يساعد تسجيل السجلات بشكل صحيح في:

\n
    \n
  • العثور على الأخطاء وإصلاحها بسرعة
  • \n
  • تتبع تسلسل الأحداث
  • \n
  • تحليل الأداء
  • \n
  • فهم إجراءات المستخدم (مع مراعاة الخصوصية)
  • \n
\n\n

مستويات تسجيل السجلات: تصحيح بدون فوضى

\n

أحد الأخطاء الرئيسية للمبتدئين هو استخدام print() لكل شيء. بدلاً من ذلك، قم بإدخال نظام لمستويات التسجيل. المستويات القياسية (حسب الأهمية المتزايدة):

\n
    \n
  • Debug — معلومات تفصيلية للمطور (قيم المتغيرات، استدعاءات الدوال)
  • \n
  • Info — أحداث مهمة (تحميل شاشة، طلب ناجح)
  • \n
  • Warning — مشاكل محتملة (API قديم، قيمة غير متوقعة)
  • \n
  • Error — أعطال حرجة تتطلب الانتباه
  • \n
\n\n

مثال على تطبيق بسيط في Swift:

\n
enum LogLevel: String {\n    case debug = "🔍 DEBUG"\n    case info = "ℹ️ INFO"\n    case warning = "⚠️ WARNING"\n    case error = "❌ ERROR"\n}\n\nfunc log(_ message: String, level: LogLevel = .debug, file: String = #file, function: String = #function, line: Int = #line) {\n    #if DEBUG\n    let fileName = (file as NSString).lastPathComponent\n    print("[\\(level.rawValue)] [\\(fileName):\\(line)] \\(function) -> \\(message)")\n    #endif\n}\n
\n\n

استخدام OSLog (نظام التسجيل الموحد)

\n

بدءًا من iOS 10 و macOS Sierra، توصي Apple باستخدام OSLog بدلاً من NSLog و print(). هذا نظام تسجيل مدمج يقوم بـ:

\n
    \n
  • تصنيف الرسائل تلقائيًا
  • \n
  • دعم التفعيل/التعطيل الديناميكي للمستويات
  • \n
  • العمل في بيئة الإنتاج دون تقليل الأداء
  • \n
  • التكامل مع Instruments و Console.app
  • \n
\n\n

الإعداد الأساسي لـ OSLog:

\n
import OSLog\n\nextension Logger {\n    static let network = Logger(subsystem: "com.yourapp.network", category: "network")\n    static let ui = Logger(subsystem: "com.yourapp.ui", category: "ui")\n    static let database = Logger(subsystem: "com.yourapp.database", category: "database")\n}\n\n// الاستخدام:\nLogger.network.info("تم تنفيذ طلب API بنجاح")\nLogger.ui.error("خطأ في عرض وحدة التحكم: \\(error.localizedDescription)")\n
\n\n

ميزة OSLog هي أن رسائل المستوى debug و info يتم تعطيلها تلقائيًا في الإصدار النهائي إذا لم تقم بتكوين خلاف ذلك. هذا يمنع ازدحام سجلات الإنتاج.

\n\n

أطر عمل لتسجيل السجلات المتقدم

\n

إذا كنت بحاجة إلى إمكانيات إضافية (الكتابة إلى ملف، تدوير السجلات، التجميع عن بُعد)، فانظر إلى المكتبات الشائعة:

\n\n

CocoaLumberjack

\n

واحد من أكثر الأطر شيوعًا لـ Swift/Objective-C. يدعم:

\n
    \n
  • عدة "مستقبلات" (وحدة التحكم، ملف، خادم بعيد)
  • \n
  • تسجيل غير متزامن
  • \n
  • تنسيق الرسائل
  • \n
  • تغيير ديناميكي لمستوى التسجيل
  • \n
\n\n
import CocoaLumberjack\n\n// الإعداد في AppDelegate\nDDLog.add(DDOSLogger.sharedInstance) // وحدة التحكم\nlet fileLogger = DDFileLogger()\                

المدونات

توصيات الكتب