يُعد التصحيح والتشخيص الاحترافي لتطبيقات الجوال مهارة أساسية لتطوير تطبيقات الجوال، تتيح العثور على الأخطاء في الكود وإصلاحها. وفقًا لـ JetBrains Developer Ecosystem (2024)، يقضي المطورون ما يصل إلى 30% من وقت عملهم في تصحيح الكود. طورت IT Sectr ممارساتها الخاصة في التشخيص التي تقلل وقت البحث عن الأخطاء بنسبة 40% من خلال الاستخدام الصحيح لأدوات التصحيح.
أهم النقاط
يتم بناء تطبيقات الجوال في تكوينين رئيسيين: Debug و Release. بناء Debug يتضمن رموز التصحيح، ولا يقوم بتحسين الكود، ويستخدم توقيعًا مؤقتًا — وهذا يتيح تعيين breakpoints وعرض المتغيرات وتنفيذ الكود خطوة بخطوة.
بناء Release لتطوير تطبيقات الجوال هو الإصدار النهائي لـ App Store و Google Play. Release يعمل على تحسين الكود، وإزالة الرموز والسجلات غير الضرورية، وتوقيع التطبيق بشهادة إنتاج. التصحيح على Release غير ممكن — إذا ظهر خطأ فقط على Release، فستحتاج إلى Crashlytics أو أدوات الإبلاغ عن الأعطال الأخرى.
الاستراتيجية الصحيحة لتطبيقات الجوال: Debug للتطوير، Release للاختبار قبل النشر. توصي IT Sectr بتشغيل بناء Release على أجهزة الاختبار قبل 2-3 أيام من الإصدار لتحديد المشكلات التي لا تظهر في وضع Debug (مثل إخفاء الكود أو أخطاء ProGuard/R8).
Debuggable=false هو إعداد إلزامي لـ Release في AndroidManifest. يختلف iOS Debug و Release حسب مخطط البناء في Xcode — Debug يتضمن Debug executable، و Release لا. يتوفر لنظام iOS أيضًا تكوين TestFlight (مع تقارير الأعطال) و App Store.
يوفر Android Studio مجموعة كاملة من الأدوات لتصحيح وتشخيص تطبيقات الجوال على منصة Android. Logcat هو وحدة تحكم سجلات نظام Android، الأداة الرئيسية لعرض السجلات، قابلة للتصفية حسب المستوى (Verbose، Debug، Info، Warn، Error) والعملية والعلامة.
يعرض Logcat سجلات جميع العمليات على الجهاز أو المحاكي. كل سجل له مستوى أولوية وعلامة ورسالة — استخدم Log.d(TAG, message) لرسائل التصحيح و Log.e للأخطاء. التصفية حسب العلامة هي أفضل طريقة للعثور على سجلاتك بين آلاف رسائل النظام.
مثال على إخراج السجل في تطوير تطبيقات الجوال على Android:
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate started");
try {
initComponents();
Log.i(TAG, "Components initialized successfully");
} catch (Exception e) {
Log.e(TAG, "Failed to init components", e);
}
}
Layout Inspector — مصحح واجهة مستخدم مرئي لـ Android، يعرض تسلسل View وسمات كل عنصر وموقعه على الشاشة. يتيح التحقق من معلمات التخطيط والمسافات الداخلية والخارجية والرؤية وأحجام النص على تطبيق قيد التشغيل.
Database Inspector — عرض وتحرير قواعد بيانات SQLite مباشرة في Android Studio، يعرض محتويات جميع الجداول، ويتيح تنفيذ استعلامات SQL وتعديل البيانات في الوقت الفعلي — أداة لا غنى عنها لتصحيح استعلامات Room و ContentProvider.
Network Inspector — يتتبع جميع طلبات HTTP للتطبيق، ويعرض URL والرؤوس وجسم الطلب والاستجابة ووقت التنفيذ ورمز الحالة. يساعد في تصحيح REST API والتحقق من صحة التسلسل واكتشاف الطلبات البطيئة.
يتطلب التصحيح والتشخيص الشامل لتطبيقات الجوال على Android إتقان جميع الأدوات المذكورة. يجمعها Android Studio في بيئة تطوير متكاملة واحدة لزيادة الكفاءة.
يوفر Xcode مجموعة مماثلة من الأدوات لتصحيح وتشخيص تطبيقات الجوال على iOS. Console هو المكافئ لـ Logcat في iOS، ويعرض سجلات النظام والتطبيق مجمعة حسب الفئة والمستوى (OSLogType).
Memory Graph Debugger هو أداة مرئية لاكتشاف retain cycles وتسرب الذاكرة، تعرض رسمًا بيانيًا لجميع الكائنات في الذاكرة مع مراجعها. تشير العقد الحمراء إلى تسربات — كائنات كان يجب تحريرها ولكنها لا تزال في الذاكرة.
استخدام Memory Graph: قم بتشغيل التطبيق، وانقر على زر Debug Memory Graph في Xcode، وحدد كائنًا وافحص مراجعه الواردة. يظهر retain cycle كاعتماد دائري: الكائن A يحتفظ بالكائن B، والكائن B يحتفظ بالكائن A. الحل هو استخدام مراجع ضعيفة أو غير مملوكة في closures.
View Hierarchy Debugger هو المكافئ لـ Layout Inspector في iOS، ويعرض تصورًا ثلاثي الأبعاد لجميع UIView على الشاشة مع تسلسلها الهرمي و constraints وسماتها. يتيح تحديد أي عنصر ورؤية موضعه ولونه وحجمه وقيود التخطيط الخاصة به.
Heap Dump هو لقطة لجميع ذاكرة التطبيق، يساعد تحليله في العثور على الكائنات التي لا يتم تحريرها وتقدير إجمالي استخدام الذاكرة لكل فئة. في Xcode، يتوفر Heap Dump عبر Memory Report في Debug Navigator.
LLDB هو مصحح أخطاء منخفض المستوى لتطبيقات C و Objective-C و Swift، يدعم breakpoints و watchpoints وتفريغ المجمع والتعديل الديناميكي للمتغيرات. الأمر po (print object) في LLDB يعرض وصف أي كائن في الذاكرة.
Watchpoint هو نقطة توقف يتم تفعيلها عند تغيير قيمة متغير، مفيد لتتبع من ومتى يغير قيمة حقل كائن. على عكس breakpoint الذي يتم تفعيله عند سطر معين، يتم تفعيل watchpoint عند أي تغيير في الذاكرة.
يتطلب التصحيح والتشخيص الاحترافي على iOS خبرة في العمل مع Xcode وفهم إدارة الذاكرة. توفر Apple وثائق كاملة لكل أداة تصحيح.
أدوات الوكيل ضرورية لتشخيص مشاكل الشبكة في تطبيقات الجوال. Charles Proxy هو وكيل HTTP الأكثر شيوعًا لتطوير تطبيقات الجوال، ويتيح اعتراض وعرض وتعديل الطلبات بين التطبيق والخادم.
يعمل Charles Proxy كوسيط: تقوم بتكوين الجهاز لاستخدام Charles كوكيل (عادةً IP الكمبيوتر، المنفذ 8888). يعرض Charles جميع طلبات HTTP و HTTPS مع إمكانية عرض الرؤوس والجسم وملفات تعريف الارتباط ووقت التنفيذ. يتيح SSL Proxying فك تشفير حركة مرور HTTPS للتحليل.
إمكانيات Charles: Breakpoints (إيقاف الطلب للتحرير)، Rewrite (تعديل الطلبات تلقائيًا)، Map Local (استبدال الاستجابة بملف محلي). Map Local لا غنى عنه للاختبار بدون API حقيقي — يمكنك إرجاع JSON معد مسبقًا بدلاً من استجابة الخادم.
Proxyman هو بديل حديث لـ Charles لنظام macOS بواجهة أكثر نظافة ودعم أفضل لـ M1 و M2 وحماية الخصوصية. يدعم نفس الوظائف: الاعتراض والوكيل SSL وتحرير الطلبات والبرامج النصية للتعديل التلقائي لحركة المرور.
Wireshark هو محلل حركة مرور احترافي للتشخيص العميق للشبكة، يحلل جميع طبقات OSI: TCP و DNS و TLS handshake و ICMP. يُستخدم لتشخيص الاتصالات البطيئة ومشاكل DNS وأخطاء الشبكة منخفضة المستوى.
Stetho هي مكتبة من Facebook لتصحيح تطبيقات Android عبر متصفح Chrome، تتيح عرض قاعدة البيانات وطلبات الشبكة و View Hierarchy و Shared Preferences عبر Chrome DevTools. Flipper هو خليفة Stetho مع دعم iOS وهندسة إضافات.
تُستخدم عملاء API لتصحيح وتشخيص الخادم الخلفي لتطبيقات الجوال دون تشغيل التطبيق نفسه. Postman هو عميل API الأكثر شيوعًا مع المجموعات والاختبارات والأتمتة، ويتيح إرسال طلبات GET و POST و PUT و DELETE وإدارة الرؤوس وملفات تعريف الارتباط ومتغيرات البيئة.
Insomnia هو بديل خفيف مفتوح المصدر لـ Postman بواجهة أسرع ودعم مدمج لـ GraphQL وتنظيم أفضل للمجموعات. يدعم الإضافات: السمات والتصدير وتوليد الكود بلغات مختلفة.
Httpie هو عميل HTTP سطر أوامر مع إخراج قابل للقراءة، يعرض استجابة JSON ملونة ورؤوسًا وحالة مباشرة في الطرفية. مناسب للفحوصات السريعة لـ API دون فتح تطبيق واجهة رسومية.
مثال على استخدام Httpie:
http POST https://api.example.com/v1/users \
"Authorization: Bearer token123" \
name="John" email="john@example.com"
توصي IT Sectr بمزيج: Postman لتحليل وتوثيق API + Httpie للفحوصات السريعة. قم باستيراد مجموعة Postman من مواصفات Swagger أو OpenAPI — وهذا يضمن أن نقاط النهاية المختبرة تتوافق مع وثائق الخادم.
| الأداة | المنصة | نوع التصحيح | مجانية | أفضل استخدام |
|---|---|---|---|---|
| Logcat | Android | تسجيل | + | عرض سجلات التطبيق والنظام |
| Layout Inspector | Android | واجهة المستخدم/View | + | التحقق من تسلسل View وسماته |
| Memory Graph | iOS | ذاكرة | + | تشخيص تسرب الذاكرة |
| View Hierarchy | iOS | واجهة المستخدم/View | + | تصور ثلاثي الأبعاد لـ UIView |
| Charles Proxy | iOS/Android | شبكة | نسخة تجريبية 30 يومًا | اعتراض حركة مرور HTTP/HTTPS |
| Proxyman | iOS/Android | شبكة | + (محدود) | وكيل HTTP حديث لنظام macOS |
| Wireshark | جميع المنصات | شبكة (عميق) | + | تحليل جميع طبقات OSI |
| Postman | جميع المنصات | API | + | اختبار API REST/GraphQL |
| Insomnia | جميع المنصات | API | + | بديل Postman مع GraphQL |
| LLDB | iOS/macOS | مستوى منخفض | + | تصحيح خطوة بخطوة، مجمّع |
الأسئلة الشائعة
بناء Debug يحتوي على رموز تصحيح ولا يحسن الكود ويستخدم توقيعًا مؤقتًا. بناء Release يحسن الكود ويزيل السجلات ويخفي الكود ويوقع بشهادة إنتاج. يتم تثبيت Debug عبر USB أو المحاكي، و Release عبر App Store أو Google Play.
استخدم Memory Profiler في Android Studio — يعرض الكائنات المخصصة والمحررة وأحداث GC. قم بإجراء Heap Dump وحلل الكائنات التي لا يتم تحريرها. ابحث عن Activity و Fragment التي تبقى في الذاكرة بعد finish(). استخدم LeakCanary — المكتبة تكتشف التسربات تلقائيًا.
على الكمبيوتر: فعّل SSL Proxying في Charles (Proxy → SSL Proxying Settings). على الجهاز: قم بتثبيت شهادة CA الخاصة بـ Charles (chls.pro/ssl) وثق بها في الإعدادات. على iOS 13+، فعّل ثقة الشهادة في General → About → Certificate Trust Settings. على Android 7+ يلزم تكوين network_security_config.xml.
Breakpoint هو نقطة توقف عند سطر معين من الكود. Watchpoint هو نقطة توقف عند تغيير قيمة متغير. يتم تفعيل Breakpoint في كل مرة يتم فيها الوصول إلى السطر، بينما يتم تفعيل Watchpoint عند أي تغيير في الذاكرة المتعقبة. Watchpoint مفيد للعثور على التعديلات غير المتوقعة للحقول.
استخدم Apollo DevTools (إضافة متصفح) أو Insomnia مع دعم GraphQL. Charles و Proxyman يعترضان طلبات GraphQL كطلبات HTTP POST عادية — يمكنك عرض الاستعلامات والمتغيرات والاستجابات. للتصحيح التفصيلي — Apollo Client Developer Tools.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.