App Bundle ID — هو معرف فريد للتطبيق يُستخدم في أنظمة Apple و Google لتسجيل وتوقيع وتوزيع المنتج البرمجي. يحصل كل تطبيق على Bundle ID الخاص به عند إنشاء المشروع، ويظل هذا المعرف دون تغيير طوال دورة حياته بالكامل. وفقًا لوثائق مطوري Apple، يُستخدم Bundle ID لربط الخدمات والشهادات وملفات التزويد.
النقاط الرئيسية
Bundle Identifier هو سلسلة تحدد التطبيق بشكل فريد في نظام التشغيل ومتجر التطبيقات. في iOS و macOS يُسمى Bundle ID، وفي Android — Package Name، رغم أن كلاهما يؤدي نفس الوظيفة: ضمان تفرد التطبيق على الجهاز وفي المتجر.
يستخدم نظام التشغيل Bundle ID للتمييز بين التطبيقات على الجهاز. لا يمكن تثبيت تطبيقين بنفس المعرف في وقت واحد — يتعامل النظام معهما كمنتج واحد. تتحقق متاجر التطبيقات أيضًا من تفرد Bundle ID أثناء النشر.
قدمت Apple Bundle ID مع إصدار iOS SDK في عام 2008. تم اقتراض تنسيق تدوين المجال العكسي من Java (اتفاقية تسمية الحزم)، حيث يُستخدم لمنع تعارض أسماء الفئات. تبنّت Google هذه الممارسة لنظام Android، مما ضمن الاتساق في كلا النظامين البيئيين للهواتف المحمولة.
| المنصة | اسم الحقل | مثال |
|---|---|---|
| iOS/macOS | Bundle Identifier | com.example.myapp |
| Android | Package Name | com.example.myapp |
| watchOS | Bundle Identifier | com.example.myapp.watchkit |
| tvOS | Bundle Identifier | com.example.myapp.tvos |
يتكون Bundle ID من عدة أجزاء مفصولة بنقاط. الجزء الأول هو معرف المطور أو الشركة (com، org، net). الجزء الثاني هو نطاق الشركة (example، google، apple). تحدد الأجزاء التالية اسم التطبيق والمنصة.
يبدو Bundle ID النموذجي كالتالي com.company.appname. توصي Apple باستخدام تدوين المجال العكسي لضمان التفرد العالمي. إذا لم يكن للشركة نطاق، يُسمح باستخدام البريد الإلكتروني: com.example.myapp أو org.example.myapp.
تدعم Apple Wildcard Bundle ID — قالب معرف بعلامة نجمية: com.example.*. يسمح هذا القالب باستخدام App ID واحد لتطبيقات متعددة من نفس الشركة. Wildcard ID مناسب أثناء التطوير، لكنه لا يُنصح به للإنتاج لأنه يحد من استخدام بعض خدمات Apple.
قيود wildcard: الإشعارات الفورية و CloudKit والمشتريات داخل التطبيق و Game Center تتطلب Bundle ID صريح. عند استخدام القالب com.example.*، هذه الخدمات غير متاحة. لتطبيقات الإنتاج، استخدم دائمًا Bundle ID صريح لضمان الوظائف الكاملة لجميع خدمات Apple.
بالإضافة إلى wildcard، تدعم Apple معرفات البادئة التي تُخصص لفريق التطوير عند التسجيل في Apple Developer Program. البادئة (Team ID) تُضاف تلقائيًا إلى جميع App IDs وملفات التزويد. يمكن لمعرفي Team ID مختلفين إنشاء نفس Bundle ID، لكن على الجهاز يعتبران تطبيقين مختلفين.
تسجيل Bundle ID هو خطوة إلزامية قبل نشر التطبيق. في نظام Apple، يتم التسجيل في Apple Developer Portal عبر قسم Certificates, Identifiers & Profiles. في Google Play، يُحدد Bundle ID عند إنشاء التطبيق في لوحة تحكم المطور.
في بوابة Apple Developer، اختر قسم Identifiers، وانقر على زر Register، وحدد نوع App ID. أدخل اسم Bundle ID الدقيق واختر الإمكانيات المطلوبة: Push Notifications، CloudKit، Sign in with Apple. بعد التسجيل، يصبح المعرف متاحًا لإنشاء ملفات التزويد.
// التحقق من Bundle ID في كود التطبيق
let bundleID = Bundle.main.bundleIdentifier
print("Current Bundle ID: \(bundleID ?? "unknown")")
// التحقق من Bundle ID لظروف البناء
if bundleID == "com.example.app.production" {
// تكوين الإنتاج
Analytics.shared.configure(.production)
}
Google Play Console لا يتطلب تسجيل Bundle ID مسبقًا. يُحدد المعرف في ملف build.gradle لوحدة التطبيق ويجب أن يكون فريدًا عبر Google Play بأكمله. بعد إنشاء التطبيق، من المستحيل تغيير Package Name، لذا اختر المعرف بعناية وتحقق من تفرده عبر البحث في Google Play. لا تفرج Google عن معرفات التطبيقات المحذوفة، لذلك يظل Bundle ID المشغول مرة واحدة غير متاح للمطورين الآخرين.
عند التسجيل في App Store Connect، يجب تحديد Bundle ID من مجموعة المعرفات المسجلة الموجودة. إذا لم يكن المعرف مسجلاً بعد في بوابة Apple Developer، سيعرض النظام إنشائه تلقائيًا. بعد التسجيل، يرتبط Bundle ID بالفريق ولا يمكن نقله إلى حساب مطور آخر دون الاتصال بدعم Apple. يمكن أن يكون لكل Bundle ID ملفات تزويد متعددة لبيئات مختلفة: Development، Ad Hoc، App Store.
عند تسجيل Bundle ID لتطبيق iOS مع امتدادات، يجب تسجيل كل مكون على حدة. امتدادات الأدوات ولوحات المفاتيح و Notification Service و Watch App لها معرفاتها الخاصة المشتقة من المعرف الرئيسي. يقوم App Store Connect بتجميعها عند إنشاء App Record، مما يسمح بنشر جميع المكونات كتطبيق واحد.
إعداد Bundle ID في Xcode يتم في عدة أماكن: Info.plist و Build Settings و Signing & Capabilities. الحقل المركزي هو Bundle Identifier في هدف التطبيق. جميع خدمات Apple، من الإشعارات الفورية إلى CloudKit، مرتبطة بهذا المعرف. يؤدي Bundle ID المحدد بشكل غير صحيح إلى أخطاء في التوقيع وعدم القدرة على النشر في App Store.
<!-- Info.plist — Bundle ID الأساسي للمشروع -->
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<!-- Build Settings — متغير PRODUCT_BUNDLE_IDENTIFIER -->
<!-- Debug: com.example.app.dev -->
<!-- Release: com.example.app -->
يستخدم Xcode المتغير PRODUCT_BUNDLE_IDENTIFIER في Build Settings. يمكن تعيين قيم مختلفة لتكوينات بناء مختلفة: com.example.app.dev لوضع Debug و com.example.app لوضع Release. هذا مناسب لتثبيت نسخة التطوير بجانب نسخة الإنتاج على نفس الجهاز للاختبار.
إذا كان للتطبيق امتدادات (Notification Service، Widget، Watch App)، يحصل كل امتداد على Bundle ID خاص به مع لاحقة. التطبيق الرئيسي: com.example.app. امتداد الأداة: com.example.app.widget. Watch App: com.example.app.watchkit. يتم تسجيل كل معرف على حدة في Apple Developer Portal ويتلقى ملف تزويد خاص به. يدير Xcode هذه التبعيات تلقائيًا أثناء البناء.
App Bundle ID (Apple) و Package Name (Google) هما كيانان متشابهان بنفس الغرض لكن بقواعد استخدام مختلفة في نظامي iOS و Android. يستخدم كلا المعرفين تدوين المجال العكسي ولا يمكن تغييرهما بعد النشر في المتاجر الرسمية للتطبيقات.
في نظام Apple، يرتبط Bundle ID بملف التزويد والشهادات. عند تغيير فريق التطوير، يمكن نقل Bundle ID بين الحسابات عبر App Store Connect. في Android، Package Name مرتبط بشكل صارم بالتطبيق في Google Play ولا يمكن نقله بين حسابات المطورين.
| الخاصية | iOS Bundle ID | Android Package Name |
|---|---|---|
| الحد الأقصى للطول | غير محدود | 150 حرفًا |
| فاصل الأجزاء | نقطة (.) | نقطة (.) |
| الأحرف المسموحة | A-Z، a-z، 0-9، نقطة، شرطة | A-Z، a-z، 0-9، نقطة، شرطة سفلية |
| Wildcard | مدعوم (*) | غير مدعوم |
| الاستخدام في الكود | Bundle.main.bundleIdentifier | BuildConfig.APPLICATION_ID |
على الرغم من الاختلافات، يلعب كلا المعرفين دورًا حاسمًا: بدونهما يستحيل نشر تطبيق في متجر رسمي. توصية للمشاريع عبر المنصات — استخدام نفس المعرف في إصدارات iOS و Android لتبسيط التكامل مع Firebase و Analytics والخدمات الأخرى. هذا يبسط أيضًا التنقل لفريق التطوير: معرف واحد لكلا المشروعين يقلل الارتباك عند إعداد CI/CD وتكوين البيئات.
عند التطوير باستخدام Flutter أو React Native، يكون المعرف الموحد مهمًا بشكل خاص لأن قاعدة الكود مشتركة والعديد من أدوات البناء الآلي تتوقع نفس اسم الحزمة لكلتا المنصتين. مشروع Firebase أيضًا يرتبط بمعرف واحد لنظامي iOS و Android، مما يبسط إعداد التحليلات وتقارير الأعطال.
الأسئلة الشائعة
تغيير Bundle ID بعد النشر في App Store أو Google Play مستحيل. سيتعامل النظام مع المعرف الجديد كتطبيق مختلف تمامًا. لتحديث منتج موجود، يجب أن يظل Bundle ID دون تغيير طوال دورة حياة التطبيق.
لن يسمح جهاز iOS أو Android بتثبيت تطبيق ثانٍ بنفس المعرف فوق الأول. سيعرض النظام خطأ ويقترح حذف التطبيق الموجود. في المتاجر، سيتم أيضًا حظر النشر بمعرف Bundle ID مكرر.
استخدم تدوين المجال العكسي لشركتك: com.companyname.appname. تجنب الشرطات والأحرف الخاصة. إذا كان للتطبيق امتدادات، أضف لواحق مفصولة بنقاط. تأكد من أن المعرف فريد وغير مشغول من قبل مطور آخر.
نعم، كل امتداد — أداة، Watch App، Notification Service — يتطلب Bundle ID خاصًا به. تشكل المعرفات تسلسلًا هرميًا: com.example.app كقاعدة، com.example.app.widget للأداة، com.example.app.watchkit لـ Watch. يتم تسجيل جميعها بشكل منفصل في Apple Developer Portal وتشترك في App ID مشترك مع التطبيق الأصلي.
Bundle ID هو سلسلة معرفة في كود التطبيق. App ID هو كائن في Apple Developer Portal يجمع بين Bundle ID ومجموعة من الخدمات الممكّنة (capabilities). يتم إنشاء App ID بناءً على Bundle ID ويُستخدم لإنشاء ملفات التزويد.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا