مراقبة تطبيقات Swift: المقاييس والتنبيهات من الألف إلى الياء

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

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

ابدأ الدورة

مقدمة: لماذا تعتبر مراقبة تطبيقات Swift ضرورة

\n

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

\n\n

المقاييس الرئيسية لتطبيقات Swift

\n

تبدأ المراقبة بفهم ما يجب قياسه بالضبط. بالنسبة لتطبيقات Swift (iOS/macOS)، المقاييس الرئيسية هي:

\n
    \n
  • وقت التشغيل (Cold Start / Warm Start) — مؤشر الانطباع الأول للمستخدم.
  • \n
  • استخدام الذاكرة (Memory footprint) — منع أعطال نفاد الذاكرة (OOM).
  • \n
  • FPS (الإطارات في الثانية) — سلاسة الرسوم المتحركة والواجهة.
  • \n
  • طلبات الشبكة — وقت الاستجابة، عدد الأخطاء (4xx، 5xx).
  • \n
  • سجلات الأعطال — عدد ونوع حالات تعطل التطبيق.
  • \n
\n

يمكن جمع هذه المقاييس باستخدام الأدوات المدمجة (Xcode Metrics) أو باستخدام SDKs تابعة لجهات خارجية (مثل Firebase Crashlytics، New Relic، Datadog). ومع ذلك، للتحكم الكامل، من الأفضل استخدام أدواتك الخاصة.

\n\n

مثال: جمع وقت التشغيل باستخدام SwiftMetrics

\n

لجمع المقاييس في Swift، من المناسب استخدام مكتبة SwiftMetrics (جزء من حزمة swift-metrics). قم بتثبيتها عبر Swift Package Manager:

\n
// Package.swift\ndependencies: [\n    .package(url: "https://github.com/apple/swift-metrics.git", from: "2.4.0")\n]
\n

مثال كود لقياس وقت التشغيل البارد:

\n
import Metrics\n\nclass AppMetrics {\n    static let shared = AppMetrics()\n    \n    func recordLaunchTime() {\n        let startTime = CFAbsoluteTimeGetCurrent()\n        // تهيئة التطبيق...\n        let elapsed = (CFAbsoluteTimeGetCurrent() - startTime) * 1000 // بالميلي ثانية\n        Counter(label: "app.launch_time_ms").increment(by: Int(elapsed))\n    }\n}
\n

يقوم هذا الكود بإنشاء عداد يمكن إرساله إلى نظام المراقبة (مثل Prometheus أو Grafana).

\n\n

إعداد التنبيهات: من رد الفعل إلى الاستباقية

\n

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

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

لننظر في إعداد تنبيه محلي لتجاوز الذاكرة باستخدام os.log و NotificationCenter:

\n
import Foundation\nimport os.log\n\nclass MemoryMonitor {\n    static let shared = MemoryMonitor()\n    private let memoryWarningThreshold: UInt64 = 500_000_000 // 500 MB\n    \n    func startMonitoring() {\n        NotificationCenter.default.addObserver(\n            self,\n            selector: #selector(handleMemoryWarning),\n            name: UIApplication.didReceiveMemoryWarningNotification,\n            object: nil\n        )\n    }\n    \n    @objc private func handleMemoryWarning() {\n        let memoryUsed = reportMemoryUsage()\n        if memoryUsed > memoryWarningThreshold {\n            os_log(.error, "استخدام الذاكرة حرج: %llu MB", memoryUsed / 1_000_000)\n            // هنا يمكن إرسال تنبيه إلى الخادم أو عرضه للمستخدم\n        }\n    }\n    \n    private func reportMemoryUsage() -> UInt6                

المدونات

توصيات الكتب