الهدف
بعد هالدرس تقدر تدير version numbers على iOS و Android بشكل صحيح، تعرف الفرق بين CFBundleShortVersionString و CFBundleVersion على iOS ووظيفة كل رقم، وتقرر متى تطلب Expedited Review ومتى تنتظر.
ليش هذا الحين؟
ترى أغلب المطورين يرفعون تحديثا وما يفهمون ليش Apple رفضته، أو يتفاجأون إن versionCode الـ Android اللي رفعوه أصغر من السابق. الـ version numbers مو arbitrary — كل حقل له معنى ووظيفة. الغلط هنا يوقف الإصدار.
الفكرة
iOS — ثلاثة أرقام:
CFBundleShortVersionString = "1.2.0" ← اللي يشوفه المستخدم ("الإصدار 1.2.0")
CFBundleVersion = "47" ← رقم تسلسلي داخلي (يزيد مع كل build)
القاعدة:
CFBundleShortVersionString: يتغير عند الـ release (1.0.0 ← 1.1.0 ← 1.2.0)CFBundleVersion: يزيد مع كل build ترفعه — حتى لو ما release (47، 48، 49...)- Apple ترفض لو رفعت نفس
CFBundleVersionمرتين
Android — رقمان:
versionCode 47 ← رقم integer يزيد دايما، ما يرجع
versionName "1.2.0" ← اللي يشوفه المستخدم
القاعدة:
versionCode: ما يرجع أبدا — حتى لو رجعت لإصدار قديم، الرقم لازم يكون أكبر من آخر نشرversionName: أي نص تختاره، ماكو قيود تقنية
متى تطلب Expedited Review (iOS بس): Apple تقبل طلبات المراجعة الطارئة للـ critical issues:
- Crash يمنع أغلب المستخدمين من الدخول
- Security vulnerability
- Data loss
- مشكلة legal (مثل محتوى قانوني يحتاج إزالة فورية)
لا تطلب Expedited لـ feature جديد أو تحسين UI — Apple بترفض الطلب.