هل يعمل تطبيقك بشكل مثالي؟ دعنا نتحقق
\n\nهل سبق لك أن أطلقت تطبيق Swift في الإنتاج وتوسلت ألا يتعطل؟ أنا فعلت. وفي كل مرة يكتب فيها مستخدم "لقد توقف"، كنت أشعر وكأنني قطة عمياء. التسجيل والمراقبة هما العينان والأذنان اللتان تحولان الفوضى إلى نظام. بدونهما، تخمن ما الخطأ الذي حدث. معهما، ترى كل خطوة.
\n\nفي هذه المقالة، سنشرح كيفية إعداد مراقبة تطبيقات Swift بحيث تنام بسلام. لا نظرية جافة - فقط كود حي، حالات واقعية، وحيل جمعتها على مر السنين. هيا بنا!
\n\nلماذا التسجيل في Swift ليس مجرد print()
\n\nالاندفاع الأول لأي مطور هو وضع print("كل شيء معطل هنا") في كل منعطف. وهذا يعمل... حتى تقوم بإصدار التطبيق. في الإنتاج، يختفي print في الفراغ، ويبقى المستخدم وحيدًا مع الخلل. نحتاج إلى شيء أكثر.
تسجيل تطبيقات Swift الحديث هو بيانات منظمة، مستويات أهمية، وإمكانية جمع عن بعد. تقدم Apple أداة قوية - OSLog. إنها خفيفة وسريعة ومضمنة مباشرة في النظام. دعنا نرى كيف نروضها.
\n\nOSLog: المستوى الأساسي
\n\nنقوم بتضمين الإطار وننشئ مسجلاً:
\n\nimport OSLog\n\nlet logger = Logger(\n subsystem: "com.pythonlib.monitoring",\n category: "network"\n)\n\nfunc fetchUserData() {\n logger.info("بدء تحميل بيانات المستخدم")\n // ... كود الطلب ...\n logger.debug("تم تلقي الرد: \\(response.statusCode)")\n}\n\nلاحظ subsystem و category. هذه هي علاماتك للتصفية. عندما يكون لديك 50 وحدة، ستتمكن من تصفية سجلات الشبكة فقط أو سجلات قاعدة البيانات فقط - بدون ضوضاء زائدة.
مستويات التسجيل: متى تصرخ ومتى تهمس
\n\nيدعم OSLog ستة مستويات. إليك كيفية استخدامها:
\n\n- \n
debug- للتطوير، يتم تعطيله في الإصدار (إذا لم يتم تمكينه بشكل صريح). \n info- معلومات مفيدة لا تزعج وحدة التحكم. \n notice- أحداث مهمة، مثل بدء التشغيل الناجح. \n error- أخطاء يمكن معالجتها. \n fault- أعطال حرجة قد يتعطل بعدها التطبيق. \n
مثال مع خطأ حقيقي:
\n\nfunc handleApiError(_ error: Error) {\n logger.error("خطأ API: \\(error.localizedDescription, privacy: .public)")\n // privacy: .public - لرؤية النص في السجلات، وإلا فسيتم إخفاؤه\n}\n\nمراقبة تطبيقات Swift: المقاييس والأداء
\n\nالسجلات هي الماضي. مراقبة تطبيقات Swift هي الحاضر. تريد أن تعرف ما يحدث الآن: كم من الذاكرة يستهلك كودك، هل الرسوم المتحركة بطيئة، هل ينخفض معدل الإطارات.
\n\nتوفر Apple MetricKit - إطار لجمع التشخيصات على أجهزة المستخدمين. يجمع تقارير الأعطال، بيانات البطارية، ومقاييس بدء التشغيل. ولكن للمراقبة الكاملة، غالبًا ما يتم توصيل خدمات خارجية.
\n\nتوصيل Crashlytics (Firebase) - سريع ومؤلم
\n\nيظل Crashlytics معيار الصناعة. إليك الإعداد الأدنى:
\n\nimport FirebaseCrashlytics\n\n// في مكان ما عند بدء التطبيق\nCrashlytics.crashlytics().setUserID("user_123")\nCrashlytics.crashlytics().setCustomValue(true, forKey: "is_premium")\n\n// تسجيل الأخطاء غير المميتة\ndo {\n try riskyOperation()\n} catch {\n Crashlytics.crashlytics().record(error: error)\n logger.error("خطأ غير مميت: \\(error)")\n}\n\nنقطة مهمة: لا تسجل البيانات الشخصية للمستخدم دون موافقته. استخدم setUserID فقط إذا كان لديك معرف مجهول المصدر.