تطوير التطبيقات

نشر التطبيق، من المتاجر المحلية إلى غوغل بلاي

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

  • الدرس 7 من 8
  • متوسط
  • مجاني، دون تسجيل

محطات النشر الخمس، وتلك التي لا رجعة منها

أربع من هذه يمكن السير فيها ثانيةً. أما الثانية فلا.

  1. 1

    بناء نسخة الإصدار

    السجلات مطفأة والتنقيح مطفأ ومعلومات النسخة مضبوطة.

  2. 2

    التوقيع

    مفتاح التوقيع هوية التطبيق. وفقدانه ينهي تحديثات ذلك التطبيق.

  3. 3

    الإدراج في متجر

    العنوان والوصف واللقطات والأيقونة. واحتفظ بنسخة من كل ذلك عندك.

  4. 4

    مراجعة المتجر

    قواعد كل متجر تخصه وتتغير بلا إشعار.

  5. 5

    الإصدار للمستخدمين

    ومن هنا فصاعداً كل تغيير نسخة جديدة ورمز النسخة يجب أن يتقدم.

الترتيب دائماً هكذا أما التوقيت فلا: قد تستغرق مراجعة المتجر ساعات أو أياماً ولا نذكر لها رقماً.

آخر مراجعة: تُراجع الحقائق وأسماء الأدوات في هذا الدرس مقابل مصادرها في هذا التاريخ.

ماذا يشمل نشر التطبيق بالضبط؟

وثائق أندرويد تقسم العمل كله إلى نصفين، وهذا التقسيم كافٍ للتخطيط: تحضير التطبيق للإصدار، ثم إيصاله إلى المستخدمين.

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

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

ونقطة تقنية تغيّر ترتيب العمل: منذ آب 2021 لا يقبل غوغل التطبيقات الجديدة إلا بصيغة App Bundle لا ملف APK. وتشرح وثائق أندرويد أن App Bundle صيغة نشر ولا يمكن تثبيتها على جهاز؛ بل يبني المتجر ملفات APK منها. والفرق بين الصيغتين مفتوح في كيف يعمل التطبيق. والمتاجر الإيرانية ما زالت تعمل بـAPK، فإن أردت الطريقين وجب أن تُخرج الصيغتين من مشروع واحد منذ اليوم الأول.

نشر التطبيق: البناء والتوقيع والإدراج والمراجعة والإصدار

لماذا مفتاح التوقيع أهم ملف في المشروع كله؟

لا يثبّت أندرويد تطبيقاً ولا يحدّثه بلا توقيع رقمي. وهذا التوقيع بمثابة بطاقة هوية التطبيق: به يعرف نظام التشغيل أن النسخة الجديدة جاءت فعلاً ممن صنع السابقة.

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

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

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

وعملياً: في اليوم الأول، ضع مفتاح التوقيع وكلمة سره في مكان يبقى بعد ضياع الحاسوب المحمول، وذلك المكان يجب ألا يكون مستودع الكود. فهو الملف الوحيد في المشروع الذي لا يعوّضه مال ولا وقت.

أربع قواعد تنقذ مفتاح التوقيع

  • خارج مستودع الكود

    المفتاح وكلمة سره يجب ألا يعيشا حيث يعيش الكود، ولو كان المستودع خاصاً.

  • نسختان في مكانين مختلفين

    واحدة على الحاسوب المحمول لا تكفي. فالحواسيب تضيع ويضيع المفتاح معها.

  • أكثر من شخص لديه وصول

    إن كان شخص واحد وحده يعرف كلمة السر فالمشروع معلق بذلك الشخص.

  • مفتاح واحد لكل المتاجر

    إن أردت مفتاحاً واحداً عبر المتاجر فعليك تقديم مفتاحك أنت لا مفتاحاً مولّداً.

هذه الأربع لا تحل محل نسخ احتياطي منتظم؛ بل تسد أشيع طرق فقدان المفتاح فقط.

غوغل بلاي من إيران: ماذا يقول جدول غوغل نفسه؟

بدل أي تحليل، نكتب هذا القسم عن صفحة رسمية واحدة، ونعطيك طريقة القراءة كي تفعل الشيء نفسه بنفسك.

لدى غوغل صفحة اسمها المواقع المدعومة لتسجيل المطوّر والتاجر، وهي جدول بثلاثة أعمدة: دعم تسجيل المطوّر، ودعم تسجيل التاجر، والعملة الافتراضية. قرأنا هذه الصفحة اليوم وعددناها. الجدول يحمل 214 صف دولة، وفي عمود تسجيل المطوّر كل الـ214 عليها علامة صح.

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

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

وثمة قيد تقني لا علاقة له بالبلد ويطال الجميع وله تاريخ. تقول وثائق أندرويد إنه ابتداءً من 31 آب 2026 يجب أن تستهدف التطبيقات الجديدة والتحديثات أندرويد 16، أي مستوى الواجهة 36 أو أعلى، كي تُقدَّم إلى غوغل بلاي، وأن التطبيقات القائمة يجب أن تستهدف أندرويد 15 أو أعلى لتبقى متاحة للمستخدمين الجدد. وتقول الصفحة نفسها إنك إن احتجت وقتاً أطول للتحديث فسيمكنك طلب تمديد إلى 1 تشرين الثاني 2026. وهذه الأرقام تتغير كل عام، فانظر تاريخ التحقق في هذه الصفحة، وإن مضى فافتح تلك الصفحة بنفسك.

كافه بازار ومايكت: ما استطعنا فحصه وما لم نستطع

لتطبيق أندرويد جمهوره داخل إيران، كافه بازار ومايكت هما المكانان اللذان يثبّت منهما المستخدم فعلاً. وكوننا لم نكتب هنا شيئاً عن قوانينهما قرارٌ لا إغفال، وسببه قياسنا نحن اليوم.

ناديْنا موقعي المطورين كليهما من هذا الخادم. وكانت النتيجة أن أياً منهما لا يسلّم نص قوانينه لطلب HTTP بسيط. فكلاهما يرسل صفحة فارغة يبني محتواها لاحقاً جافاسكريبت في المتصفح. أي أن تلك القوانين لا وجود لها عملياً لأي قارئ بلا متصفح رسومي، بما في ذلك الأرشيفات وأدوات الفحص.

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

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

متجر أم ويب؟

هل يحتاج المنتج عتاد الهاتف أو الإشعارات كي يعمل؟

لا، هو قوائم ونماذج وطلبات

تطبيق ويب تقدمي

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

تطبيق متجر

  • المحطات الخمس نفسها أعلاه، والتوقيع في الثانية
  • وصول كامل إلى إمكانات الجهاز
  • يُرى ويُبحث عنه داخل المتجر
  • وكل تحديث يمر بالمراجعة ثانيةً

هذا السؤال ليس عن الجودة بل عن المكان الذي يبحث فيه مستخدمك عنك. وكلا العمودين يبني منتجات جادة.

الطريق الذي لا يمر بمتجر أصلاً

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

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

وموقفنا هنا صريح، لأن قوله ليس في مصلحة من يبيع تطبيقات: نصيب كبير من المشاريع التي تبدأ بوصفها «تطبيقاً» تحتاج عملياً موقعاً مبنياً جيداً لا تطبيق متجر. فإن كان كل ما يفعله المنتج ممكناً من متصفح، فالمتجر لم يضف إلا طبقة كلفة وتأخير. ومنشئ المواقع أم تصميم مخصص ينظر إلى السؤال نفسه من جهة الويب.

ولنقل بصدق أين يكون هذا الجواب خاطئاً. إن احتجت إشعارات موثوقة ودائمة، أو كنت تعمل مع البلوتوث أو مستشعرات بعينها، أو أردت دفعاً داخل التطبيق، أو كان جمهورك يجد التطبيق بالبحث في متجر، فتطبيق الويب لا يكفي وعليك أن تمشي المراحل الخمس أعلاه. والقرار بين الطريقين ليس تقنياً؛ بل يعتمد على أين يبحث عنك مستخدمك. وإن كان هذا القرار ثقيلاً على فريقك، فقد كتبنا في صفحة تطبيقات RGB على أي أساس نرجّح أحدهما.

