FUDEX · فيودكس — وثيقة داخلية للفريق التقني

مركز رفع التطبيقات: فيوسبيس وفيوسويت

كل ما يلزم لرفع التطبيقين على المتاجر، ثمّ تحديثهما وتشغيلهما وتعديلهما لاحقاً — روابط وحزم وخطوات.

آخر تحديث: 19 أغسطس 2026 · أعدّه: كلود (جلسة أبوأحمد)

٠) المصدر الوحيد للنسخة — اقرأ هذا أولاً

المشكلة التي عالجناها: كان كل واحد يبني من نسخته ويُسمّي الملف بيده، فاجتمع عندنا v0.1.0 وv0.1.1 ببصمة واحدة (بناءٌ واحد باسمين)، وصار على المتجر 0.3.0 بينما صفحة الفريق تخدم 0.5.0 والكود عند 0.6.0 — ثلاث «أحدث».

القاعدة الآن: رقم الإصدار يُقرأ من pubspec.yaml داخل كوميت مدفوع للمستودع المشترك. لا تسمية يدوية، ولا نشر من نسخة خاصة.

الإصدار المعتمد حاليًا

…جارٍ التحميل

يُقرأ حيًّا من manifest.json — وهو ما تكتبه بوابة الإصدار، لا يُحرَّر بيد.

المستودع المشترك — مكان العمل الواحد

تسليم النسخ صار عبر git لا عبر أرشيف: تستنسخ، تشتغل، تدفع — فيرى الجميع تعديلك ويراه أبوأحمد، وكل دفعة مسجّلة باسم صاحبها.

التطبيقالمستودع
فيوسويتhttps://apps.fudex.com.sa/git/fusuite-mobile.git
فيوسبيسhttps://apps.fudex.com.sa/git/fuspace-app.git
VUREAD (التسجيل الذكي)https://apps.fudex.com.sa/git/vuread-mobile.git

أنشئ توكن الدخول للمستودع

الدخول ببريد فيودكس + توكن شخصي من صفحة المصدر. حذف بريدك من قائمة السماح يقطع وصولك فورًا. مفاتيح التوقيع وkey.properties لا تدخل المستودع — تُطلب من الإدارة التقنية.

دورة الإصدار — خمس خطوات

  1. اسحب أولاً: git pull — لا تبنِ فوق نسخة قديمة.
  2. اشتغل وادفع: git push — ما لم يُدفَع لا يُنشر.
  3. ارفع الرقم: عدّل version: X.Y.Z+B في pubspec.yaml بكوميت مستقل وادفعه.
    الإصلاح ⇐ ارفع Z · ميزة ⇐ Y · وارفع B في كل بناءٍ يخرج منك مهما كان.
  4. ابنِ على جهازك (flutter build apk/appbundle --release).
  5. انشر عبر البوابة (أبوأحمد أو عمرو):
    fudex-app-publish --app fusuite --commit <sha> --file build/app.apk --notes "…"

ما الذي ترفضه البوابة تلقائيًا

المحاولةالرد
بناء من كوميت غير مدفوعمرفوض — «ادفع عملك أولاً»
نفس البناء برقمين مختلفينمرفوض — عين فخّ v0.1.0/v0.1.1
نفس الرقم ببناءين مختلفينمرفوض — ارفع رقم البناء
أرشيف مبتور أو تالفمرفوض — «لن يُنشر ملف لا يثبّته جهاز»

كل إصدار يُسجَّل ببصمته وكوميته وناشره في manifest.json وسجلّ الإصدارات.

١) حالة التطبيقين اليوم

FuSpaceFuSuite (فيوسويت)
ما هومساحة العمل: محادثات، غرف، اجتماعات، حضور وانصراف، مهامالبريد والتقويم والاجتماعات والملفات والمحاضر في تطبيق واحد
معرّف الحزمةsa.com.fudex.fuspacesa.com.fudex.fusuite
الإصدار الحالي2.5.1 (versionCode 13)0.7.2 (versionCode 13)
التقنيةFlutter 3.44.6 · Dart 3.12 · minSdk 24 · targetSdk 36
أندرويدحزمة AAB جاهزة وموقّعةحزمة AAB جاهزة وموقّعة
iOSالمشروع يُبنى — ينقص ٣ أمور (القسم ٨)لا يوجد مشروع iOS بعد
التنبيهاتFirebase مشروع واحد: fudex-fuspace-c750a
مصدر الكودWorkSpace/fuspace-appWorkSpace/fusuite-mobile
ملاحظة مهمّة: التطبيقان يشترطان تسجيل دخول بحساب فيودكس، ولا يوجد فيهما تسجيل ذاتيّ. هذا يعني أنّ مراجع المتجر لن يستطيع الدخول ما لم نُزوّده بحساب اختبار — وهذا أكثر سبب لرفض التطبيقات المؤسسية. انظر القسم ٩.

