الفصل الرابع عشر: النشر والرفع على المتاجر Chapter 14: Deployment & Store Submission
الخطوة النهائية لتحويل كودك إلى تطبيق حقيقي يراه الملايين.
وصلنا للنهاية السعيدة! الرفع على المتاجر مش بس عملية تقنية، دي عملية إدارية وتسويقية وفنية.
تحويل كود الـ Dart إلى ملفات تنفيذية (APK/AAB/IPA) جاهزة للنشر.
التأكد من أن التطبيق يتبع سياسات Google و Apple الصارمة.
الانتظار حتى تتم مراجعة التطبيق وظهوره للمستخدمين.
التطبيق مش هيرضى ينزل على الموبايل غير لو كان "موقع" إلكترونياً. دي هويتك كمطور:
بنستخدم ملف key.jks عشان نشفر الـ Build. جوجل دلوقتي هي اللي بتهندل الـ Release Key.
keytool -genkey -v -keystore ~/upload-key.jks ...
لازم يكون عندك حساب Apple Developer وتعمل Certificate و App ID و Provisioning Profile.
تحذير: لو ضيعت ملف الـ KeyStore بتاع الأندرويد، مش هتعرف ترفع تحديثات للتطبيق تاني للأبد! شيله في مكان آمن (cloud/physical drive).
رحلة الرفع لآبل بتبدأ من Xcode:
تأكد إن الـ Bundle Identifier هو نفسه اللي في الـ Portal.
ارفع النسخة باستخدام Transporter أو مباشرة من Xcode.
جوجل بلاي بيعتمد دلوقتي على ملف AAB (App Bundle) بدل الـ APK التقليدي.
flutter build appbundle --release
الميزة: الـ AAB بيخلي جوجل تنزل للمستخدم الأجزاء اللي محتاجها جهازه بس، وده بيصغر حجم التحميل جداً.
نصيحة: ابدأ دايماً بـ Internal Testing Track عشان تجرب التطبيق مع فريقك قبل النشر العام.
انطباع المستخدم الأول بيجي من الصور في المتجر. لازم تكون احترافية:
| Platform | Requirements | Best Practice |
|---|---|---|
| iPhone | 6.5" & 5.5" Displays | Use mockups with device frames. |
| iPad | 12.9" Display | Show tablet-specific layouts (NavigationRail). |
| Android | Phone, 7" & 10" Tablets | Focus on ease of use and dark mode. |
المتاجر مبقتش تقبل تطبيقات من غير رابط سياسة خصوصية. لازم توضح للمستخدم:
إيه البيانات اللي بنجمعها؟ (في حالتنا: Crash reports only).
إزاي بنحمي البيانات؟ (Local Encryption).
هل بنشارك البيانات مع طرف تالت؟ (No, except Firebase for diagnostics).
PRO TIP: ممكن تستخدم GitHub Pages عشان ترفع عليها ملف الـ Privacy Policy كصفحة ثابتة وتحط الرابط في المتاجر.
راجع القائمة دي بدقة قبل ما تلمس زرار الـ Submit:
النسخة Release (مش Debug).
الـ Version والـ Build Number زايدين عن النسخة اللي فاتت.
كل الـ print اتشالت أو اتحولت لـ Logger.
شاشة الـ Splash Screen والأيقونة مظبوطين.
تم تجربة التطبيق على جهاز حقيقي (مش Simulator).
تم عمل Smoke Test لكل الحركات المالية الأساسية.
| Term | Meaning (AR) |
|---|---|
| Production | البيئة النهائية اللي المستخدم الحقيقي بيشوفها. |
| Staging | بيئة تجريبية مطابقة للواقع لكنها مخفية عن الناس. |
| App Review | عملية مراجعة بشرية أو آليه من المتجر للتأكد من الجودة. |
عشان الناس تلاقي تطبيقك بسهولة، لازم تهتم بالـ Metadata:
| Field | Description | Tip |
|---|---|---|
| App Title | اسم التطبيق الأساسي. | خليه قصير وجذاب (MRE CashBook). |
| Subtitle/Short Desc | وصف مختصر يظهر تحت الاسم. | استخدم كلمات دلالية (Keywords) زي "مصاريف" أو "محفظة". |
| Keywords | كلمات بحث مخفية (iOS only). | افصل بينها بـ commas من غير مسافات. |
PRO TIP: الوصف الطويل (Long Description) في جوجل بلاي بيأثر على الـ SEO جداً، لكن في آبل ملوش لازمة غير للقراءة.
كل المطورين بتترفض تطبيقاتهم في الأول، ده عادي جداً. أشهر أسباب الرفض:
لو التطبيق عمل Crash وهما بيجربوه. تأكد إنك باعت "Review Account" شغال.
نقص رابط سياسة الخصوصية أو طلب صلاحيات زيادة عن اللزوم.
الحل: رد عليهم باحترام، صلح المشكلة، وارفع Build جديد بنفس الـ Version لكن Build Number أعلى.
| Feature | Apple App Store | Google Play Store |
|---|---|---|
| Review Time | 24-48 Hours (usually) | 1-7 Days (can be slow) |
| Cost | $99 / Year | $25 / One-time |
| Strictness | Very Strict UI/UX | More relaxed but strict on Security |
عشان نضمن إننا مش بنرفع نسخة مكررة بالصدفة، ممكن نستخدم Script بسيط يفحص الـ pubspec.yaml:
# Basic bash script to check version before build
VERSION=$(grep 'version: ' pubspec.yaml | sed 's/version: //')
echo "Building version: $VERSION"
if [[ "$VERSION" == *"+"* ]]; then
echo "✅ Version format is valid."
else
echo "❌ Error: Build number is missing (+N)."
exit 1
fi
السكريبت ده بيمنع الـ Build لو نسيت تحط الـ Build Number، وده بيوفر عليك وقت رفع فاشل للمتجر.
الصور مش بس سكرين شوت، دي "قصة" بتحكيها للمستخدم:
لازم توضح الميزة الأساسية (تتبع المصاريف) بوضوح تام.
استخدم جمل قصيرة وقوية فوق الصورة (مثلاً: "إدارة أموالك في ثوانٍ").
نصيحة فنية: استخدم ألوان الخلفية في الصور متناسقة مع ألوان التطبيق (Dark Mode) عشان تدي إيحاء بالاحترافية.
مبروك! لو وصلت للنقطة دي، فأنت خلصت دورة بناء تطبيق MRE CashBook بالكامل. اتعلمت فيها:
هندسة البرمجيات (Clean Architecture).
إدارة الحالة المتقدمة (BLoC / Cubit).
قواعد البيانات المحلية والسحابية.
الأداء، الأمان، والتوافق مع Huawei.
النشر والصيانة المستمرة.
شكراً لثقتكم، وبالتوفيق في مشاريعكم القادمة! 🚀
سنقوم ببناء هذا الفصل لنغطي كل جوانب Deployment المشروع.