ورقة ما قبل الرفعفي كل مرة لا في الأولى فقط

قبل الضغط على الرفع

  • رمز النسخة أعلى من الإصدار السابق
  • علم التنقيح مطفأ في هذا البناء
  • هذا الملف بعينه جُرّب على هاتف حقيقي ولوح حقيقي
  • الخوادم والخدمات التي يتصل بها التطبيق جاهزة للإنتاج
  • مستوى الواجهة المستهدف يطابق شرط ذلك المتجر اليوم

هذه تعني لا ترفع بعد

  • مفتاح التوقيع موجود على جهاز واحد فقط
  • كلمة سر المفتاح مكتوبة في مستودع الكود
  • نص المتجر وصوره موجودة داخل لوحة المتجر فقط
  • أخذت شرط المتجر من الذاكرة أو من مقال

المسار السريع مع الذكاء الاصطناعي

المرحلة التي تأكل الوقت فعلاً ليست البناء ولا التوقيع، بل ما يطلبه المتجر منك: الوصف وملاحظات الإصدار وبعدة لغات. والنماذج جيدة في هذا بالذات، بشرط واحد مذكور أدناه، وذلك الشرط هو الفرق بين هذه الوصفة وأمر عادي.

  1. خذ قائمة تغييرات هذه النسخة كما هي، ولو كانت خاماً وتقنية. فهي المدخل ولست مطالباً بترتيبها بنفسك.
  2. افتح صفحة شروط المتجر اليوم بنفسك وضع نصها بجانب تلك القائمة. فهي المصدر الوحيد الذي يُسمح للوصفة أدناه بنقل شرط منه.
  3. شغّل الوصفة بنموذج سريع رخيص من عائلة النماذج المدمجة. فهذا عمل ترجمة وتلخيص لا حكم؛ والنموذج الغالي هنا كلفة فقط. واختيارنا الحالي مذكور في قسم الذكاء الاصطناعي في الموقع.
  4. قابل المخرجات بقائمة التغييرات واحذف كل جملة تقول شيئاً لا تحويه القائمة. فملاحظة إصدار تعد بقدرة ليست في ذلك البناء أسوأ أنواع العلل، لأنها ليست في الكود.

وصفة جاهزة للنسخ

هذه قائمة تغييرات النسخة الجديدة من تطبيقي، خاماً وتقنية:
{قائمة التغييرات كما هي}

وهذا نص صفحة شروط المتجر التي فتحتها بنفسي اليوم:
{نص صفحة الشروط}

أعطني ثلاثة أشياء:

1) ملاحظات الإصدار بلغات {قائمة اللغات}، وبحد أقصى {عدد} محرفاً لكل لغة. بنبرة بسيطة بلا مديح للذات. وكل سطر يجب أن يعود إلى سطر في القائمة أعلاه.

2) وصف المتجر بالغات نفسها، بنسختين: فقرة قصيرة ونص أطول.

3) قائمة بالأعمال الميكانيكية الواجب فحصها قبل الرفع، بناءً على نص الشروط الذي أعطيتك أعلاه فقط ولا شيء غيره.

قواعد صارمة:
- لا تكتب أي قدرة ليست في قائمة التغييرات. وحيث يكون السطر غامضاً فلا تخمّن بل ضعه في قائمة منفصلة اسمها «غامض».
- لا تكتب أي شرط متجر من معرفتك أنت. انقل من النص الذي أعطيتك فقط، وحيث لا يكون الشيء في ذلك النص فاكتب «ليس في النص المعطى».
- لا تضف من عندك أي تاريخ ولا رقم نسخة نظام تشغيل ولا نسبة ولا سعراً.
- لا تدّعِ شيئاً عن السرعة أو الأمان أو الجودة ما لم يكن سطره المقابل في قائمة التغييرات.