٢) حسابات المتاجر والكونسولات

الوجهةالرابطالحسابمَن يملك الوصول
Google Play Consoleplay.google.com/consoleحساب مطوّر باسم Fudex-EBS · بريد الحساب developer@fudex.com.saأبوأحمد (m@fudex.com.sa) عضو معتمد — يمنح الصلاحيات للبقية
App Store Connectappstoreconnect.apple.comفريق Fudex · Team ID TBYZE4288M (اشتراك مدفوع فعّال)أبوأحمد
Firebase (التنبيهات)console.firebase.google.comمشروع fudex-fuspace-c750a (رقم 716611782998) — خطة Sparkأبوأحمد
Play Console — إدارة الأعضاءUsers and permissionsمن هنا يُدعى عضو الفريق: Invite user ← البريد ← صلاحيات التطبيق (Release manager للرفع)
خبر جيّد: حساب المطوّر على قوقل بلاي قائم ومدفوع ونُشرت تحته تطبيقات سابقة — فلا حاجة لإنشاء حساب جديد ولا لدفع رسوم التسجيل ($25). المطلوب فقط: منح العضو صلاحية، ثم إنشاء سجلّ التطبيق.

٣) الحزم الجاهزة للرفع

AAB هي الصيغة التي يقبلها قوقل بلاي (لا APK). وAPK للتثبيت المباشر على أجهزة الفريق والاختبار قبل الرفع. كلّها موقّعة بمفتاح الإصدار الرسمي.

FuSpace 2.9.2 (21) — الاتصال الصوتي المباشر

الجديد: مكالمات حقيقية بين الموظفين — شاشة رنين أصلية ملء الشاشة (رد / اعتذار برسالة)، «الويب أولاً ١٠ ثوانٍ ثم يرنّ الجوال»، إيقاظ بالدفع (FCM) والتطبيق مغلق مع رنين مُلحّ فوق شاشة القفل، صوت المكالمة على سماعة الأذن افتراضاً مع أولوية تلقائية للسماعات السلكية والبلوتوث وزر سماعة خارجية، زر اتصال في ملف الزميل ورأس المحادثة، وسجل المكالمات في الوسيط. + 2.9.2: شاشة المكالمة تقفز في وجهك بإذن «الظهور فوق التطبيقات» (بدونه يمنع أندرويد بدءَ شاشةٍ من الخلفية فيبقى الإشعار وحده) · دفعة صفحة التجربة كانت تُسقَط بصمت لأن مرسِلها بلا حساب · سطرٌ يقول كم زميلاً متاحاً الآن فلا تحتمل «الفارغة» تفسيرين. + 2.9.1: لوحة دعوة زميلٍ للمكالمة صار فيها بحثٌ حيّ يصل الخادم ويضع «آخر من كلّمتهم» أعلى (كانت تظهر فارغة) · زر «المحادثة» داخل المكالمة يفتح المحادثة نفسها لا اقتراحاتٍ جاهزة، والمكالمة تبقى في شريطٍ يزيح محتوى الشاشة فلا يغطّي زرّ الرجوع · إصلاح جذر «تبويب الاتصالات فاضٍ»: مهلة الشبكة كانت تغطّي بدء الرد لا تنزيل جسده، فردُّ الروستر (٢٤١KB) يعلق بلا نهاية ويُبقي المصالحة عالقة للأبد بلا خطأ ⇒ المهلة تشمل الجسد الآن، وسقفٌ على مجموعة الإقلاع، وإعادة جلبٍ عند فتح أي شاشة تحتاج الروستر. + 2.9.0: زرّا «رد» و«اعتذار» على إشعار المكالمة نفسه (الاعتذار بلا فتح التطبيق) · عودة تبويب فيوبورد · شريط دوام اليوم معلوماتٌ فقط والمداخل صارت اتصال/بريك/استئذان/ملاحظات · مكالمة جماعية حتى ٤ أطراف · رسالة أثناء المكالمة وأعذار عند الإلغاء. + 2.8.0: المكالمة تظهر ملء الشاشة على الجهاز المقفل (وتوقظ الشاشة) + نافذة عائمة (PiP) تطفو فوق أي تطبيق عند مغادرة التطبيق أثناء مكالمة أو غرفة صوتية + خدمة أمامية تُبقي الصوت حياً بالخلفية — مُختبَرة على محاكي أندرويد ١٤ حيّ. + 2.7.0: إعادة هيكلة الاتصال — يبقى اتصالاً يظهر ملء الشاشة ويُصغَّر لشريط عائم وترجع له؛ يرنّ الجوال مباشرة لمن ليس على الويب؛ استقرار ٩٠ث؛ إشعار «مكالمة جارية» للخلفية؛ تخطيط متمركز؛ بطاقة رئيسية وزر اتصال بقائمة المحادثات وإنهاء برسالة. + 2.6.1: نغمة رنين جرسية وتبويبا الاتصالات/السجل. + إصلاح جوهري: الوصلة الحية للتطبيق كانت مقطوعة منذ تبديل فيوتشات ٢ — عادت لحظية.

تنزيل AAB (لرفع قوقل بلاي) APK arm64 (أغلب الأجهزة) APK arm32 (الأجهزة الأقدم) أيقونة 512×512

ملاحظة الرفع: بعد النشر على بلاي، رنين «التطبيق مغلق» يصل الأجهزة فور تحديثها — أجهزة الفريق المسجّلة حالياً (٨) تستقبل مباشرة بعد التثبيت.

FuSpace لنظام iOS — جاهز للبناء، والرفع يحتاج حساب Apple

تطبيق iOS يُبنى ويعمل من نفس المصدر (جُرّب على المحاكي بمكالمة كاملة: رنين بعد ١٠ ثوانٍ ← رد ← صوت حي). لرفعه على App Store يلزم من أبوأحمد ثلاث خطوات لا يملكها غيره:

  1. اشتراك Apple Developer Program (99$/سنة) باسم فيودكس.
  2. فتح ios/Runner.xcworkspace من مصدر التطبيق واختيار الفريق في Signing & Capabilities ثم Product ▸ Archive ▸ Upload.
  3. لتنبيهات iOS (ورنين «التطبيق مغلق»): إضافة تطبيق iOS بمعرّف sa.com.fudex.fuspace في مشروع Firebase fudex-fuspace-c750a وتنزيل GoogleService-Info.plist إلى ios/Runner/، ورفع مفتاح APNs من حساب آبل إلى إعدادات المشروع.

FuSuite 0.5.0 (7)

تنزيل AAB (للمتجر) تنزيل APK (تثبيت مباشر) أيقونة 512×512

VUREAD 1.1.0 (2) — تطبيق التسجيل الذكي لفريق المبيعات مُحدَّث

الرئيسية صارت للتسجيل فقط: زرّ أحمر وشريط موجات، وبضغطة واحدة يبدأ. التسجيلات صارت صفحة تظهر بسحبة واحدة بدل الازدحام مع زرّ التسجيل. بعد الرفع: تفريغ بتمييز المتحدثين (المتحدث ١/٢/٣ مع سطر يصف كل صوت لتسمّيه بثانية)، ملخّص بهيكل يناسب النوع (قرارات ومهام للاجتماع، محاور وأسئلة مراجعة للمحاضرة، آيات وأحاديث ودروس للخطبة)، اسأل التسجيل وثبّت الإجابة في الملخص، وملاحظات مربوطة بلحظة التشغيل. الدخول بحساب قوقل عبر FuPass — بلا كلمات مرور. يدعم أندرويد 7 فأعلى (arm64/arm32).

جديد في 1.1.0: أيقونة التطبيق أُصلحت (طبقتها الأمامية كانت شفافة فعلياً بلا شعار على أغلب الأجهزة) · صورة حسابك تظهر أعلى الرئيسية.

تنزيل APK (تثبيت مباشر — 35.9 م.ب) صفحة التطبيق (شرح + QR للجوال) أيقونة 512×512

التثبيت: افتح الرابط من متصفح الجوال ← اسمح بالتثبيت من هذا المصدر إن طُلب ← ادخل بحساب قوقل. المصدر: WorkSpace/vuread-mobile + الخادم vuread.fudex.com.sa على hz2. لا نسخة متجر بعد (نسخة فريق).

الوثائق النظامية — على نطاق مستقلّ لا يمسّ روابط المنصّة

كلّها على apps.fudex.com.sa — موقع ثابت مستقلّ (عربي/إنجليزي بمبدّل لغة) أُنشئ لهذا الغرض، فلا تعليق له بأي نطاق تشغيليّ للمنصّات.

خصوصية FuSpace شروط FuSpace خصوصية فيوسويت شروط فيوسويت تواصل معنا

الكود المصدري — بوابة بهوية فيودكس

المصدر لا يُترك على رابطٍ عام. بوابة مقفلة تسأل عن هويتك بدخول قوقل (حساب فيودكس) ثم تطابق بريدك مع قائمة سماح؛ ومَن ليس في القائمة لا يُنزّل شيئاً، وكل تنزيل يُسجَّل باسمه ووقته:

بوابة تنزيل المصدر الحزمة المشفّرة (كود + مفاتيح التوقيع)

لإضافة موظف: أرسل بريده وسيُضاف لقائمة السماح (/opt/fuapps/allow.txt على hz1 — سطر لكل بريد، وسطر @fudex.com.sa يفتحها لكل موظفي النطاق). حزمة البوابة بلا مفاتيح توقيع وبلا google-services.json — المفاتيح تبقى في الحزمة المشفّرة وحدها.

٣٫٥) صفحة المتجر — الروابط والنصوص جاهزة للّصق

الروابط المطلوبة في نموذج بلاي

الحقل في Play ConsoleFuSpaceفيوسويت
Privacy policy (إلزامي)apps.fudex.com.sa/fuspace/privacy/apps.fudex.com.sa/fusuite/privacy/
Terms / EULA (اختياري بالمتجر، إلزامي عندنا)apps.fudex.com.sa/fuspace/terms/apps.fudex.com.sa/fusuite/terms/
Website (بيانات الاتصال)apps.fudex.com.sa — أو fudex.com.sa
Support emailcontact@fudex.com.sa
صفحة التواصل / الدعمapps.fudex.com.sa/contact/
Account deletion URL…/fuspace/privacy/#delete…/fusuite/privacy/#delete

كل صفحة تحوي النصّ العربي والإنجليزي معاً بمبدّل لغة، فرابطٌ واحد يكفي للغتَي المتجر (وللإنجليزية مباشرةً أضف #en في آخر الرابط).

اسم التطبيق ووصفه — جاهز للنسخ

FuSpace

الاسم (٣٠ حرفاً كحدّ أقصى): FuSpace — مساحة عمل فيودكس · إنجليزي: FuSpace — Fudex Workspace

وصف قصير (٨٠):
عربي: «مساحة عمل فريقك: محادثات وغرف واجتماعات وحضور ومهام في تطبيق واحد.»
English: “Your team’s workspace: chat, rooms, meetings, attendance and tasks.”

وصف كامل (عربي):

FuSpace هو تطبيق مساحة العمل من فيودكس: مكان واحد يجمع فريقك ومحادثاته واجتماعاته ومهامه.

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

التطبيق مخصّص لموظفي ومستخدمي فيودكس المعتمدين ويتطلب حساب فيودكس؛ لا يتضمّن تسجيلاً ذاتياً
ولا رسوماً ولا إعلانات. للحصول على حساب أو للدعم: contact@fudex.com.sa

Full description (English):

FuSpace is the Fudex workspace app: one place for your team's conversations, meetings and tasks.

• Team chat: channels, direct messages and threaded replies, with attachments, voice messages and instant notifications.
• Rooms and meetings: join a work room or a meeting with one tap, with reliable mobile audio.
• Attendance: check in and out from your phone; the record goes straight into the HR system.
• Tasks: follow your projects and complete your tasks from the app.
• Driving mode: a simplified, voice-friendly interface for when you are on the road.

FuSpace is for Fudex employees and authorised users and requires a Fudex account. No self-registration,
no fees, no ads. For an account or support: contact@fudex.com.sa

فيوسويت — FuSuite

الاسم: فيوسويت — مكتب فيودكس · إنجليزي: FuSuite — Fudex Workplace

وصف قصير (٨٠):
عربي: «بريدك وتقويمك واجتماعاتك وملفاتك ومحاضرك في تطبيق واحد.»
English: “Your mail, calendar, meetings, files and minutes in one app.”

وصف كامل (عربي):

فيوسويت يجمع أدوات يومك في تطبيق واحد بحساب واحد.

• البريد: صندوقك المؤسسي كاملاً — قراءة وإرسال ومرفقات ومجلدات وتنبيه فوري للبريد الجديد.
• التقويم: مواعيدك وتكراراتها وتذكيراتها، وتعمل بلا اتصال ثم تُزامن.
• الاجتماعات: ابدأ اجتماعاً أو انضمّ إليه بخطوة واحدة، مع دعوة الزملاء ومشاركة رابط الغرفة.
• الملفات: تصفّح مساحتك ورفعها وتنزيلها، مع عارض PDF ومحرّر نصوص ومعاينة صور.
• المحاضر: محضر كل اجتماع وتفريغه النصّي مع بحث داخل النصّ.

التطبيق مخصّص لمستخدمي فيودكس المعتمدين ويتطلب حساب فيودكس؛ بلا تسجيل ذاتي وبلا رسوم وبلا إعلانات.
للدعم: contact@fudex.com.sa

Full description (English):

FuSuite brings your working day into a single app with a single account.

• Mail: your full corporate mailbox — read, send, attachments, folders and instant new-mail alerts.
• Calendar: events, recurrences and reminders, working offline and syncing when you reconnect.
• Meetings: start or join a meeting in one step, invite colleagues and share the room link.
• Files: browse, upload and download your space, with a PDF viewer, text editor and image preview.
• Minutes: every meeting's minutes and transcript, searchable inside the text.

FuSuite is for authorised Fudex users and requires a Fudex account. No self-registration, no fees, no ads.
Support: contact@fudex.com.sa

الأصول الرسومية

الأيقونتان 512×512 جاهزتان (روابطهما أعلاه). المتبقّي على التصميم: صورة مميّزة 1024×500 لكل تطبيق، و٢–٨ لقطات شاشة هاتف (عرض ٣٢٠–٣٨٤٠ بكسل، نسبة ١٦:٩ أو ٩:١٦). اللقطات تُلتقط من جهاز حقيقي أو محاكي بعد تثبيت الـAPK من هذه الصفحة.

٤) الرفع على قوقل بلاي — أول مرّة

  1. الدخول والصلاحية: افتح Play Console بحسابك المؤسسي. إن لم تظهر لك مساحة Fudex-EBS فاطلب من أبوأحمد دعوتك من Users and permissions بصلاحية Admin أو Release manager.
  2. إنشاء سجلّ التطبيق: All apps ← Create app:
    • الاسم: FuSpace أو فيوسويت
    • اللغة الافتراضية: العربية (السعودية)
    • النوع: App · التسعير: Free
    • أقرّ بإعلانَي المحتوى وقوانين التصدير
  3. أكمل لوحة «Set up your app» — لا يُقبل أي إصدار قبل إتمامها:
    • App access: اختر «All or some functionality is restricted» ثم أضف بيانات حساب اختبار حقيقي (بريد + كلمة مرور + شرح خطوات الدخول). بدونها يُرفض التطبيق.
    • Ads: لا يحتوي إعلانات.
    • Content rating: املأ الاستبيان (فئة: Business / Productivity).
    • Target audience: ١٨ سنة فأكثر.
    • Data safety: أفصح عن: هوية الحساب (البريد والاسم)، الرسائل، الملفات، الميكروفون/الكاميرا (فيوسويت)، معرّفات الجهاز للتنبيهات — كلّها «تُجمَع وتُنقل مشفّرة، ولا تُباع، ويمكن طلب حذفها». تفاصيلها مطابقة لسياسة الخصوصية المرفقة.
    • Privacy policy: ألصق رابط سياسة الخصوصية من القسم ٣.
    • Government apps / Financial features: لا.
  4. ابدأ باختبار داخلي لا بالإنتاج: Testing ← Internal testing ← Create new release. ارفع ملف .aab، وأضف قائمة المختبرين (بُرد الفريق)، ثم Review release ← Start rollout. الاختبار الداخلي يصل خلال دقائق بلا مراجعة، فتلتقط الأخطاء قبل المراجعة الرسمية.
  5. وقّع على Play App Signing: عند أول رفع سيطلب قوقل إدارة مفتاح التوقيع (الوضع الافتراضي والموصى به). اقبله؛ فيصير مفتاحنا مفتاح رفع ويوقّع قوقل النسخة النهائية. مهم بعدها احتفظ ببصمة SHA-256 من Setup ← App signing — تلزم لتحديث assetlinks.json (روابط /j/ التي تفتح التطبيق) وإعداد Firebase.
  6. صفحة المتجر (Store listing): الاسم، وصف قصير (٨٠ حرفاً)، وصف كامل (٤٠٠٠)، أيقونة 512×512، صورة مميّزة 1024×500، ولقطتان على الأقل لشاشة الهاتف (١٦:٩ أو ٩:١٦، ٣٢٠–٣٨٤٠ بكسل).
  7. الإنتاج: بعد نجاح الاختبار الداخلي: Production ← Create new release بنفس الحزمة، ثم المراجعة (عادة من ساعات إلى ٧ أيام لأول إصدار).
تطبيقات الشركات الداخلية لها مسار أنظف: Google Play Managed (Private app) — يُنشر للنطاق المؤسسي وحده بلا مراجعة عامة. إن كان الهدف موظفي فيودكس فقط، هذا الخيار أسرع وأقلّ متطلبات. قرار أبوأحمد.

٥) التحديث لاحقاً

  1. عدّل الكود في مشروعه.
  2. ارفع رقم الإصدار في pubspec.yaml — السطر version: 2.5.1+13:
    • الرقم قبل + = versionName يراه المستخدم.
    • الرقم بعد + = versionCode؛ يجب أن يزيد دائماً. قوقل يرفض رقماً مكرّراً أو أقلّ، ولا يمكن سحبه بعد الرفع.
  3. ابنِ الحزمة (القسم ٦).
  4. ارفعها: Play Console ← التطبيق ← Production ← Create new release ← ارفع الـAAB ← اكتب «ما الجديد» بالعربية ← Rollout.
  5. وللتوزيع الداخلي المباشر (بلا متجر): ارفع الـAPK إلى مجلد التنزيل على الخادم وحدّث ملف النسخة:
    scp fusuite.apk fudex-hz1:/opt/fumeet/web/dl/fusuite-mobile-v0.4.0.apk
    # ثم حدّث /opt/fumeet/web/dl/fusuite-ver.json
    {"v":5,"url":"https://fumeet.fudex.com.sa/dl/fusuite-mobile-v0.4.0.apk","note":"ما الجديد"}
    التطبيق يقارن v بـkBuildNumber ويُظهر بانر «حدّث الآن».
لا تنشر داخل الدوام. قاعدة فيودكس: نهاراً نبني ونركن على رصيف النشر، والنشر الحيّ خارج الدوام (بعد ٨ مساءً بتوقيت الرياض). وأي رفع لبانر/نسخة على الخوادم يمرّ عبر fudex-deploy.sh حصراً.

٦) التشغيل والتعديل والبناء

ما تحتاجه على جهازك

التشغيل على جهاز/محاكي

export PATH="$PATH:$HOME/development/flutter/bin"
cd fusuite-mobile        # أو fuspace-app
flutter pub get
flutter devices          # تأكّد من ظهور الجهاز
flutter run              # تشغيل مع hot reload

بناء حزمة المتجر (AAB) وحزمة التثبيت (APK)

# ⚠️ لا تبنِ داخل مجلد مزامَن بـiCloud (مثل ~/Documents) — انسخ أولاً:
rsync -a --delete --exclude build --exclude .dart_tool --exclude .git \
      ~/Documents/WorkSpace/fusuite-mobile/  ~/.fdxbuild/fusuite/
cd ~/.fdxbuild/fusuite

flutter pub get
flutter build appbundle --release --no-tree-shake-icons
flutter build apk       --release --no-tree-shake-icons

# المخرجات:
#   build/app/outputs/bundle/release/app-release.aab
#   build/app/outputs/flutter-apk/app-release.apk

