استخدم LogBrew Swift 0.1.6 أو أحدث. واستخدم LogBrew CLI الأصلي 0.1.24 أو
أحدث لرفع ملفات بناء التصحيح.
خطّط لحدود الالتقاط
افحص متى يستطيع تطبيقك إعادة إرسال كل نوع من أنواع الأعطال.
اضبط قيمة الإصدار قبل البناء. يجب أن تحدد إصدار التطبيق ورقم البناء. استخدم
القيمة نفسها في الـ SDK ورفع dSYM وعامل تصفية المشكلات.
لا ترفق بيانات المستخدم أو نصوص الطلبات أو الترويسات ببيانات التعطّل الوصفية.
أضف منتج الأعطال
أولًا، أعدّ القياس عن بُعد عبر SDK لتطبيقك. تستخدم إعادة الإرسالclient وtransport نفسيهما.
أضف الـ SDK العام عبر Swift Package Manager.
LogBrew لإرسال بيانات القياس عن بُعد. وأضف LogBrewCrash فقط
عندما يفعّل التطبيق صراحةً التقاط الأعطال الأصلية أو التجمّد.
يدعم تكامل الالتقاط iOS 15 أو أحدث. احتفظ بكائن التقاط واحد يملكه التطبيق،
لأن معالجات الأعطال القاتلة الأصلية تعمل على مستوى العملية كلها.
اضبط هوية واحدة مطابقة تمامًا
استخدم المشروع والإصدار والبيئة والخدمة نفسها في إعداد وقت التشغيل وفي رفع ملفات البناء. لا يشتق LogBrew هذه القيم ولا يستبدلها.NativeCrashConfiguration على حدّين اختياريين:
القيمة خارج نطاقها تجعل الإعدادات تطرح
crash_invalid_configuration.
فعّل التقاط التجمّد
يكون التقاط التجمّد متوقفًا عندما تكون قيمةwatchdog هي nil. لتفعيله،
استبدل تعريف watchdog أعلاه قبل أن تستدعي install():
artifactIdentity.
ومن دونه تطرح الإعدادات crash_invalid_configuration.
احتفظ بكائن crashCapture واحد طوال عمر العملية. لا يمكن تثبيت كائن التقاط
ثانٍ، إذ يطرح استدعاء install() الخاص به crash_capture_owned. لتغيير
الحد، استخدم القيمة الجديدة عند التشغيل التالي للتطبيق.
يُعاد إرسال التجمّد الذي تعافى منه التطبيق مع ضبط crash.handled على true.
ويُعاد إرسال التجمّد الجاري الذي انتهى بإنهاء العملية مع ضبط crash.handled
على false.
يتضمن الشكلان كلاهما بيانات وصفية رقمية durationMs. ويحتفظان بهوية ملف
البناء نفسها التي تستخدمها إطارات الأعطال القاتلة.
يتوقف المراقب (watchdog) مؤقتًا عندما يكون التطبيق غير نشط أو يعمل تحت مصحّح
أخطاء. ويوقف الالتقاط أيضًا أثناء الضغط الحراري الشديد.
قد يجعل الحد القصير العمل العادي على الخيط الرئيسي يظهر في التقارير كأنه
تجمّد. اختبر الحد بإعدادات البناء التي تطلقها. تصف الحالة «معالَج» التعافي،
ولا تجعل المشكلة محلولة. التجمّد المعالَج أوقف استجابة الواجهة مع ذلك، فراجعه أيضًا.
أعِد الإرسال بعد التشغيل
بعد تثبيت الالتقاط، أعِد إرسال التقارير المعلّقة عبر عميل الـ SDK.maxReplayBytes. افحص الأعداد الثلاثة كلها. عدد التقارير المعلّقة الصفري وحده
لا يثبت التسليم.
فعّل التسليم الدائم قبل إعادة الإرسال عندما يجب أن ينجو الطلب الفاشل من إعادة
تشغيل أخرى. لا تستدعِ purge() أثناء التعافي المعتاد من مشكلات الشبكة أو
المصادقة.
ارفع ملف dSYM المطابق
أنشئ أرشيف التطبيق مع تفعيل معلومات التصحيح. احتفظ بملف dSYM من البناء نفسه الذي يشغّله المستخدمون. افحص معرّفات UUID للصور (image) فيه.--expect-image-uuid لكل معمارية مطلوبة. يفشل الأمر عندما تختلف مجموعة
معرّفات UUID المكتشفة عن المجموعة المتوقعة.
افحص وصول الحساب. ثم شغّل الأمر نفسه دون --dry-run.
status في JSON النتيجة:
يمكن لجهاز البناء أن يرفع باستخدام مفتاح ملفات البناء الخاص بالمشروع في
LOGBREW_TOKEN بدل وصول الحساب. أنشئ المفتاح كما في
إنشاء مفتاح ملفات البناء.
يعرض هذا الرفع uploaded. تأكد من كل هوية لاحقًا باستخدام وصول الحساب:
status: "found" يؤكد وجود ملف البناء. وstatus: "missing" يعني أن LogBrew
ليس لديه ملف بناء لتلك الهوية.
تعتمد المطابقة على UUID الصورة وهوية ملف البناء الكاملة، لا على اسم ملف
المصدر. قد تختلف معرّفات UUID عند إعادة بناء المصدر نفسه. ارفع حزمة dSYM
المطابقة تمامًا، لا مجلد البناء كله.
تحقّق من القراءة المستضافة
صفِّ قائمة المشكلات بنطاق وقت التشغيل نفسه. يختار هذا المثال المشكلاتunresolved. لا تظهر المشكلة المحلولة أو المؤرشفة.
symbolication. يعرض هذا المثال حقولًا مختارة من
مشكلة فيها إطار محلَّل، لا الاستجابة الكاملة.
اقرأ أدلة التعطّل
لكل إطار حقلstatus خاص به. يستخدم الحقل symbolication.status القيم
نفسها:
أبقِ الإطار غير المحلَّل غير محلَّل في ملاحظاتك. لا تبلّغ عنه كأنه مكدّس فارغ.
يحلّل LogBrew الإطارات عندما تقرأ المشكلة. يمكن لملف dSYM مرفوع لاحقًا أن
يحلّل إطارات حدث سابق. ولا يمكنه إضافة إطارات لم يلتقطها الحدث.
يضيّق إطار التطبيق نطاق البحث في الشيفرة، لكنه لا يثبت السبب. للاطلاع على
الـ Breadcrumbs وسلسلة الاستثناءات وأدلة التتبّع، اقرأ تحقيق المشكلة:
source: "symbolicated" جاء من ملف بناء
مرفوع. والإطار الذي فيه source: "captured" هو الموضع الذي أرسله التطبيق.
راجع التحقيق في مشكلة لمعرفة حقول الاستجابة.
احتفظ بنطاق المشروع والإصدار والبيئة والخدمة كاملًا في كل قراءة. لا توسّع
بحثًا فاشلًا ليشمل مشاريع أخرى.
تحقّق من إعداد بيئة الإنتاج
استخدم عطلًا تجريبيًا معتمدًا في البناء المنشور. لا تستخدم أبدًا إجراءً من عميل محفّزًا. افحص كل بند بالترتيب، وتوقف عند أول فشل:- هوية وقت التشغيل تطابق هوية ملف البناء المرفوع.
- تشغيل لاحق يعيد إرسال حدث واحد مؤكَّد الاستلام، مع صفر تقارير متجاهَلة وصفر تقارير معلّقة.
- تعيد قائمة المشكلات المحددة النطاق المشكلةَ التجريبية بحالة المعالجة المتوقعة.
- يُحلَّل إطار التطبيق المتوقع.
- لا يضيف تشغيل نظيف لاحق حدوثًا آخر.
تعافَ بأمان
للتحقيق العام في المشكلات، استخدم
التحقيق في مشكلة باستخدام API.
