تسجيل الدخول في تطبيقات Swift: أفضل الممارسات التطبيقية

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

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

ابدأ الدورة

تسجيل الدخول في تطبيقات Swift: أفضل الممارسات التطبيقية

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



لماذا print() سيء لبيئة الإنتاج

يستخدم العديد من المطورين المبتدئين print() لتصحيح الأخطاء. ومع ذلك، في تطبيقات الإنتاج، يؤدي ذلك إلى مشاكل:

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

بدلاً من print()، استخدم إطار النظام os_log (التسجيل الموحد) أو المكتبات الخارجية مثل SwiftyBeaver.



أفضل ممارسة #1: استخدام os_log (نظام التسجيل الموحد)

بدءًا من iOS 10 / macOS 10.12، توصي Apple باستخدام os_log من إطار OSLog. هذه آلية مدمجة تعمل بشكل غير متزامن، ولا تؤثر على الأداء، وتجمع البيانات الوصفية تلقائيًا.



الإعداد الأساسي لـ os_log

import OSLog

// إنشاء مسجل لوحدة "Network"let networkLogger = Logger(subsystem: "com.yourapp.network", category: "HTTP")

// تسجيل مستويات مختلفةnetworkLogger.debug("تم إرسال الطلب: \\(url)")networkLogger.info("تم استلام الرد: \\(statusCode)")networkLogger.error("خطأ في الاتصال: \\(error.localizedDescription)")networkLogger.fault("خطأ حرج: فقدان البيانات")


مزايا os_log:

  • غير متزامن: لا يمنع الخيط الرئيسي.
  • المستويات: debug، info، error، fault — يمكن تصفيتها في وحدة تحكم Xcode.
  • الأمان: يتم إخفاء البيانات الحساسة تلقائيًا في إصدارات الإصدار.
  • التكامل مع Console.app: جميع السجلات متاحة على جهاز المستخدم (بإذنه).


مستويات ديناميكية لتصحيح الأخطاء

لتسهيل الأمر، يمكن إنشاء غلاف يسمح بتشغيل/إيقاف سجلات التصحيح حسب مخطط البناء:

import OSLog

struct AppLogger { private static let subsystem = "com.yourapp.main" static let general = Logger(subsystem: subsystem, category: "General") static let network = Logger(subsystem: subsystem, category: "Network") static let database = Logger(subsystem: subsystem, category: "Database") static func debug(_ message: String, file: String = #file, function: String = #function, line: Int = #line) { #if DEBUG let fileName = (file as NSString).lastPathComponent general.debug("[\\(fileName):\\(line)] \\(function) - \\(message)") #endif }}

// الاستخدامAppLogger.debug("المستخدم ضغط على زر تسجيل الدخول")AppLogger.network.info("بدأ استدعاء API")


أفضل ممارسة #2: SwiftyBeaver — تسجيل مرن للمشاريع المعقدة

إذا كنت بحاجة إلى وظائف متقدمة (تسجيل في ملف، إرسال إلى خادم، إخراج ملون في وحدة التحكم)، فانظر إلى SwiftyBeaver. إنها واحدة من أشهر المكتبات لتسجيل الدخول في Swift.



التثبيت عبر Swift Package Manager

// في Package.swift أو عبر Xcode -> File -> Add Packages// الرابط: ht                

المدونات

توصيات الكتب