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 2008 সালে iOS SDK প্রকাশের সাথে Bundle ID চালু করে। রিভার্স ডোমেন নোটেশন ফরম্যাট 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 পরিষেবার ব্যবহার সীমিত করে।
ওয়াইল্ডকার্ড সীমাবদ্ধতা: Push বিজ্ঞপ্তি, CloudKit, In-App Purchase এবং Game Center-এর জন্য স্পষ্ট (explicit) Bundle ID প্রয়োজন। com.example.* টেমপ্লেট ব্যবহার করলে, এই পরিষেবাগুলি অনুপলব্ধ থাকে। প্রোডাকশন অ্যাপের জন্য, সমস্ত Apple পরিষেবার সম্পূর্ণ কার্যকারিতা নিশ্চিত করতে সর্বদা explicit Bundle ID ব্যবহার করুন।
ওয়াইল্ডকার্ড ছাড়াও, 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 নাম লিখুন এবং প্রয়োজনীয় ক্ষমতা নির্বাচন করুন: 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।
এক্সটেনশন সহ iOS অ্যাপের জন্য Bundle ID নিবন্ধন করার সময়, প্রতিটি উপাদান আলাদাভাবে নিবন্ধিত করতে হবে। উইজেট এক্সটেনশন, কীবোর্ড, Notification Service এবং Watch App-এর মূল থেকে উদ্ভূত নিজস্ব শনাক্তকারী রয়েছে। App Store Connect একটি App Record তৈরি করার সময় সেগুলিকে গ্রুপ করে, যা সমস্ত উপাদানকে একটি একক অ্যাপ হিসাবে প্রকাশ করার অনুমতি দেয়।
Xcode-এ Bundle ID কনফিগারেশন বেশ কয়েকটি জায়গায় করা হয়: Info.plist, Build Settings এবং Signing & Capabilities। কেন্দ্রীয় ফিল্ডটি অ্যাপ টার্গেটে Bundle Identifier। Push বিজ্ঞপ্তি থেকে CloudKit পর্যন্ত সমস্ত Apple পরিষেবা এই শনাক্তকারীর সাথে বাঁধা। ভুলভাবে নির্দিষ্ট করা 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 Build Settings-এ PRODUCT_BUNDLE_IDENTIFIER ভেরিয়েবল ব্যবহার করে। বিভিন্ন বিল্ড কনফিগারেশনের জন্য আলাদা মান সেট করা যেতে পারে: Debug-এর জন্য com.example.app.dev এবং Release-এর জন্য com.example.app। এটি পরীক্ষার জন্য একই ডিভাইসে প্রোডাকশন সংস্করণের পাশাপাশি ডেভ সংস্করণ ইনস্টল করার জন্য সুবিধাজনক।
যদি অ্যাপে এক্সটেনশন (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, ডট, আন্ডারস্কোর |
| ওয়াইল্ডকার্ড | সমর্থিত (*) | সমর্থিত নয় |
| কোডে ব্যবহার | Bundle.main.bundleIdentifier | BuildConfig.APPLICATION_ID |
পার্থক্য সত্ত্বেও, উভয় শনাক্তকারী একটি গুরুত্বপূর্ণ ভূমিকা পালন করে: এগুলি ছাড়া অফিসিয়াল স্টোরে অ্যাপ প্রকাশ করা অসম্ভব। ক্রস-প্ল্যাটফর্ম প্রজেক্টের জন্য সুপারিশ — Firebase, Analytics এবং অন্যান্য পরিষেবার সাথে একীকরণ সহজ করতে iOS এবং Android সংস্করণে একই শনাক্তকারী ব্যবহার করুন। এটি ডেভেলপমেন্ট টিমের জন্য নেভিগেশনও সহজ করে: উভয় প্রজেক্টের জন্য একটি শনাক্তকারী 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 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন