Skip to main content

مقدمة

تُترجَم بناءات Flutter Web للإصدار (release) إلى JavaScript مُصغَّرة (minified)، لذا يبدو تتبّع المكدس (stack trace) القادم من مستخدم حقيقي هكذا:
عندما ترفع خرائط المصدر (source maps) الخاصة ببنائك إلى Lerix، تعيد لوحة التحكم كل إطار إلى كود Dart الخاص بك، مثل lib/chat/chat_store.dart:15، مع اسم العضو (member) في Dart. تُرفَع الخرائط بشكل خاص وتُحذف من مخرجات البناء قبل النشر. لا تُقدَّم علناً أبداً، لذا يبقى كودك المصدري خاصاً.
أكمِل تثبيت Flutter أولاً. تتطلّب تتبّعات المكدس على الويب الحزمة lerix_flutter بالإصدار 0.0.2 أو أحدث.
لا تحتاج خرائط المصدر إلا لـ Flutter Web. بناءات الإصدار على Android وiOS تُبلغ أصلاً عن ملف Dart ورقم السطر، راجع بناءات الأجهزة المحمولة.

1. ابنِ مع خرائط المصدر

أضِف --source-maps إلى بناء الويب:
تأكّد من ظهور main.dart.js.map بجانب main.dart.js في build/web.

2. أنشئ مفتاح API خاصاً

يحتاج رفع خرائط المصدر إلى مفتاح خاص، منفصل عن مفتاح المشروع العام الذي يستخدمه تطبيقك.
  1. افتح مشروعك في لوحة تحكم Lerix.
  2. اذهب إلى Project settings ← API keys.
  3. أنشئ مفتاحاً بصلاحية Upload source maps (أو Full access).
هذا المفتاح سرّي. خزّنه كسرّ (secret) في نظام CI ولا تضعه أبداً في كود العميل ولا ترفعه إلى مستودعك.

3. ارفع الخرائط بعد كل بناء

بعد flutter build web --source-maps وقبل النشر، شغّل أداة Lerix CLI:
شغّلها من مجلد مشروع Flutter. تجد الأداة build/web تلقائياً وتستخدم version من pubspec.yaml، دون رقم +build، كإصدار. فمع version: 1.4.0+12 يكون الإصدار 1.4.0. ترفع الأداة ملفات .map، ثم تحذفها من build/web كي لا تُنشر أبداً. إذا فشل أي رفع، تُبقي الأداة الخرائط وتخرج بالرمز 1، لتتمكّن من إعادة الخطوة. تتطلّب الأداة Node.js بالإصدار 18.17 أو أحدث.
ارفع الخرائط بعد كل بناء. يحتفظ main.dart.js بالاسم نفسه في كل البناءات، لذا فالإصدار هو ما يميّز بناءً عن آخر. ارفع قيمة version في pubspec.yaml مع كل إصدار.

الخيارات

يمكن تعيين كل خيار أيضاً عبر متغير بيئة.

4. لا شيء لتمرّره إلى الـ SDK

يُبلغ Flutter SDK عن الإصدار نفسه تلقائياً: قيمة version من pubspec.yaml، دون رقم +build. لا حاجة لتعيين إصدار في Lerix.init().

مثال: GitHub Actions

يبني سير العمل هذا تطبيق الويب، ثم يرفع الخرائط، ثم ينشر. أضِف LERIX_API_KEY وLERIX_PROJECT_ID وLERIX_SECRET_KEY كأسرار (secrets) في المستودع.
.github/workflows/deploy.yml

ما تراه في لوحة التحكم

تعرض أخطاء الويب الجديدة ملف Dart والسطر واسم العضو الأصلي. تظهر إطارات إطار عمل Flutter بصيغة package:flutter/... وتُعرض باهتة ككود مكتبة. يتلقّى المساعد الذكي وقضايا GitHub وخادم MCP جميعهم المكدس المقروء أيضاً.
  • لا تتضمّن خرائط المصدر التي يولّدها dart2js كودك المصدري، لذا تعرض أخطاء الويب الملف والسطر دون مقتطف من الكود.
  • لا تُحوَّل إلا الأخطاء المُبلَّغ عنها بعد رفع الخرائط. تبقى الأخطاء الأقدم بمكدسها المُصغَّر.

بناءات الأجهزة المحمولة

تُبلغ بناءات الإصدار على Android وiOS أصلاً عن ملف Dart ورقم السطر. لا حاجة لأي إعداد. البناءات المصنوعة باستخدام --obfuscate --split-debug-info لا تُفكّ رموزها (symbolicated) بعد.

استكشاف الأخطاء وإصلاحها