البرمجيات والمنصّات
المجالُ كاملًا، وبقيّةُ القدرات ضمنه.
تطبيقاتُ iOS وAndroid يُصمَّم فيها السلوكُ دون اتصال والمزامنةُ وعمليةُ الإصدار قبل الشاشة الأولى.
تطبيقُ الهاتف المحمول ثلاثةُ أشياء في آنٍ واحد: العميلُ على الجهاز، والخدمةُ الخلفية التي تخدمه، وعمليةُ الإصدار التي توصلهما إلى أيدي المستخدمين. نبني تطبيقاتٍ أصيلةً وعابرةً للمنصّات على iOS وAndroid، مع طبقة الخدمة الخلفية المخصّصة للواجهة (Backend for Frontend) التي تعتمد عليها، وتدفّقاتِ الهوية التي تستوثق عبرها، وخطِّ البناء والتوقيع والإصدار والمراقبة.
النمطُ الأكثر تكرارًا في الإخفاق هو معاملةُ العمل دون اتصال بوصفه ميزةَ تخزينٍ مؤقّت. التخزينُ المؤقّت يجعل القراءةَ ممكنةً بلا شبكة، لكنّه لا يعالج جهازين يعدّلان السجلَّ نفسه وكلاهما دون اتصال. ومن دون قاعدةٍ لحلّ التعارض مقرَّرة سلفًا، يُسقِط التطبيقُ تعديلاتِ أحد المستخدمين بصمت، فتظهر المشكلةُ بعد أشهرٍ بيانًا لا يستطيع أحدٌ تفسيره.
إن صدق أكثرُ من واحدةٍ ممّا يلي، فهذه عادةً نقطةُ البداية الصحيحة.
| المُخرَج | ما يحتويه |
|---|---|
| نسخُ التطبيق الموقَّعة | نسخُ iOS وAndroid مبنيّةً وموقَّعةً عبر حسابات المطوّرين الخاصة بكم، مع مساراتِ اختبارٍ داخلية مهيّأة لمراجِعيكم. |
| مواصفةُ المزامنة والتعارض | مواصفةٌ مكتوبة لنطاق العمل دون اتصال وسلوكِ الاصطفاف وحلِّ التعارض، تفصل الحالات التي تُحسم آليًّا عن الحالات التي تُعرض على المستخدم. |
| الخدمةُ الخلفية للواجهة | طبقةُ الـ API الموجّهة للهاتف وعقدُها واختباراتُها، منشورةً في بيئاتكم إلى جانب التطبيق لا مُضافةً لاحقًا. |
| خطُّ الإصدار | بناءٌ وتوقيعٌ وتقديمٌ إلى المتاجر وطرحٌ مرحلي آلي، مع تقارير الأعطال ورفعِ ملفات الرموز ومسارٍ موثَّق للعودة إلى النسخة السابقة. |
مرجعٌ لا قالب. بيئتُك هي التي تقرّر أيَّ أجزائه ينطبق، وبأيّ ترتيبٍ يصل.
تُتَّفق المستهدفاتُ معك قبل بدء العمل، ويُرفَع التقريرُ عليها طوال مدّته.
يتوقّف الأمر على مقدار قيمتكم القائم على قدراتٍ خاصة بالمنصّة. العملُ المكثّف على الكاميرا أو الموقع في الخلفية أو Bluetooth أو الودجات يرجّح Swift وKotlin أصيلين. أمّا التطبيقاتُ القائمة على النماذج والمحتوى وسير العمل فتخدمها غالبًا قاعدةُ كودٍ مشتركة تُنصّف المساحةَ التي تصونونها. نقدّم الحجّة مكتوبةً أمام قائمة ميزاتكم، ولا ندّعي أنّ جوابًا واحدًا يناسب كلّ تطبيق.
بحسم القاعدة قبل كتابة كود المزامنة. الخياراتُ الشائعة هي رجحانُ آخر كتابةٍ على مستوى الحقل، أو دمجٌ يحسمه الخادم، أو حسمٌ صريح من المستخدم للسجلّات التي قد يكون أيُّ الطرفين محقًّا فيها. لكلّ خيارٍ تبعاتٌ يجب أن يقبلها أصحابُ العمل لديكم، فهو قرارُ منتجٍ يُوثَّق في المواصفة لا تفصيلُ تنفيذٍ نحسمه بصمت.
نعم، بل نفضّله. تعيش التطبيقاتُ في حسابَي Apple وGoogle الخاصين بكم وبهوية توقيعكم منذ البداية، فلا تتعلّق الملكيةُ ولا الشهاداتُ ولا العلاقةُ بالمتجر بنا. نعمل بوصفنا أعضاءً في فرقكم بمستوى الوصول الذي تمنحونه.
مدّةُ المراجعة تحدّدها Apple وGoogle ولا نستطيع الوعدَ برقم. ما نستطيع تقليصه هو أسبابُ الرفض التي تسيطرون عليها: إقراراتُ الخصوصية، ونصوصُ تبرير الأذونات، ومسارُ حذف الحساب، ومتطلّباتُ تسجيل الدخول. نجهّز هذه قبل التقديم الأول لا بعد الرفض الأول.
ليس دائمًا نظامًا منفصلًا، لكن غالبًا طبقةً منفصلة. عميلُ الهاتف على شبكةٍ بطيئة يستفيد من نقاط نهايةٍ مصمَّمة على شكل شاشاته لا على شكل نموذجكم للمجال. وطبقةُ الخدمة الخلفية للواجهة تجلس فوق خدماتكم القائمة وتؤدّي هذا التشكيل دون استنساخ منطق العمل في تنفيذٍ ثانٍ.
نبني وفق معيار OWASP للتحقّق من أمن تطبيقات الهاتف (MASVS) بوصفه قائمةَ عملٍ: التعاملُ مع الشهادات، والتخزينُ الآمن للرموز والمفاتيح، والتعميةُ حيث تستحقّ كلفتها، وسياسةُ الأجهزة المكسورة الحماية متّفقٌ عليها معكم. وإن أردتم اختبارَ اختراقٍ مستقلًّا فسندعمه ونصلح ما يكشفه؛ ولا نراجع عملنا بأنفسنا ونسمّي ذلك ضمانًا.
المجالُ كاملًا، وبقيّةُ القدرات ضمنه.
أنظمةٌ مؤسسية مخصّصة مصمَّمة حول نموذج البيانات وسطحِ التكامل، مع صلاحياتٍ قائمة على الأدوار، ومسارِ تدقيقٍ، وترحيلِ بياناتٍ مطابَق ومُوثَّق.
هندسةُ الـ API والتكامل: تصميمٌ يبدأ بالعقد، وإعدادُ البوّابة ووسيط الرسائل، والعمليةُ المتكرّرة الآمنة وإعادةُ المحاولة، والتتبّعُ وتحليلاتُ الاستهلاك.
أسرعُ طريقٍ إلى جوابٍ مفيد نظرةٌ قصيرةٌ محدَّدةُ النطاق على ما لديكم أصلًا.