سؤال

عندما أقوم بتطوير الويب، استخدم مسجل مخصص مصنوعا مع الأخطاء القاتلة واللحفلات إلى ملف ويعرض رسالة إلى المستخدم. يمكن أن ألواح أحيانا لمعرفة ما إذا كان الملف قد تغير، مما يعني أن بعض المستخدم واجه خطأ ويمكنني أن أحفر لمعرفة ما واجهوه.

أود شيئا مشابها في iPhone، مع بعض التحذير:

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

بعض الروابط ذات الصلة

يبدو أن هناك مجموعة أدوات شائعة للقيام بذلك - كيف تتعامل مع هذا؟

التحديث أكتوبر 2011] كانت هناك بعض التطورات، من نضج متفاوتة ...

  • Plcrashreporter..
  • كوينسي يجلس على رأس plc.
  • bugsense. مراسل تحطم تجاري.
  • croittercism. التعطل وإعداد التقارير (بعض الحزم المجانية، بعض الأجور).
  • رحلة تجريبية الآن لديه SDK يمسك تعطل (ولكن ليس حتى الآن لتطبيقات متجر التطبيقات، فقط تطبيقات Dev).
  • مثل رحلة الطيران، الهوكي يهدف إلى الجمع بين توزيع مخصص مع تقارير تحطم الطائرة.
هل كانت مفيدة؟

المحلول

إليك ما نفعله:

  • دع iPhone يتعامل مع مقالب تحطمها الخاصة من خلال آليات متجر التطبيقات الحالية. تحديث: بعد العثور على اتصال iTunes أن تكون غير موثوقة في توفير تقارير التحطم، أوصي باستخدام نسيج / تسامح, ، أو منافس مثل croittercism. أو شريط القوائم.
  • لا يحتوي منتجنا المنصوص عنه أي أثر في، ويبدو أن هذا متسق مع ما تفعله تطبيقات iPhone الأخرى.
  • إذا تم الإبلاغ عن خطأ، فنحن نسترجعه باستخدام بناء تراكب.

بتفاصيل اكثر:

  • نحدد وحدات الماكرو إلى تتبع NSLOG في العديد من مستويات مختلفة من الحبيبية.
  • استخدم إعدادات إنشاء XCODE لتغيير مستوى التتبع، والذي يتحكم في مقدار التتبع الذي يتم تجميعه في المنتج، على سبيل المثال، هناك تكوينات إنشاء وتصحيح التصحيح.
  • إذا لم يتم تعريف مستوى التتبع، فسوف نعرض تتبع كامل في جهاز محاكاة، ولا يوجد أي أثر عند تشغيله على جهاز حقيقي.

لقد قمت بتضمين رمز المثال أدناه إظهار كيف كتبنا هذا، وما يشبه الإخراج.

نحدد مستويات تتبع مختلفة متعددة، لذلك يمكن للمطورين تحديد خطوط النزرة مهمة، ويمكنهم تصفية تفاصيل المستوى الأدنى إذا كانوا يريدون ذلك.

رمز المثال:

- (void)myMethod:(NSObject *)xiObj
{
  TRC_ENTRY;
  TRC_DBG(@"Boring low level stuff");
  TRC_NRM(@"Higher level trace for more important info");
  TRC_ALT(@"Really important trace, something bad is happening");
  TRC_ERR(@"Error, this indicates a coding bug or unexpected condition");
  TRC_EXIT;
}

مثال إخراج التتبع:

2009-09-11 14:22:48.051 MyApp[3122:207] ENTRY:+[MyClass myMethod:]
2009-09-11 14:22:48.063 MyApp[3122:207] DEBUG:+[MyClass myMethod:]:Boring low level stuff
2009-09-11 14:22:48.063 MyApp[3122:207] NORMAL:+[MyClass myMethod:]:Higher level trace for more important info
2009-09-11 14:22:48.063 MyApp[3122:207] ALERT:+[MyClass myMethod:]:Really important trace, something bad is happening
2009-09-11 14:22:48.063 MyApp[3122:207] ERROR:+[MyClass myMethod:]:Error, this indicates a coding bug or unexpected condition
2009-09-11 14:22:48.073 MyApp[3122:207] EXIT:+[MyClass myMethod:]