قبل أن تثق بالناتج: شيئان عليك فحصهما بنفسك قبل الرفع ولا يستطيع نموذج أن يفعلهما عنك. الأول، اقرأ قائمة «غامض»؛ فإن عادت فارغة فالأرجح أن النموذج خمّن بدل أن يشير، وعليك إعادة إرسال الوصفة نفسها. والثاني، قارن كل شرط في المخرجات بصفحة المتجر التي فتحتها بنفسك لا بذاكرتك. فقواعد المتاجر تتغير بلا إشعار، وهنا بالضبط يقول نموذج بثقة شيئاً كان صحيحاً العام الماضي.

الذكاء الاصطناعي في هذا العمل

في النشر، تنفع مساعدة الذكاء الاصطناعي في موضع واحد بالضبط وتخطر في موضع، والموضعان متجاوران. تنفع في النص: وصف المتجر وملاحظات الإصدار وترجمتها. وتخطر في القواعد: فكل جملة يقولها نموذج عن سياسة متجر تخمين، إلا أن تكون قد وضعت نص تلك الصفحة أمامه بنفسك.

أدوات تساعد فعلا

  • Gemini مجدٍ اقتصادياً لتمريرة النص والترجمة متعددة اللغات أعلاه، حيث يكون النموذج الغالي كلفة فقط. وصفحة غوغل نفسها تقول إن تطبيق جيميناي على الويب يعمل في أكثر من مئتين وثلاثين دولة ومنطقة، وإيران ليست في تلك القائمة.
  • Claude حين تضع أمامه نص صفحة الشروط وتطلب النقل منها وحدها، يلتزم بالقيد أفضل. وإيران ليست في أي من قائمتي الدول المدعومة لدى أنثروبيك. قرأنا ذلك في صفحة أنثروبيك نفسها لا بقياس شبكي.
  • Claude Code ينفع للتمريرة الميكانيكية قبل الرفع على المشروع نفسه: قراءة إعدادات البناء وإيجاد المواضع التي ما زال فيها علم التنقيح مشتعلاً. ويعمل على حساب أنثروبيك نفسه وإيران ليست في القائمة.

اين ينقلب ضدك

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

المصادر: Android Developers: sign your app and Play App Signing Android Developers: target API level requirements for Google Play Anthropic: supported countries Google: where Gemini Apps are available

حدود هذه النصيحة

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

من عملنا نحن

الشيئان اللذان يقولهما هذا الدرس عن المتاجر قِسناهما اليوم من هذا الخادم، وكلاهما يتكرر بأمر واحد. الأول، صفحة المواقع المدعومة في غوغل بلاي: أخذنا جدولها وعددناه، 214 صف دولة، وكلها الـ214 عليها علامة صح في عمود تسجيل المطوّر، وسلسلة Iran ترد صفر مرة في الصفحة كلها بينما ترد Iraq. والثاني، موقعا المطورين الإيرانيان: أعاد developers.cafebazaar.ir الصفحة نفسها بحجم 4243 بايت لكل مسار طلبناه، من الصفحة الرئيسة إلى /fa/guidelines و/docs، ونصها المقروء الوحيد كلمة Loading، وrobots.txt فيه صفر بايت؛ ويعيد developer.myket.ir صفحة بحجم 17703 بايت نصها المقروء الوحيد عنوان لوحة مطوري مايكت، ويقدّم الصفحة نفسها لطلب robots.txt أيضاً. ولهذا لم يُنقل سطر واحد من قوانينهما في هذا الدرس: لا لأننا لم نرد، بل لأنه لم يكن مقروءاً من مصدره.

اسئلة متابعة حقيقية

هل نحتاج تطبيقين منفصلين للنشر في متجر محلي وفي غوغل بلاي؟

لا، هو مشروع واحد بمخرجين. فغوغل بلاي يريد App Bundle للتطبيقات الجديدة والمتاجر المحلية تأخذ APK، وكلاهما يُبنى من قاعدة كود واحدة. والذي يجب أن يبقى واحداً هو مفتاح التوقيع، وذلك فقط إن قدّمت مفتاحك أنت من البداية.

إن فقدنا مفتاح التوقيع فهل حقاً لا سبيل؟

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

هل يمكن إدراج تطبيق ويب تقدمي في المتاجر أيضاً؟

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