App Bundle ID — یک شناسه منحصربهفرد برنامه است که در اکوسیستمهای Apple و Google برای ثبت، امضا و توزیع محصول نرمافزاری استفاده میشود. هر برنامه در زمان ایجاد پروژه Bundle ID خود را دریافت میکند و این شناسه در طول چرخه عمر برنامه ثابت میماند. به استناد به Apple Developer Documentation، Bundle ID برای اتصال خدمات، گواهینامهها و پروفایلهای امضا استفاده میشود.
نکات کلیدی
Bundle Identifier — رشتهای است که برنامه را به طور یکتا در سیستمعامل و فروشگاه برنامه شناسایی میکند. در iOS و macOS آن را Bundle ID و در Android Package Name مینامند، هرچند از نظر کارکردی هر دو نقش یکسانی دارند: تضمین یکتایی برنامه در دستگاه و فروشگاه.
سیستمعامل از Bundle ID برای جداسازی برنامهها در دستگاه استفاده میکند. دو برنامه با شناسه یکسان نمیتوانند به طور همزمان نصب شوند — سیستم آنها را یک محصول واحد در نظر میگیرد. فروشگاههای برنامه نیز در زمان انتشار یکتایی Bundle ID را بررسی میکنند.
Apple Bundle ID را با منتشر شدن iOS SDK در سال 2008 معرفی کرد. فرمات reverse domain notation از Java (package naming convention) گرفته شده است که در آن برای جلوگیری از تضاد نامهای کلاس استفاده میشود. 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: اعلانهای Push، CloudKit، خرید داخلبرنامهای و Game Center به Bundle ID صریح (explicit) نیاز دارند. در صورت استفاده از الگوی com.example.* این خدمات در دسترس نیستند. برای برنامههای تولیدی همواره از explicit Bundle ID استفاده کنید تا فعالیت کامل تمامی خدمات Apple تضمین شود.
علاوه بر wildcard، Apple از شناسههای پیشوندی پشتیبانی میکند که به تیمهای توسعه در زمان ثبت نام در Apple Developer Program تخصیص داده میشوند. پیشوند (Team ID) به طور خودکار به تمامی App ID ها و پروفایلهای امضا اضافه میشود. دو 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 را وارد کنید و capabilities مورد نیاز را انتخاب کنید: Push Notifications، CloudKit، Sign in with Apple. پس از ثبت، شناسه برای ایجاد پروفایلهای امضا در دسترس قرار میگیرد.
// بررسی Bundle ID در کد برنامه
let bundleID = Bundle.main.bundleIdentifier
print("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، از اعلانهای Push تا 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 هستند. هر دو شناسه از reverse domain notation استفاده میکنند و پس از انتشار در فروشگاههای رسمی قابل تغییر نیستند.
در اکوسیستم 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 تکراری مسدود خواهد شد.
از reverse domain notation شرکت خود استفاده کنید: com.namَشرکت.namَبرنامه. از خط تخفیف و کاراکترهای ویژه خودداری کنید. اگر برنامه افزونه دارد، پسوندهایی از طریق نقطه اضافه کنید. مطمئن شوید شناسه منحصربهفرد است و توسط توسعهدهنده دیگری اشغال نشده است.
بله، هر افزونه — ویجت، 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 از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید