تخيل أنك تدفع تغييرات جديدة إلى الكود في GitHub، وبعد دقائق فقط يصلك إشعار:
“تم بناء التطبيق بنجاح، ورفع الإصدار الجديد إلى المتجر.”
سحر؟ لا، إنها تكامل CI/CD في Flutter — واحدة من أقوى تقنيات التطوير الحديثة التي تختصر ساعات العمل اليدوي إلى دقائق من الأتمتة الذكية.
في هذا المقال، سنتعلم كيف تجعل عملية بناء ونشر تطبيق Flutter تلقائية بالكامل، باستخدام أدوات احترافية مثل GitHub Actions وCodemagic وFastlane.
ما هو CI/CD؟
🔹 CI (Continuous Integration)
يعني “الدمج المستمر”، أي أن كل تغيير جديد في الكود يُدمج ويُختبر تلقائيًا بمجرد رفعه إلى المستودع (Repository).
🔹 CD (Continuous Deployment / Delivery)
هو “النشر المستمر”، أي أن التطبيق يُبنى ويُنشر تلقائيًا إلى المتجر أو بيئة الاختبار دون تدخل يدوي.
🎯 الهدف: تقليل الأخطاء البشرية، وتسريع دورة التطوير والنشر.
أولًا: إعداد GitHub Actions لتطبيق Flutter
1️⃣ أنشئ ملف إعداد
في مشروعك، أنشئ المسار التالي:
.github/workflows/flutter-ci.yml
ثم أضف المحتوى التالي:
name: Flutter CI/CD
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 🔄 Checkout code
uses: actions/checkout@v3
- name: 🧰 Set up Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.24.0'
- name: 📦 Install dependencies
run: flutter pub get
- name: 🧪 Run tests
run: flutter test
- name: 🏗️ Build Android release
run: flutter build appbundle
الآن، كل مرة تدفع فيها كودًا جديدًا إلى فرع main، سيقوم GitHub تلقائيًا بـ:
- تنزيل Flutter.
- تثبيت الحزم.
- تشغيل الاختبارات.
- بناء تطبيقك في وضع الإصدار.
💡 يمكنك لاحقًا توسيع هذا الملف ليرفع التطبيق تلقائيًا إلى Play Console أو TestFlight.
ثانيًا: استخدام Codemagic لأتمتة Flutter بالكامل
منصة Codemagic.io هي الأداة الرسمية التي صُممت خصيصًا لتطبيقات Flutter.
تتيح لك:
- بناء التطبيق لكل المنصات (Android, iOS, Web, Desktop).
- توقيع التطبيق تلقائيًا باستخدام مفاتيح مشفرة.
- رفع الإصدارات مباشرة إلى Google Play وApp Store.
الخطوات الأساسية:
- اربط حسابك على GitHub أو GitLab.
- اختر مشروع Flutter.
- فعّل قنوات النشر التي تريدها (Play Store أو TestFlight).
- حمّل ملفات keystore وcertificate المشفرة.
- اضغط “Start Build”.
وسيبدأ Codemagic ببناء التطبيق وتوزيعه تلقائيًا في كل تحديث! 🚀
⚙️ يمكنك أيضًا تخصيص إعداداتك في ملف
codemagic.yamlداخل المشروع.
ثالثًا: أتمتة النشر باستخدام Fastlane
إذا أردت مزيدًا من التحكم، استخدم Fastlane — أداة مفتوحة المصدر تسمح بالنشر التلقائي إلى المتاجر.
🔹 إعداد Fastlane لـ Android:
داخل مجلد:
android/
نفّذ:
fastlane init
سيُنشئ مجلد fastlane يحتوي على ملفات:
FastfileAppfile
يمكنك بعدها تحديد مهمة (lane) للنشر:
lane :deploy do
gradle(task: "bundleRelease")
upload_to_play_store(track: "production")
end
🔹 لـ iOS:
من مجلد ios/:
fastlane init
ثم أضف:
lane :release do
build_app(scheme: "Runner")
upload_to_app_store
end
بعدها، كل ما عليك هو تنفيذ:
fastlane deploy
وسيُرفع تطبيقك إلى Google Play أو App Store تلقائيًا ✨
رابعًا: مزايا استخدام CI/CD في Flutter
| الميزة | الفائدة |
|---|---|
| 🧩 أتمتة البناء | توفير الوقت والمجهود عند كل تحديث |
| ✅ اكتشاف الأخطاء مبكرًا | تشغيل الاختبارات قبل الدمج |
| 🚀 نشر سريع | التحديثات تصل للمستخدمين تلقائيًا |
| 🔒 توقيع آمن | باستخدام أسرار مشفرة داخل المنصة |
| 📈 توحيد الفريق | جميع المطورين يعملون ضمن نفس خط النشر |
نصائح احترافية
- استخدم secrets داخل GitHub أو Codemagic لتخزين كلمات المرور والمفاتيح بأمان.
- فعّل إشعارات Slack أو البريد لتصلك تقارير البناء.
- أضف خطوة اختبار الأداء (
flutter test --coverage) قبل النشر. - لا ترفع مفتاح التوقيع (keystore) في المستودع العام أبدًا!
الخلاصة
تكامل CI/CD هو ما يميز المشاريع الاحترافية عن المشاريع التجريبية.
فبدلًا من القلق في كل مرة تنشر فيها تحديثًا، اجعل الآلة تعمل نيابةً عنك.
بمجرد إعداد GitHub Actions أو Codemagic أو Fastlane، ستضمن أن تطبيقك يُبنى ويُوزع بأمان وسرعة ودون أخطاء بشرية.
وفي الجزء القادم من السلسلة، سنتحدث عن أنماط البناء في Flutter (Build Modes) — ما الفرق بين Debug وProfile وRelease، ومتى تستخدم كل منها أثناء التطوير أو النشر.