ثلاثة ألغام مُثبَتة بالتجربة — لا تكتشفها من جديد

  1. البناء داخل iCloud يُنتج ملفاً معطوباً بصمت. على أندرويد يخرج APK مبتور بلا فهرس (EOCD) رغم أنّ جريدل يطبع ✓ Built والحجم يبدو صحيحاً؛ وعلى iOS يرفض codesign التوقيع. والعلاج الوحيد المُثبَت: انسخ المشروع خارج المجلد المزامَن وابنِ هناك (زمن البناء ينزل من ١٩٠٢ ثانية إلى ٩٥).
  2. «✓ Built» ليست دليل سلامة. تحقّق من الأثر نفسه قبل أي رفع:
    python3 -c "import zipfile;zipfile.ZipFile('app-release.aab')"   # يرمي استثناءً إن كان مبتوراً
  3. احذف --no-tree-shake-icons وسينهار البناء بـBad state: No element في قاصّ الأيقونات.

بنية المشروعين

lib/
  core/     الهوية والشبكة والثيم والمكوّنات المشتركة
  modules/  وحدة لكل خدمة (بريد، تقويم، اجتماعات، ملفات، محاضر)  [فيوسويت]
  ui/       الشاشات (دخول، شات، غرف، اجتماع، حسابي)              [فيوسبيس]
android/    إعداد أندرويد + مفتاح التوقيع
ios/        مشروع Xcode                                          [فيوسبيس فقط]
test/       ٣٦٢ اختباراً في فيوسويت — شغّلها بـ flutter test قبل أي رفع

في فيوسويت اقرأ ARCHITECTURE.md وdocs/BUILD.md قبل أي تعديل — فيهما العقود الحاكمة. وفي فيوسبيس المرجع الكامل في مهارة fuspace-fudex/FLUTTER-APP.md.

٧) مفاتيح التوقيع والأسرار

مفتاح التوقيع أخطر ملف في المشروع. فقدانه يعني أنّ التطبيق المثبَّت على أجهزة الفريق لا يقبل أي تحديث بعده أبداً، وتبديله يفرض حذف التطبيق وإعادة تثبيته على كل جهاز. لا يُرفع المفتاح على أي مستودع عام ولا يُرسَل في محادثة مفتوحة.

الحزمة المشفّرة في القسم ٣ تضمّ: كامل كود المشروعين، مفتاحَي التوقيع (fuspace-upload.keystore وfusuite-release.jks)، ملفَّي key.properties، وملفات google-services.json. كلمة المرور تصل من أبوأحمد مباشرةً لا من هذه الصفحة.

# فكّ الحزمة (سيسأل عن كلمة المرور):
openssl enc -d -aes-256-cbc -pbkdf2 -iter 250000 \
  -in fudex-apps-handover.tar.gz.enc -out handover.tar.gz
tar -xzf handover.tar.gz

بعد الفكّ ضع كل مفتاح في مكانه (المسارات موصوفة في README-HANDOVER.md داخل الحزمة)، ثمّ تحقّق:

keytool -list -v -keystore fuspace-upload.keystore -alias fuspace | grep SHA-256

٨) آبل — الوضع والناقص

لماذا لا تجد هنا «حزمة آبل» مقابل حزم أندرويد: لا يمكن إنتاج ملف .ipa صالحاً للرفع قبل توفّر شهادة توزيع وملف تعريف وسجلّ تطبيق — وهذه الثلاثة تُنشأ من كونسول آبل بحساب أبوأحمد، ولا تُنشأ من جهاز البناء. فالناقص إذنٌ وحسابٌ لا كودٌ أو بناء. الروابط أدناه تفتح الصفحات المطلوبة بالضبط.

الموجود: اشتراك Apple Developer مدفوع وفعّال (فريق Fudex · TBYZE4288M)، ومفتاح App Store Connect API (AuthKey_42427HP49T.p8) محفوظ على جهاز أبوأحمد، ومشروع iOS لفيوسبيس يُبنى فعلاً ويعمل بالعربية (بُني ونُفّذ على المحاكي).

روابط آبل — كل رابطٍ يفتح الصفحة المطلوبة مباشرة

الغرضالرابطمَن ينفّذه
حساب المطوّر والعضويةdeveloper.apple.com/accountأبوأحمد
Issuer ID لمفتاح الـAPI (الحاجب الأول)appstoreconnect.apple.com/access/integrations/apiأبوأحمد — نسخ المعرّف فقط
شهادة التوزيع Apple Distribution (الحاجب الثاني)…/resources/certificates/listأبوأحمد أو تُنشأ بالـAPI بعد Issuer ID
معرّف التطبيق Bundle ID sa.com.fudex.fuspace…/resources/identifiers/listالفريق التقني
ملف تعريف التوزيع Provisioning Profile…/resources/profiles/listالفريق التقني
سجلّ التطبيق في المتجر (الحاجب الثالث)appstoreconnect.apple.com/apps ← زر + New Appأبوأحمد
TestFlight (اختبار قبل النشر)داخل صفحة التطبيق ← تبويب TestFlightالفريق التقني
أداة الرفع TransporterTransporter على ماك آب ستورالفريق التقني
سياسة الخصوصية والشروط (إلزامية لآبل أيضاً)apps.fudex.com.saجاهزة

الترتيب الصحيح لفكّ الحجب (كل خطوة تفتح التي بعدها)

  1. أبوأحمد ينسخ Issuer ID من رابط الـAPI أعلاه ويسلّمه للفريق التقني.
  2. بالمفتاح + Issuer ID تُنشأ شهادة التوزيع وملف التعريف (يدوياً أو آلياً).
  3. يُنشأ سجلّ التطبيق من + New App بالحزمة sa.com.fudex.fuspace.
  4. عندها فقط: flutter build ipa ← رفع بـTransporter ← TestFlight ← المتجر.

الناقص — ثلاثة، كلّها من كونسول آبل:

  1. Issuer ID للمفتاح: App Store Connect ← Users and Access ← Integrations ← App Store Connect API — انسخ المعرّف. بدونه لا مصادقة ولا رفع آليّ.
  2. شهادة توزيع (Apple Distribution): تُنشأ من Certificates, Identifiers & Profiles — الموجود محلياً شهادة تطوير فقط.
  3. سجلّ التطبيق في App Store Connect لحزمة sa.com.fudex.fuspace + ملف تعريف توزيع (Provisioning Profile).

بعدها: flutter build ipa ثم الرفع عبر Transporter أو xcrun altool، ثم TestFlight قبل المتجر.

فيوسويت لا يملك مشروع iOS أصلاً (ios/ غير موجود). إنشاؤه عملٌ منفصل: توليد المشروع، ضبط الأذونات (ميكروفون/كاميرا/تنبيهات)، مفتاح APNs في Firebase، ثم البناء والتوقيع. قدّر له جلسة عمل كاملة — ولا يعطّل إطلاق أندرويد.

٩) ما ينقص قبل الإطلاق ومَن يوفّره

الناقصلماذا يوقف الإطلاقمَن يوفّره
حساب اختبار للمراجع (بريد + كلمة مرور)المراجع لا يستطيع تجاوز شاشة الدخول ⇒ رفض شبه مؤكّدفريق التقنية — حساب فيودكس مخصّص للمراجعة، صلاحيات محدودة
أصول صفحة المتجر: صورة مميّزة 1024×500 و٢–٨ لقطات لكل تطبيقلا يُقبل نشر التطبيق بدونهافريق التصميم (يمكن توليدها عبر FuArt)
وصف المتجر عربي + إنجليزيحقل إلزاميجاهز نصوص للّصق في القسم ٣٫٥ — للمراجعة والتعديل
أيقونة 512×512 لفيوسويت بجودة أصليةالمرفقة مكبّرة من 192px — مقبولة تقنياً وأقلّ حِدّةالتصميم
Apple: Issuer ID + شهادة توزيع + سجلّ التطبيقلا رفع لآبل بدونهاأبوأحمد (من كونسول آبل)
مشروع iOS لفيوسويتغير موجودفريق التقنية — جلسة عمل منفصلة
صلاحيات أعضاء الفريق على Play Consoleلا يستطيعون الرفعأبوأحمد — دعوة من Users and permissions
جاهز فعلاً: الحزم الموقّعة · سياستا الخصوصية · الشروط والأحكام (عربي/إنجليزي) · صفحة التواصل · نصوص المتجر · مفاتيح التوقيع · حساب بلاي المدفوع · اشتراك آبل · Firebase.

١٠) قواعد لا تُخالَف