الجواب القصير. لا تتحكمون متى يحدّث الزبون ولا إن كان يحدّث؛ تتحكمون فيما يفعله التطبيق عند البدء وفيما تجيبه الواجهة. إذن: كل استدعاء يحمل نسخة التطبيق، والواجهة تضيف حقولاً ولا تحذف حقلاً بلا تاريخ أبداً، والمسارات القديمة مُبقاة حتى تاريخ مكتوب، والخادم هو من يقرر من يرى شريطاً ليّناً ومن يرى شاشة التحديث المطلوب. النسخة الجديدة تخرج على المتجرين بـ نشر تدريجي، 5 % ثم 20 % ثم 100 % على Android، وسبعة أيام مرحلية على iOS، بـ عتبة انهيار تُكتب مسبقاً وإيقاف إن تُجوزت. النصوص والشاشات والعروض تمر بـ أعلام وبالواجهة لا بتقديم. والتصحيح الحرج يخرج في يوم بالمسار نفسه. ولا تُرفع النسخة الدنيا إلا بعد اعتماد 90 %، لا يوم الإصدار أبداً.
هذا الدليل موجّه إلى المسيّر الذي يُثبَّت تطبيقه عند مئات الزبائن أو الموصّلين، وإلى المؤسس المقيم في فرنسا الذي لا يستطيع الاختبار على هواتف مستعمليه في الجزائر، وإلى المسؤول الذي يجب أن يقارن عرضَي صيانة. لا يعيد ما يكلّفه التطبيق كل سنة، الموصوف في دليل حياة التطبيق، ولا كيف تُسلَّم منصة ويب دون كسرها، الموصوف في دليل التسليم؛ بل يصف ما يُبنى كي يكون تحديث المحمول حدثاً بلا خطر، ويمدّ صفحتنا عن التطبيقات المحمولة.
ما تقوله المتاجر
المراجعة أسرع مما يُظن، وأبطأ مما يحتاجه التصحيح. تكتب Apple أن مراجعة التطبيقات تعالج «50 % على الأقل من الطلبات في أقل من 24 ساعة و90 % في أقل من 48 ساعة»، وأنه يمكن طلب مراجعة معجَّلة «لإصلاح خطأ حرج» مع خطوات إعادة الإنتاج. وما يفرضه ذلك: التصحيح الحرج على iOS مسألة يوم إلى يومين حتى مع الطلب المعجَّل، ولهذا يجب أن يستمر التطبيق في العمل خلال ذلك، والوظيفة المعنية مطفأة بعلم تخدمه الواجهة.
النشر التدريجي موجود في المتجرين، لكن ليس بالطريقة نفسها. في App Store، الإصدار المرحلي «يطلق تحديث تطبيقكم تدريجياً على 7 أيام»، 1 %، 2 %، 5 %، 10 %، 20 %، 50 % ثم 100 % من المستعملين ذوي التحديث الآلي، ويمكن إيقافه مؤقتاً «حتى 30 يوماً»، ولا يمنع أحداً من تنزيل النسخة يدوياً. في Google Play، النشر على مراحل يُدار يدوياً: تختارون النسبة وترفعونها، ويمكنكم «إيقاف نشر على مراحل» إن وجدتم مشكلة، وعندها «لن يتلقى أي مستعمل إضافي» النسخة، ومن حصل عليها يحتفظ بها. وما يفرضه ذلك: على iOS نراقب ونوقف مؤقتاً؛ وعلى Android نقرر كل درجة، ولا تُتجاوز الدرجة التالية إلا حين تكون نسبة انهيار اليوم تحت العتبة.
المتجر يستطيع اقتراح التحديث داخل التطبيق نفسه. تحديثات Google Play داخل التطبيق، المدعومة «على الأجهزة التي تعمل بـ Android 5.0 أو أحدث»، تقدّم مسارين: المسار «المرن»، تنزيل في الخلفية بينما يواصل المستعمل، والمسار «الفوري»، شاشة كاملة «تتطلب من المستعمل التحديث وإعادة تشغيل التطبيق للمتابعة». ولا مقابل لذلك عند Apple: على iOS شاشة التحديث المطلوب شاشتكم أنتم، وتحيل إلى App Store. وأخيراً، كل سنة يرفع Google Play مستوى API المستهدف المطلوب للتحديثات، Android 16 بحلول 31 أوت 2026 حسب صفحة المساعدة، والتطبيق المتأخر «يتوقف عن التوفر لكل المستعملين الجدد» الذين يعمل هاتفهم بنظام أحدث من هدفه، ويحتفظ به المستعملون الحاليون. وما لم نجده: توزيع علني لنسخ Android في الجزائر؛ وما نراه في مشاريعنا هو هواتف من 2019 ما زالت، ونقولها ملاحظةً.
تحديث محمول، في خمس طبقات
قبل اليوم بيوم، الطبقات الخمس، والطبقة التي تجعل الأربع الأخرى ممكنة.
هاتف الزبون: التطبيق المثبَّت، نسخته، قاعدته المحلية، النظام، وأحياناً Android من 2019؛ لا تقررون متى يحدّث ولا إن كان يحدّث. المتاجر: المراجعة، النشر التدريجي أو المرحلي، الإيقاف أو التوقف المؤقت، التحديث داخل التطبيق، ومتطلبات النسخة المستهدفة السنوية. واجهتكم: نسخة التطبيق تُقرأ في كل استدعاء، النسخة الدنيا المقبولة، حقول تُضاف ولا تُحذف، مسارات قديمة مُبقاة حتى تاريخ؛ وهي الطبقة التي يجب أن تخاطب كل النسخ المثبَّتة معاً، وهي التي تقرر من يجب أن يحدّث.
المراقبة: الانهيارات لكل ألف جلسة لكل نسخة، الاعتماد يومياً، أخطاء الواجهة لكل نسخة، الأجهزة والأنظمة الموجودة فعلاً؛ العتبة تُكتب قبل النشر، والرقم يُقرأ كل صباح عشرة أيام على شاشة تُبنى مثل لوحة قيادة المسيّر. المسار: تجميد الكود، اختبارات على أجهزة قديمة، قطار إصدارات بتواريخ ثابتة، ملاحظات الإصدار، تصحيح في يوم، أعلام الميزات. وتطبيق تكسر واجهته النسخ القديمة لا خيار له: عليه تحديث الجميع دفعة واحدة، وهذا بالضبط ما لا يمكن فعله على هواتف لا تتحكمون فيها؛ وكل الباقي ينبع من هذه الجملة.
«تطبيق تكسر واجهته النسخ القديمة عليه تحديث الجميع دفعة واحدة، وهذا بالضبط ما لا يمكن فعله على هواتف لا تتحكمون فيها.»
تحديث واحد، يوماً بيوم، على المتجرين
النسخة تُفهم على عشرة أيام، ومسارين، وتوقف واحد.
اليوم 0: اختبارات داخلية على Android عبر المسار الداخلي، وتقديم على iOS. اليوم 1: 5 % من زبائن Android يتلقون النسخة؛ وiOS مقبولة. اليوم 2: 5 % مُبقاة، نسبة الانهيار 0,5 لكل ألف جلسة تحت عتبة 1,0؛ وiOS تبدأ مرحلتها عند 1 %. اليوم 3: الانتقال إلى 20 % على Android، ورقم الصباح يقول 2,1: انهيار عند الدفع على بعض أجهزة Android القديمة، لم تُظهره الـ 5 % لأنها لم تضم ما يكفي من تلك الهواتف. يُوقَف النشر؛ ولن يتلقى أحد بعد 20 % هذه النسخة. اليوم 4: تصحيح 2.4.1، مختبَر على Android 8، مقدَّم؛ ووظيفة الدفع المعنية كانت مطفأة بعلم منذ مساء الأمس، بلا تقديم، للـ 20 % المتأثرين.
اليوم 5: تخرج 2.4.1 عند 20 %، والنسبة تهبط إلى 0,3. اليوم 6: 50 %. اليوم 7: 100 % على Android؛ وiOS عند 50 % من منحناها وتنتهي في اليوم 8. خلال هذه الأيام العشرة خدمت الواجهة 2.3 و2.4 معاً: لم يُحجب أحد، والـ 71 % من الزبائن الباقين على 2.3 واصلوا الطلب. وأرقام الانهيار في هذه الحكاية مثال مبني؛ وما ليس مبنياً هو ترتيب القرارات، وكون التوقف قُرر برقم قُرئ في الصباح لا بزبون على الهاتف.
ستة أنواع من التغيير، والمسار الذي يسلكه كل منها
ليس كل شيء يمر بالمتاجر، ومعظم التغييرات لا ينبغي أن تمر.
نص، لون، شاشة: علم ميزة أو محتوى تخدمه الواجهة؛ فعّال في اليوم نفسه لكل النسخ. حقل جديد: يُضاف إلى الرد ولا يكون إلزامياً أبداً؛ النسخة القديمة تتجاهله بلا خطأ، والجديدة تقرؤه؛ وهو التغيير الأكثر تكراراً ولا يكلّف شيئاً حين تُحترم القاعدة. تصحيح حرج: نسخة تصحيحية في اليوم نفسه، مراجعة معجَّلة تُطلب مع خطوات إعادة الإنتاج، تحديث فوري يُقترح داخل التطبيق على Android، وشاشة تحديث على iOS بعد ظهور النسخة.
القاعدة المحلية تتغير: ترحيل مُرقَّم يُنفَّذ عند البدء، مختبَر على قاعدة ممتلئة وجهاز قديم، ولا حذف عمود في النسخة نفسها أبداً؛ وهو الجزء الهش في تطبيق يعمل دون اتصال، الموصوف في دليل المزامنة. شاشة تختفي: العلم يُطفأ أولاً للجميع، والكود يُحذف بعد نسختين. الواجهة تغيّر شكلها: مسار v2 جديد، v1 مُبقى حتى تاريخ مكتوب، النسخة الدنيا تُرفع بعد اعتماد 90 %. أربعة من التغييرات الستة لا تمر بالمتاجر أو لا تمر فوراً؛ وردّ الفعل «نُخرج نسخة» يُحتفظ به لما يغيّر الكود المثبَّت فعلاً.
واجهة واحدة، ثلاث نسخ مثبَّتة في اللحظة نفسها
التوافق لا يُقرَّر في التطبيق بل في الواجهة، ويُرى على ثلاثة هواتف.
كل استدعاء يحمل نسخة التطبيق في ترويسة، والخادم يجيب كلاً منها بشكل مختلف. النسخة 2.2، على Android من 2019 لم يُحدَّث قط، تحت النسخة الدنيا: تتلقى رداً يقول «نسخة قديمة جداً»، ويعرض التطبيق شاشة التحديث المطلوب برابط المتجر، وعلى Android التحديث الفوري داخل التطبيق. والنسخة 2.3، الحالية عند 71 % من الزبائن، تتلقى بياناتها وشريطاً ليّناً؛ والحقل الذي أضافته 2.4 موجود في الرد وتتجاهله بلا خطأ. والنسخة 2.4 تقرأ الحقول الجديدة على مسار v2.
ثلاث قواعد تحمل هذا الرسم. نضيف حقولاً ولا نحذف بلا تاريخ أبداً: ما دامت نسخة مخدومة تقرأ حقلاً فهو يبقى. المسارات القديمة تُبقى حتى تاريخ مكتوب في العقد، لا «حين يهاجر الجميع». والنسخة الدنيا يرفعها الخادم، بعد اعتماد 90 % ونسبة انهيار مستقرة، لا يوم الإصدار أبداً، ولا إلى نسخة لم تظهر بعد في المتجرين. وحصص الرسم مثال؛ وسجل الاستدعاءات لكل نسخة، المقروء كل أسبوع، يعطي الحقيقية، وهو ما يقول متى تُرفع النسخة الدنيا.
«نضيف حقولاً ولا نحذف بلا تاريخ أبداً؛ والخادم هو من يقرر من يجب أن يحدّث.»
ستة أعطال تحديث، وما تفعله الهندسة
ستة أعطال نراها في التطبيقات التي نستلمها، ودفاع كل منها.
التطبيق يرفض البدء على هواتف 2019: النسخة الدنيا للنظام تُقرَّر على الأجهزة الموجودة فعلاً في السجل لا على الإحصاءات العالمية، والتطبيق القديم يستمر في الخدمة. حقل حُذف من الواجهة يُسقط كل النسخ القديمة في الصباح نفسه: اختبارات عقد تُجرى على آخر ثلاث نسخ قبل كل إنتاج. الترحيل المحلي يفسد القاعدة وتختفي طلبيات الأسبوع دون اتصال: ترحيل مختبَر على قاعدة ممتلئة، نسخة احتياطية محلية قبل الترحيل، 5 % أولاً.
تحديث إجباري إلى نسخة غائبة: الخادم يطلب 2.4 وهي قيد المراجعة فيُحجب الجميع؛ لا تُرفع النسخة الدنيا إلا بعد ظهور النسخة في المتجرين واعتمادها. التصحيح يزيد سوءاً: خرج بلا اختبار إلى 100 %؛ المسار نفسه كأي نسخة. لا أحد يراقب: النسبة تتضاعف ونعرفها من زبون؛ لوحة لكل نسخة تُقرأ كل صباح، تنبيه فوق العتبة. وكل هذه الأعطال تُرى عند 5 % قبل أن تُرى عند 100 %، وهذا هو السبب الوحيد للنشر التدريجي؛ والتطبيق المستلَم من مقدّم خدمة اختفى، كما في الدليل المخصص، يبدأ بهذه اللوحة.
رأيناه في مكان آخر: وثائق المتاجر، وما ينتقل
ثلاثة مصادر تقول الجوهر. توثّق Apple الإصدار المرحلي على سبعة أيام، والتوقف المؤقت حتى ثلاثين يوماً، وآجال المراجعة والمراجعة المعجَّلة لخطأ حرج؛ وما ينتقل هو أن تصحيح iOS مسألة يوم إلى يومين، وأن التطبيق يجب أن يصمد تلك المدة والوظيفة مطفأة بعلم. وتوثّق Google النشر على مراحل المُدار يدوياً، والإيقاف، والتحديثات داخل التطبيق المرنة أو الفورية؛ وما ينتقل هو أن كل درجة على Android قرار يُتخذ على رقم الصباح، وأن التحديث الفوري أداة النسخة الدنيا. وتوثّق Google أيضاً الهدف السنوي، Android 16 بحلول 31 أوت 2026؛ وما ينتقل هو نسخة إضافية في القطار كل صيف تُخطَّط في جوان.
وما لا تقوله هذه المصادر: أي الهواتف يملك زبائنكم، وأي عتبة انهيار تقبلون، وكم نسخة تخدمون معاً؛ سجل الاستدعاءات لكل نسخة يجيب عن الأول، ودفتر الشروط عن الآخرين.
قواعد تحديث يمكن تسليمه دون ارتجاف
ست قواعد تُكتب قبل النسخة الأولى. كل استدعاء يحمل نسخة التطبيق. الواجهة تضيف ولا تحذف بلا تاريخ أبداً. الخادم يقرر النسخة الدنيا، بعد الاعتماد، لا يوم الإصدار أبداً. نشر تدريجي على المتجرين بعتبة انهيار تُكتب مسبقاً وإيقاف ممكن. اختبارات على الأجهزة الموجودة فعلاً، ومنها القديمة، وعلى قاعدة محلية ممتلئة. النصوص والشاشات والعروض تمر بأعلام لا بتقديم.
قاعدة سابعة تخص عرض السعر: «صيانة التطبيق وتحديثاته» ليس متطلباً بل جملة؛ المتطلب يُكتب «نسخة التطبيق في كل استدعاء؛ قاعدة الإضافة بلا حذف ومسارات مُبقاة حتى تاريخ؛ نسخة دنيا تُقرَّر في الخادم بعد الاعتماد؛ نشر تدريجي بعتبة انهيار وإيقاف؛ تحديث داخل التطبيق على Android وشاشة التحديث المطلوب على iOS؛ أعلام الميزات؛ ترحيلات محلية مُرقَّمة مختبَرة على قاعدة ممتلئة؛ اختبارات عقد على آخر ثلاث نسخ؛ لوحة انهيارات واعتماد لكل نسخة؛ تصحيح في يوم بالمسار نفسه؛ نسخة Android المستهدفة كل صيف»، ويُتحقَّق منه كما يوصي دليل دفتر الشروط. وعرض السعر الذي يسعّر «النشر في المتاجر» سعّر اليوم 0 من مسار عشرة أيام.
ستة تطبيقات، والتحديث الذي يخيفها أكثر
ستة تطبيقات نصونها كثيراً، ولكل منها التحديث الذي يتطلب أكبر عناية.
- تطبيق المندوبين الميدانيين، الموصوف في الدليل المخصص. قاعدة محلية مليئة بطلبيات الجولة؛ الترحيل المحلي يُختبر على هاتف عائد من ثلاثة أيام بلا شبكة.
- تطبيق الموصّلين، الموصوف في الدليل المخصص. مئتا هاتف متباينة؛ النسخة الدنيا للنظام تُقرَّر على السجل، والتحديث الفوري يتم في المستودع على الواي فاي لا في الجولة.
- تطبيق قاعة الرياضة، الموصوف في الدليل المخصص. مراقبة الدخول يجب أن تعمل مع النسخة القديمة يوم الإصدار؛ صيغة الشارة الجديدة تُضاف والقديمة تبقى مخدومة.
- تطبيق الدفع، الموصوف في دليل الدفع الإلكتروني. تصحيح الدفع يخرج في يوم، والوظيفة تُقطع بعلم في الانتظار.
- تطبيق وكالة العمرة، الموصوف في الدليل المخصص. الحجاج في الخارج خلال الموسم؛ لا تحديث إجباري أثناء الرحلة، أعلام فقط.
- التطبيق المُدار من فرنسا، الموصوف في الدليل المخصص. المؤسس لا يرى هواتف زبائنه؛ لوحة النسخ عينه الوحيدة، ويقرؤها كل صباح عشرة أيام.
تقويم 2027
التقويم تقويم نسخة تُسلَّم في ثمانية أسابيع، واحد منها فقط للنشر.
الأسبوع 0 إلى 1 يجمّد الكود ويكتب ملاحظات الإصدار للزبون وللمتاجر. الأسبوع 1 إلى 2 يختبر على أجهزة قديمة، Android 8 و10، iPhone عمره ست سنوات، شبكة بطيئة، الترحيل المحلي على قاعدة ممتلئة، ويجري اختبارات العقد على آخر ثلاث نسخ. الأسبوع 2 إلى 3 يقدّم إلى المتجرين، مع المسار الداخلي في Google Play بالتوازي. الأسبوع 3 إلى 4 هو النشر التدريجي، 5 %، 20 %، 50 %، 100 % على Android ومراحل iOS، مع إيقاف إن تُجوزت العتبة.
الأسبوعان 3 إلى 5 يراقبان، الانهيارات وأخطاء الواجهة لكل نسخة كل صباح، ويُخرجان تصحيحاً في يوم عند الحاجة بالمسار نفسه. الأسبوعان 6 إلى 8 يرفعان النسخة الدنيا بعد اعتماد 90 % ونسبة مستقرة؛ والمتأخرون يرون شاشة التحديث المطلوب. وكل نسخة تُعرض على الزبون قبل التقديم كما يصف دليل التسليم؛ وكل صيف في 31 أوت، هدف Android الذي يطلبه Google Play نسخة إضافية في القطار تُخطَّط في جوان. والاختيار بين تطبيق أصلي وتطبيق ويب قابل للتثبيت، الموصوف في الدليل المخصص، يغيّر هذا التقويم: تطبيق الويب القابل للتثبيت لا أسبوع 2 إلى 3 له.
ما يُفشل تحديثاً محمولاً
التطبيقات التي نستلمها فشلت دائماً تقريباً في تحديث لأحد هذه الأسباب.
- واجهة لا تعرف نسخة التطبيق. يستحيل معرفة من ينهار، ويستحيل إجبار أحد بنظافة.
- حقل حُذف «لأن لا أحد يستعمله». الـ 6 % الذين كانوا يستعملونه يتصلون في الغد.
- 100 % دفعة واحدة. الانهيار يُرى عند كل الزبائن بدل 5 %.
- النسخة الدنيا رُفعت يوم الإصدار. النسخة لم تظهر بعد في App Store؛ الجميع محجوب.
- الاختبارات على هاتف المطوّر. طراز حديث، على الواي فاي، في الجزائر العاصمة؛ والزبائن على Android من 2019، بشبكة 3G، في سطيف.
- الترحيل المحلي بلا نسخة احتياطية. طلبيات الأسبوع دون اتصال تختفي ولا تعود.
- لا أحد ينظر إلى اللوحة. نسبة الانهيار تتضاعف، ونعرفها من زبون.
أسئلة شائعة
الأسئلة التي نتلقاها من مسيّرين ومؤسسين ومسؤولي إعلام آلي.
- لماذا ما زال نصف زبائني على النسخة القديمة؟
- لأن التحديث يتوقف على الهاتف: إعدادات التحديث الآلي، الواي فاي، المساحة الحرة، نسخة النظام. على iOS لا يصل الإصدار المرحلي إلا إلى ذوي التحديث الآلي، 1 % في اليوم الأول و100 % في السابع؛ وعلى Android أنتم من يختار النسبة. والتطبيق المبني جيداً لا يحتاج إلى أن يكون الجميع محدَّثين: الواجهة تخدم عدة نسخ معاً، والنسخة الدنيا لا تُرفع إلا بعد الاعتماد.
- هل يمكن إجبار التحديث؟
- نعم، لكن بالخادم لا بالتطبيق: كل استدعاء يحمل النسخة، وتحت النسخة الدنيا تجيب الواجهة «نسخة قديمة جداً» ويعرض التطبيق شاشة التحديث المطلوب، وعلى Android التحديث الفوري داخل التطبيق. ولا تُرفع النسخة الدنيا إلا بعد اعتماد 90 % ونسبة انهيار مستقرة، ولا إلى نسخة لم تظهر بعد في المتجرين أبداً.
- كم من الوقت لإصلاح خطأ حرج؟
- يوم للنسخة التصحيحية، ثم المراجعة: تقول Apple إنها تعالج 50 % على الأقل من الطلبات في أقل من 24 ساعة و90 % في أقل من 48، ويمكن طلب مراجعة معجَّلة لخطأ حرج. وخلال ذلك تُطفأ الوظيفة المعنية بعلم تخدمه الواجهة، بلا تقديم، ويستمر التطبيق في العمل.
- هل يجب أن يمر كل شيء بالمتاجر؟
- لا. النصوص وترتيب الشاشات والعروض والمحتويات تمر بأعلام وبالواجهة، فعّالة في اليوم نفسه لكل النسخ. والحقل الجديد يُضاف إلى الواجهة بلا تقديم. ولا يمر بنسخة إلا ما يغيّر الكود المثبَّت فعلاً: شاشة جديدة، قاعدة محلية معدَّلة، تصحيح انهيار.
- كيف تختبرون على هواتف لا أراها؟
- سجل الاستدعاءات لكل نسخة وجهاز يقول أي الهواتف والأنظمة موجودة فعلاً عند زبائنكم؛ نختبر على تلك الطرازات، ومنها القديمة، وعلى شبكة بطيئة. ثم يفعل النشر التدريجي الباقي: 5 % من الزبائن هم الاختبار الأخير، وعتبة الانهيار تقرر ما يلي.
- ماذا يحدث مع Google Play كل سنة؟
- كل 31 أوت يرفع Google Play نسخة Android المستهدفة المطلوبة للتحديثات، Android 16 بحلول 31 أوت 2026 حسب صفحة مساعدته؛ والتطبيق المتأخر يتوقف عن العرض على المستعملين الجدد الذين يكون هاتفهم أحدث من هدفه، ويحتفظ به المستعملون الحاليون. وهي نسخة إضافية في القطار تُخطَّط في جوان، وبند في عقد الصيانة.