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: การแจ้งเตือนแบบ Push, CloudKit, การซื้อภายในแอป (In-App Purchase) และ 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 ที่แน่นอนและเลือกความสามารถที่จำเป็น: Push Notifications, CloudKit, Sign in with Apple หลังจากการลงทะเบียน ตัวระบุจะพร้อมใช้งานสำหรับการสร้างโปรไฟล์การจัดเตรียม
// การตรวจสอบ Bundle ID ในโค้ดแอป
let bundleID = Bundle.main.bundleIdentifier
print("Current Bundle ID: \(bundleID ?? "unknown")")
// การตรวจสอบ Bundle ID สำหรับเงื่อนไขการ build
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 สามารถตั้งค่าที่แตกต่างกันสำหรับการกำหนดค่าการ build ที่แตกต่างกัน: 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 จัดการการขึ้นต่อกันเหล่านี้โดยอัตโนมัติระหว่างการ build
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 ตัวระบุเดียวมีความสำคัญเป็นพิเศษเนื่องจากฐานโค้ดถูกใช้ร่วมกันและเครื่องมือ build อัตโนมัติหลายตัวคาดหวังชื่อแพ็คเกจเดียวกันสำหรับทั้งสองแพลตฟอร์ม โปรเจกต์ 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 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม