Skip to content
العودة إلى المدونة
engineering5 دقيقة قراءة

خطوط CI/CD لتطبيقات Flutter: أتمتة البناء ونشر التطبيقات

كيف يؤتمت CI/CD وfastlane بناء Flutter والتوقيع والاختبار ونشر التطبيق على iOS وAndroid لإصدارات أسرع وأكثر هدوءاً.

SummationWorks
خطوط CI/CD لتطبيقات Flutter: أتمتة البناء ونشر التطبيقات

قد يضيع فريق Flutter بأكمله بعد ظهيرة كاملة بسبب إصدار واحد. شخص ما يرفع رقم النسخة، ويبني التطبيق محلياً، ويوقّع الحزمة يدوياً، ثم يرفعها إلى Play Console، ليكتشف بعد ذلك أن إصدار App Store يستخدم نقطة نهاية API من الأسبوع الماضي. اضرب ذلك في منصتين، وعدة مختبرين، وموعد تسليم يوم الخميس، ويصبح إطلاق الإصدار أكثر اللحظات إرهاقاً في الأسبوع.

يزيل CI/CD هذا الخوف. فبدلاً من أن يتذكر شخص ما اثنتي عشرة خطوة يدوية، يقوم خط الأنابيب (pipeline) بتنفيذها بالطريقة نفسها في كل مرة: البناء، والاختبار، والتوقيع، والنشر. وبالنسبة إلى Flutter تحديداً، فإن هذا أهم من معظم التقنيات الأخرى، لأن كل إصدار يستهدف على الأقل iOS وAndroid من قاعدة شيفرة واحدة، ولكل منهما قواعد توقيع خاصة، ومتطلبات متجر مختلفة، وطرق متعددة للفشل.

ماذا يعني CI/CD فعلياً لتطبيق Flutter

يحل الجزءان مشكلتين مختلفتين.

التكامل المستمر (Continuous Integration) يتعلق باكتشاف المشكلات مبكراً. في كل مرة يدفع فيها المطوّر شيفرة جديدة، ينفّذ خط الأنابيب تلقائياً أمر flutter analyze، واختبارات الوحدة والواجهة (widget tests)، وفحص بناء لكلتا المنصتين. وإذا انكسر شيء ما، يعرف الفريق ذلك خلال دقائق، وليس بعد أن يبلّغ مختبر عن خطأ بعد ثلاثة أيام.

التسليم/النشر المستمر (Continuous Delivery/Deployment) يتعلق بإيصال تلك الشيفرة المُتحقَّق منها إلى أيدي المستخدمين دون عمل يدوي. فهو يبني نسخ iOS وAndroid الموقَّعة، ويرفق ملاحظات الإصدار، ويرفعها إلى TestFlight، أو الاختبار الداخلي في Google Play، أو مسارات الإنتاج.

بالنسبة إلى مشروع Flutter، عادةً ما يغطي خط الأنابيب السليم ما يلي:

  • التحليل الساكن وفحوص التنسيق على كل طلب دمج (pull request)
  • الاختبارات الآلية (الوحدة، والواجهة، ويُفضَّل اختبارات التكامل)
  • إدارة النسخ وأرقام البناء بحيث لا يتعارض إصداران أبداً
  • توقيع الشيفرة لكلتا المنصتين عبر الجهاز، وليس عبر حاسوب محمول
  • التوزيع للمختبرين، وعند الجاهزية، إلى المتاجر

أين يأتي دور fastlane

معظم الأجزاء المؤلمة فعلاً في نشر تطبيقات الجوال تعيش في المتاجر، وليس داخل Flutter. فالشهادات تنتهي صلاحيتها، وملفات التوصيف (provisioning profiles) تنحرف، ونموذج التوقيع لدى Apple يعاقب كل من يقوم به يدوياً. أداة fastlane هي الأداة مفتوحة المصدر التي تؤتمت هذه الطبقة، وقد أصبحت الرفيق الافتراضي لمنظومة CI/CD مع Flutter.

بعض ما تجيده fastlane:

  • توقيع الشيفرة. يخزّن match شهادات iOS وملفات التوصيف في مستودع Git خاص، ويزامنها مع أي جهاز بناء. لا مزيد من عبارة «إنه يعمل على جهاز Mac الخاص بي لكنه لا يعمل في السحابة».
  • رفع المتاجر. يدفع supply نسخ Android إلى Google Play؛ بينما يتولى pilot وdeliver عمليات TestFlight وApp Store، بما في ذلك البيانات الوصفية ولقطات الشاشة.
  • تنسيق عملية البناء. تحدّد المسارات (lanes) — مسار تجريبي، ومسار إصدار — مرة واحدة، ويمكن لخادم CI ولأي مطوّر تنفيذ التسلسل نفسه تماماً بأمر واحد.

عملياً، تتولى منصة CI لديك (GitHub Actions أو GitLab CI أو Codemagic أو Bitrise) بناء Flutter، ثم تستدعي fastlane للقيام بالتوقيع والنشر. الأداتان تعملان معاً لا أن تتنافسا.

خط أنابيب واقعي، مرحلة بمرحلة

إليك كيف تبدو الأتمتة عبر مسار إصدار نموذجي.

عند كل طلب دمج

ينفّذ خط الأنابيب flutter analyze، ويفحص التنسيق، ويشغّل مجموعة الاختبارات. ولا يُدمج أي شيء في الفرع الرئيسي حتى تنجح هذه الخطوات. وحدها هذه القاعدة تمنع السبب الأكثر شيوعاً للإصدارات المعطوبة: شيفرة لم يُتحقَّق منها قبل إطلاقها.

عند الدمج في فرع الإصدار

يجري بناء لكلتا المنصتين. ويُرفع رقم النسخة ورقم البناء تلقائياً، وعادةً ما يُشتقّان من وسم Git أو من عدّاد، فلا حاجة لتعديل يدوي في pubspec.yaml أو Info.plist. وتُنتَج الحزم الموقَّعة في بيئة نظيفة، ما يعني أن البناء قابل لإعادة الإنتاج بدلاً من اعتماده على جهاز شخص بعينه.

عند إصدار موسوم

ترفع fastlane نسخة iOS إلى TestFlight ونسخة Android إلى أحد مسارات Google Play. ويحصل المختبرون على النسخة الجديدة تلقائياً. أما الترقية من الاختبار الداخلي إلى الإنتاج فيمكن أن تكون خطوة موافقة يدوية أو مؤتمتة بالكامل، بحسب مقدار التحكم الذي تريده قبل النشر المباشر.

الفكرة الجوهرية: كلما زادت الخطوات التي يمتلكها الجهاز، قلّت الطرق التي يمكن أن يفشل بها الإصدار بصمت.

ما الذي يغيّره هذا للأعمال

كثيراً ما يُصوَّر CI/CD على أنه شأن هندسي، لكن العائد تجاري.

  • إصدارات أسرع وأكثر هدوءاً. عندما يكون النشر بنقرة واحدة أو وسم واحد، تطلق الإصلاحات في اليوم نفسه الذي يُكتشف فيه المشكل بدلاً من انتظار «نافذة إصدار».
  • أخطاء محرجة أقل في الإنتاج. تلتقط الاختبارات والتحليل الآلي حالات التراجع قبل أن يلتقطها العملاء، ما يحمي تقييماتك في المتجر.
  • اعتماد أقل على شخص بعينه. عندما تعيش عملية البناء داخل الشيفرة، فإنها لا تختفي حين يسافر مطوّر في إجازة أو يغادر الفريق.
  • سجل تدقيق حقيقي. كل بناء مرتبط بـ commit محدد، فتعرف دائماً تماماً أي شيفرة موجودة أمام المستخدمين.

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

أخطاء شائعة يجب تجنّبها

نرى المصائد نفسها حين تُعدّ الفرق أتمتة Flutter للمرة الأولى:

  • تخزين الأسرار داخل المستودع. مفاتيح التوقيع، وكلمات مرور keystore، ورموز API، مكانها مخزن الأسرار المشفّر في منصة CI، لا داخل الشيفرة أبداً.
  • تخطّي الاختبارات «لتوفير الوقت». خط أنابيب يبني فقط دون تشغيل الاختبارات يعطي شعوراً زائفاً بالأمان. الاختبارات هي بيت القصيد.
  • رفع النسخ يدوياً. أرقام البناء المُحرَّرة يدوياً تسبّب رفض المتاجر وعمليات رفع مكرّرة مربكة. أتمتها.
  • تجاهل iOS حتى أسبوع الإطلاق. توقيع iOS هو الجزء الأكثر هشاشة. أعدّ match مبكراً حتى لا يتحول إلى أزمة عند خط النهاية.

أهم النقاط

  • يحوّل CI/CD إصدارات Flutter من طقس يدوي معرّض للأخطاء إلى عملية مؤتمتة قابلة للتكرار عبر iOS وAndroid.
  • يلتقط CI المشكلات مبكراً عبر التحليل والاختبارات؛ بينما يتولى CD التوقيع والبناء ونشر التطبيق دون خطوات بشرية.
  • fastlane هي الأداة المعيارية للجزء الأصعب — توقيع الشيفرة ورفع المتاجر — وتتكامل بطبيعتها مع أي منصة CI.
  • المكاسب التجارية ملموسة: إصدارات أسرع، أخطاء أقل في الإنتاج، اعتماد أقل على شخص بعينه، وسجل تدقيق واضح.
  • أتمت إدارة النسخ، واحمِ أسرارك، وأعدّ توقيع iOS مبكراً لتتجنّب أكثر حالات الفشل شيوعاً.

إعداد CI/CD بشكل جيد هو في معظمه استثمار لمرة واحدة يردّ قيمته مع كل إصدار لاحق. إذا كان تطبيق Flutter الخاص بك لا يزال يُطلق يدوياً، يمكننا تصميم وبناء خط أنابيب يناسب متاجرك وفريقك وإيقاع إصداراتك. اطّلع على خدماتنا، وشاهد أعمالنا، أو تواصل معنا للحديث عن الشكل الذي يمكن أن تبدو عليه عملية الإصدار لديك.

عن الكاتب

SummationWorks

SummationWorks is a software development company building web apps, mobile apps, and AI tools for startups and growing businesses across the US, UK, and GCC.

المزيد عنّا

لديك مشروع في ذهنك؟

لنحوّل فكرتك إلى برمجيات جاهزة للإنتاج.

ابدأ مشروعًا