تعريفات تتبع لدينا:

#ifndef TRC_LEVEL
#if TARGET_IPHONE_SIMULATOR != 0
#define TRC_LEVEL 0
#else
#define TRC_LEVEL 5
#endif
#endif

/*****************************************************************************/
/* Entry/exit trace macros                                                   */
/*****************************************************************************/
#if TRC_LEVEL == 0
#define TRC_ENTRY    NSLog(@"ENTRY: %s:%d:", __PRETTY_FUNCTION__,__LINE__);
#define TRC_EXIT     NSLog(@"EXIT:  %s:%d:", __PRETTY_FUNCTION__,__LINE__);
#else
#define TRC_ENTRY
#define TRC_EXIT
#endif

/*****************************************************************************/
/* Debug trace macros                                                        */
/*****************************************************************************/
#if (TRC_LEVEL <= 1)
#define TRC_DBG(A, ...) NSLog(@"DEBUG: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_DBG(A, ...)
#endif

#if (TRC_LEVEL <= 2)
#define TRC_NRM(A, ...) NSLog(@"NORMAL:%s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_NRM(A, ...)
#endif

#if (TRC_LEVEL <= 3)
#define TRC_ALT(A, ...) NSLog(@"ALERT: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_ALT(A, ...)
#endif

#if (TRC_LEVEL <= 4)
#define TRC_ERR(A, ...) NSLog(@"ERROR: %s:%d:%@", __PRETTY_FUNCTION__,__LINE__,[NSString stringWithFormat:A, ## __VA_ARGS__]);
#else
#define TRC_ERR(A, ...)
#endif

إعدادات Xcode:

في إعدادات إنشاء XCODE، اختر "إضافة إعداد محدد من قبل المستخدم" (بالنقر فوق COG LIXT COG في أسفل يسار شاشة تكوين Build)، ثم حدد إعداد جديد يسمى GCC_PREPROCESSOR_DEFINITIONS وإعطائها القيمة TRC_LEVEL=0.

المجموع الفرعي الوحيد هو أن Xcode لا يعرف القيام ببناء نظيف إذا قمت بتغيير هذا الإعداد، لذلك تذكر أن تقوم بالتنظيف يدويا إذا قمت بتغييره.

نصائح أخرى

تقوم Apple تلقائيا بجمع سجلات الأعطال من المستخدمين لك، ويمكنك تنزيلها من iTunes Connect.

إذا لم يكن هذا كافيا بالنسبة لك، فأنا لست على علم بأجهزة مجموعة لكنني لا أريد لفة شيء بمفردي، شخصيا. يبدو أن الكثير من الجهود الكبيرة لتطوير شيء قوي، قد يرفع مخاوف الخصوصية، وفي النهاية، مع تطبيقات 100،000K في متجر التطبيقات، كم عدد المستخدمين الذين سيستخدمون طلبك مرة أخرى بعد اكتشافها؟

هل تعرف أن crashreporter لفون موجود؟

هناك مخزن على جيثب الذي تم تجريبي هذا الكود.

يحتوي على بعض الميزات الرائعة مثل امتياز تتبع المكدس إلى التعليمات البرمجية الخاصة بك وتدير بعض الأشياء المحددة GIT مثل Gales الإصدار.

أنا أوصي بشدة روبي هانسون CocoalberamberJack: https://github.com/robbiehanson/cocoalumberjack.

إنها مرنة للغاية وقوية ربما تكون مفرطة بعض الشيء إذا تعرضت للإيذاء. يدعم مستويات مختلفة من التسجيل. يمكن تشغيل تسجيل الدخول إلى الملفات بضع خطوط من التعليمات البرمجية وحتى إرسالها عبر الشبكة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top