Entitlements ในการพัฒนา iOS: คืออะไร มีประเภทใดบ้าง และวิธีกำหนดค่า

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-05-18 เวลาอ่าน: 8 นาที

Entitlements คือสิทธิ์และการอนุญาตดิจิทัลที่กำหนดให้กับแอปพลิเคชันในขั้นตอนการลงนามโค้ด ซึ่งกำหนดการเข้าถึงฟีเจอร์ที่ได้รับการป้องกันของระบบปฏิบัติการ Apple แตกต่างจากการอนุญาตของผู้ใช้ Entitlements จะถูกตรวจสอบโดยระบบเมื่อเริ่มต้นแอปพลิเคชันและไม่สามารถเปลี่ยนแปลงได้โดยผู้ใช้ ตาม เอกสารสำหรับนักพัฒนา Apple (2025) การกำหนดค่า Entitlements ที่ถูกต้องเป็นสิ่งที่จำเป็นสำหรับการใช้ iCloud การแจ้งเตือนแบบ Push และ App Groups Entitlements เป็นองค์ประกอบสำคัญของโมเดลความปลอดภัยของ iOS และ macOS

ประเด็นสำคัญ

  • Entitlements คือการอนุญาตดิจิทัลที่ฝังอยู่ในลายเซ็นของแอปพลิเคชันซึ่งกำหนดการเข้าถึงฟีเจอร์ที่ได้รับการป้องกันของ iOS และ macOS
  • ความแตกต่างจากการอนุญาต — Entitlements จะถูกตรวจสอบโดยระบบเมื่อเริ่มต้นและไม่ได้ร้องขอจากผู้ใช้ การอนุญาตจะถูกร้องขอในระหว่างรันไทม์ผ่านไดอะล็อกของระบบ
  • Capabilities — Xcode จัดกลุ่ม Entitlements เป็น Capabilities: การแจ้งเตือนแบบ Push, iCloud, App Groups, การซื้อภายในแอปและอื่นๆ
  • ไฟล์ Entitlements — (.entitlements) คือไฟล์ XML ในโปรเจกต์ Xcode ที่มีรายการสิทธิ์ในรูปแบบคีย์-ค่า ซึ่งลงนามโดย Apple
  • ความปลอดภัย — entitlements จะถูกตรวจสอบระหว่างการลงนามโค้ด การปลอมแปลง entitlements ในแอปพลิเคชันที่ติดตั้งแล้วจะทำลายลายเซ็นดิจิทัลและบล็อกการเริ่มต้น

Entitlements คืออะไร?

Entitlements (แปลจากภาษาอังกฤษว่า “สิทธิ์”) คือคู่คีย์-ค่าที่รวมอยู่ในลายเซ็นโค้ดของแอปพลิเคชันระหว่างการคอมไพล์ซึ่งกำหนดว่าแอปพลิเคชันสามารถเข้าถึงความสามารถและข้อมูลของระบบใดได้บ้าง Entitlements ถูกรวมอยู่ในโมเดลความปลอดภัยของ Apple นับตั้งแต่มีการเปิดตัว iOS SDK และเป็นสิ่งที่จำเป็นสำหรับแอปพลิเคชันทั้งหมดที่เผยแพร่ผ่าน App Store

แนวคิดของ Entitlements แตกต่างจากการอนุญาตแบบดั้งเดิมบน Android ในขณะที่การอนุญาตของ Android จะถูกร้องขอจากผู้ใช้เมื่อมีการใช้ฟีเจอร์เป็นครั้งแรก Entitlements ใน iOS จะถูกตรวจสอบโดยระบบเมื่อเริ่มต้นแอปพลิเคชันโดยอ้างอิงจากลายเซ็นดิจิทัล ผู้ใช้ไม่สามารถเพิกถอนหรือเปลี่ยนแปลง entitlement ได้ — สิทธินี้จะมอบให้กับนักพัฒนาผ่าน App Store Connect และฝังอยู่ในโปรไฟล์การจัดเตรียม

แต่ละ entitlement มีวัตถุประสงค์และรูปแบบที่กำหนดไว้อย่างเคร่งครัด ตัวอย่างเช่น com.apple.security.application-groups อนุญาตการเข้าถึงคอนเทนเนอร์ที่ใช้ร่วมกันสำหรับชุดแอปพลิเคชันของนักพัฒนาคนเดียวกัน ในขณะที่ aps-environment เปิดใช้งานการรองรับการแจ้งเตือนแบบ Push Apple ตรวจสอบคำขอ entitlements ด้วยตนเองในระหว่างกระบวนการ App Review ซึ่งป้องกันการใช้สิทธิ์ในทางที่ผิด

ประเภทของ Entitlements ใน iOS

Entitlements ถูกจำแนกตามวัตถุประสงค์การทำงานเป็นหลายหมวดหมู่ บริการระบบ — iCloud, การแจ้งเตือนแบบ Push, Siri ความปลอดภัยและข้อมูล — Keychain Access Groups, App Groups, Data Protection เครือข่ายและการสื่อสาร — Multipath TCP, VPN, Hotspot Configuration ความสามารถด้านฮาร์ดแวร์ — กล้อง ไมโครโฟน บลูทูธ (ผ่าน capabilities ที่เกี่ยวข้อง)

Capabilities และ Entitlements บริการ

Xcode จัดกลุ่ม entitlements ที่เกี่ยวข้องเป็น Capabilities — สวิตช์ระดับสูงบนแท็บ Signing & Capabilities การเปิดใช้งาน Capability จะเพิ่ม entitlements ที่จำเป็นลงในไฟล์ .entitlements โดยอัตโนมัติ ตัวอย่างเช่น การเปิดใช้งาน Capability การแจ้งเตือนแบบ Push จะเพิ่ม entitlement aps-environment ด้วยค่า development หรือ production ในขณะที่การเปิดใช้งาน iCloud จะเพิ่มชุด entitlements สำหรับ CloudKit และพื้นที่จัดเก็บ Key-Value

บาง capabilities ต้องการการกำหนดค่าเพิ่มเติมบนพอร์ทัล Apple Developer ตัวอย่างเช่น App Groups ต้องการการลงทะเบียนตัวระบุกลุ่มบนพอร์ทัล หลังจากนั้นจะสามารถเลือกได้ใน Xcode สำหรับการแจ้งเตือนแบบ Push จำเป็นต้องสร้างคีย์หรือใบรับรอง APNs หากไม่มีขั้นตอนเตรียมการเหล่านี้ entitlement จะไม่ทำงานแม้จะมีไฟล์ .entitlements ที่ถูกต้อง

App Groups และการเข้าถึง Keychain

Entitlement com.apple.security.application-groups อนุญาตให้แอปพลิเคชันหลายตัวของนักพัฒนาคนเดียวกันใช้คอนเทนเนอร์ร่วมกันบนระบบไฟล์ ใช้สำหรับการแชร์ข้อมูลระหว่างแอปพลิเคชันหลักและส่วนขยาย (Widget, Watch App, Share Extension) แอปพลิเคชันทั้งหมดในกลุ่มเดียวกันสามารถอ่านและเขียนไฟล์ในไดเรกทอรีที่ใช้ร่วมกัน /Library/Group Containers/

Keychain Access Groups (คีย์ keychain-access-groups) เป็น entitlement ที่สำคัญอีกตัวหนึ่งที่อนุญาตให้แอปพลิเคชันในกลุ่มเดียวกันแชร์การเข้าถึงรายการ Keychain ซึ่งมีความสำคัญอย่างยิ่งสำหรับการใช้งานการเข้าสู่ระบบครั้งเดียว: ผู้ใช้เข้าสู่ระบบในแอปพลิเคชันหนึ่งและสามารถเข้าถึงบัญชีเดียวกันในอีกแอปพลิเคชันหนึ่งโดยอัตโนมัติโดยไม่ต้องป้อนรหัสผ่านอีกครั้ง

วิธีการกำหนดค่า Entitlements

การกำหนดค่า Entitlements ทำได้ใน Xcode บนแท็บ Signing & Capabilities ในการตั้งค่า target นักพัฒนาเลือก Capabilities ที่ต้องการจากรายการ และ Xcode จะสร้างหรืออัปเดตไฟล์ .entitlements โดยอัตโนมัติ ไฟล์นี้ถูกจัดเก็บในโปรเจกต์ในรูปแบบ XML ด้วยโครงสร้าง plist และมีคีย์ entitlement ทั้งหมดสำหรับ target นั้น

objective-c
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.application-groups</key>
    <array>
        <string>group.com.example.shared</string>
    </array>
    <key>aps-environment</key>
    <string>development</string>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)com.example.keychain</string>
    </array>
</dict>
</plist>

เมื่อสร้างไฟล์ entitlement ด้วยตนเอง สิ่งสำคัญคือต้องปฏิบัติตามรูปแบบคีย์และคำนำหน้า Entitlements ของ Apple ใช้สไตล์โดเมนย้อนกลับ (com.apple.*) Entitlements ที่กำหนดเองสำหรับวัตถุประสงค์ของคุณเองก็เป็นไปได้เช่นกัน แต่ต้องลงทะเบียนบนพอร์ทัลนักพัฒนา Xcode มีการเติมข้อความอัตโนมัติสำหรับคีย์ entitlement มาตรฐานทั้งหมด

สำหรับการดีบัก Entitlements ให้ใช้คำสั่ง codesign ในเทอร์มินัล macOS คำสั่ง codesign -d --entitlements :- <พาธไปยังแอปพลิเคชัน> แสดง entitlements ทั้งหมดที่แอปพลิเคชันถูกลงนาม สิ่งนี้มีประโยชน์สำหรับการวินิจฉัยปัญหา: หาก entitlement หายไปจากเอาต์พุต แอปพลิเคชันจะไม่สามารถเข้าถึงฟังก์ชันที่เกี่ยวข้องได้ไม่ว่าการตั้งค่า Xcode จะเป็นอย่างไร

การสร้างไฟล์ Entitlement ด้วยตนเอง

แม้ว่า Xcode จะสร้างไฟล์ entitlement โดยอัตโนมัติเมื่อเปิดใช้งาน Capabilities นักพัฒนาที่มีประสบการณ์มักจะสร้างหรือแก้ไขมันด้วยตนเองเพื่อการปรับแต่งอย่างละเอียด ไฟล์มีนามสกุล .entitlements และรูปแบบ plist (XML) คุณสามารถเพิ่มคีย์ entitlement ที่กำหนดเองที่ไม่อยู่ในอินเทอร์เฟซของ Xcode หรือรวม entitlements จาก capabilities ต่างๆ ในไฟล์เดียว

เมื่อแก้ไขด้วยตนเอง สิ่งสำคัญคือต้องรับประกันความถูกต้องทางไวยากรณ์ของ XML ข้อผิดพลาดในโครงสร้าง plist จะทำให้ entitlements ไม่ถูกนำไปใช้ระหว่างการลงนาม Xcode ตรวจสอบไฟล์ .entitlements ในเวลาคอมไพล์และแสดงข้อผิดพลาดหากรูปแบบไม่ถูกต้อง สำหรับโปรเจกต์ที่ซับซ้อนที่มีหลาย target และส่วนขยาย ขอแนะนำให้เก็บคีย์ entitlement ทั่วไปในไฟล์แยกต่างหากและนำเข้าผ่าน Build Settings

cpp
// cli: checking entitlements of an installed application
codesign -d --entitlements :- /Applications/Safari.app

// Example output contains a list of active entitlements
<dict>
    <key>com.apple.security.ts.apple-wifi</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
</dict>

Entitlements และความปลอดภัยของแอปพลิเคชัน

Entitlements มีบทบาทสำคัญในโมเดลความปลอดภัยของ Apple เนื่องจาก entitlements เป็นส่วนหนึ่งของลายเซ็นดิจิทัลของแอปพลิเคชัน การปลอมแปลงจึงเป็นไปไม่ได้หากไม่ลงนามโค้ดใหม่ Apple ตรวจสอบ entitlements ในหลายระดับ: ระหว่างการคอมไพล์ Xcode ลงนาม entitlements พร้อมกับไฟล์ปฏิบัติการ ระหว่างการติดตั้ง ระบบตรวจสอบความสมบูรณ์ของลายเซ็น เมื่อเริ่มต้น ระบบจะตรวจสอบ entitlements อีกครั้ง

ข้อกำหนดด้านความปลอดภัยที่สำคัญประการหนึ่งคือหลักการของ entitlement ขั้นต่ำ นักพัฒนาควรรวมเฉพาะ entitlements ที่ใช้จริงในแอปพลิเคชันเท่านั้น Entitlements ที่ไม่จำเป็นเพิ่มพื้นผิวการโจมตีและอาจทำให้แอปพลิเคชันถูกปฏิเสธระหว่าง App Review Apple ตรวจสอบอย่างชัดเจนว่า entitlements สอดคล้องกับการทำงานของแอปพลิเคชันหรือไม่

Entitlements บางตัวถือเป็นละเอียดอ่อนและต้องการการอนุมัติเพิ่มเติมจาก Apple ซึ่งรวมถึง: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) และ com.apple.developer.nfc.readersession.formats (NFC) เพื่อรับ entitlements เหล่านี้ คุณต้องแสดงความจำเป็นในระหว่างกระบวนการ App Review

เมื่อทำงานกับ entitlements สิ่งสำคัญคือต้องพิจารณาความแตกต่างระหว่าง iOS และ macOS แอปพลิเคชันเดสก์ท็อป macOS (Sandboxed) มีชุด entitlements ที่กว้างกว่าเมื่อเทียบกับ iOS ตัวอย่างเช่น entitlement com.apple.security.temporary-exception.* อนุญาตให้ข้ามแซนด์บ็อกซ์ชั่วคราวสำหรับการดำเนินการบางอย่าง — entitlements ดังกล่าวไม่มีอยู่ใน iOS อย่างสมบูรณ์

Entitlements และโปรไฟล์การจัดเตรียม

Entitlements เชื่อมโยงอย่างใกล้ชิดกับโปรไฟล์การจัดเตรียม (Provisioning Profiles) โปรไฟล์การจัดเตรียมคือไฟล์ที่เชื่อมโยงใบรับรองนักพัฒนา รายการอุปกรณ์ที่อนุญาต และชุด entitlements สำหรับแอปพลิเคชันเฉพาะ เมื่อติดตั้งแอปพลิเคชัน ระบบจะเปรียบเทียบ entitlements ในโค้ดกับ entitlements ในโปรไฟล์การจัดเตรียม หาก entitlement มีอยู่ในโค้ดแต่ไม่มีในโปรไฟล์ แอปพลิเคชันจะไม่สามารถเข้าถึงฟังก์ชันที่เกี่ยวข้องได้

ในการวินิจฉัยปัญหากับ entitlements ให้ตรวจสอบโปรไฟล์การจัดเตรียมก่อน Xcode สร้างโปรไฟล์โดยอัตโนมัติตาม capabilities ที่เลือกบนพอร์ทัล Apple Developer หากมีการเพิ่ม capability ใน Xcode แต่ไม่ได้เปิดใช้งานบนพอร์ทัล แอปพลิเคชันจะล้มเหลวด้วยข้อผิดพลาดในการลงนามเมื่อพยายามใช้ฟังก์ชันที่ได้รับการป้องกัน

Entitlements ที่ใช้บ่อย

มาดู entitlements ที่ใช้บ่อยที่สุดในการพัฒนา iOS aps-environment (การแจ้งเตือนแบบ Push) — จำเป็นสำหรับการส่งการแจ้งเตือน push com.apple.developer.ubiquity-container-identifiers (iCloud) — สำหรับการซิงค์ข้อมูลผ่าน CloudKit com.apple.security.application-groups — สำหรับการแชร์ข้อมูลระหว่างแอปพลิเคชันและส่วนขยาย com.apple.developer.associated-domains — สำหรับ Universal Links และ Handoff

แต่ละ entitlements เหล่านี้มีขั้นตอนการกำหนดค่าที่เข้มงวด การแจ้งเตือนแบบ Push ต้องการการสร้างคีย์ APNs บนพอร์ทัล Apple Developer และเปิดใช้งาน capability ใน Xcode หลังจากนั้น entitlement จะถูกตั้งค่าโดยอัตโนมัติในไฟล์ .entitlements iCloud ต้องการการตั้งค่าคอนเทนเนอร์บนพอร์ทัลและเลือกใน Xcode จากรายการแบบเลื่อนลง

Associated Domains — entitlement ที่เชื่อมโยงแอปพลิเคชันกับโดเมนเว็บ ใช้สำหรับ Universal Links (ลิงก์ลึกที่เปิดโดยตรงในแอปพลิเคชัน) และ Handoff (การทำงานต่อบนอุปกรณ์ Apple อื่น) ค่า entitlement มีอาร์เรย์ของสตริงในรูปแบบ applinks:example.com ต้องวางไฟล์ apple-app-site-association บนเซิร์ฟเวอร์

ตารางของ entitlements ยอดนิยมและวัตถุประสงค์:

คีย์ Entitlementวัตถุประสงค์ต้องตรวจสอบ
aps-environmentการแจ้งเตือน Pushไม่
com.apple.developer.ubiquity-*การซิงค์ iCloudไม่
application-groupsคอนเทนเนอร์แอปร่วมไม่
com.apple.developer.healthkitข้อมูล HealthKitใช่
com.apple.developer.nfc.*การอ่านแท็ก NFCใช่
associated-domainsUniversal Linksไม่

คำถามที่พบบ่อย

Entitlements แตกต่างจากการอนุญาตใน iOS อย่างไร?

Entitlements คือสิทธิ์คงที่ที่ฝังอยู่ในลายเซ็นของแอปพลิเคชันและตรวจสอบโดยระบบเมื่อเริ่มต้น การอนุญาตคือการอนุญาตแบบไดนามิกที่ร้องขอจากผู้ใช้ในระหว่างรันไทม์ (กล้อง ตำแหน่งทางภูมิศาสตร์)

วิธีการตรวจสอบ Entitlements ของแอปพลิเคชันที่ติดตั้งแล้ว?

ใช้คำสั่ง codesign -d --entitlements ในเทอร์มินัล macOS สำหรับแอปพลิเคชันจาก App Store entitlements จะถูกตรวจสอบผ่านยูทิลิตี้ ProvisionQL หรือผ่าน Xcode Organizer

สามารถเปลี่ยนแปลง Entitlements หลังจากเผยแพร่ได้หรือไม่?

การเปลี่ยนแปลง entitlements ต้องมีบิลด์ใหม่และการลงนามแอปพลิเคชันใหม่ หาก entitlement ต้องการการอนุมัติจาก Apple คุณจะต้องผ่าน App Review อีกครั้ง หากไม่ลงนามใหม่ การเปลี่ยนแปลง entitlements เป็นไปไม่ได้

ไฟล์ Entitlements ใน Xcode คืออะไร?

ไฟล์ .entitlements คือเอกสาร XML ในรูปแบบ plist ที่เก็บไว้ในโปรเจกต์ Xcode ประกอบด้วยรายการ entitlements ทั้งหมดของแอปพลิเคชันในรูปแบบที่มีโครงสร้างและถูกลงนามพร้อมกับไฟล์ปฏิบัติการ

Capabilities ใน Xcode คืออะไร?

Capabilities คือสวิตช์ระดับสูงบนแท็บ Signing & Capabilities ใน Xcode การเปิดใช้งาน capability จะเพิ่ม entitlements ที่เกี่ยวข้องลงในไฟล์ .entitlements โดยอัตโนมัติและกำหนดค่าโปรไฟล์การจัดเตรียม

สรุป

  • Entitlements คือสิทธิ์ดิจิทัลของแอปพลิเคชันในการใช้ฟังก์ชันระบบที่ได้รับการป้องกันของ iOS และ macOS ซึ่งฝังอยู่ในลายเซ็นโค้ด
  • ความแตกต่างจากการอนุญาต — entitlements จะถูกตรวจสอบโดยระบบเมื่อเริ่มต้นโดยอ้างอิงจากลายเซ็น ไม่ได้ร้องขอจากผู้ใช้และไม่สามารถเพิกถอนได้
  • Capabilities คือการจัดกลุ่ม Xcode ของ entitlements สำหรับการแจ้งเตือนแบบ Push, iCloud, App Groups, การซื้อภายในแอปและฟังก์ชันอื่นๆ
  • การตรวจสอบ — ผ่านคำสั่ง codesign ในเทอร์มินัล macOS สำหรับวินิจฉัยสิทธิ์ของแอปพลิเคชันที่ติดตั้งแล้ว
  • Entitlements ที่ละเอียดอ่อน — HealthKit, NFC, PassKit ต้องการการอนุมัติเพิ่มเติมจาก Apple ผ่าน App Review
  • หลักการสิทธิ์ขั้นต่ำ — รวมเฉพาะ entitlements ที่จำเป็นเพื่อลดพื้นผิวการโจมตีและผ่านการตรวจสอบ
  • ความปลอดภัย — entitlements ได้รับการป้องกันด้วยลายเซ็นดิจิทัล การปลอมแปลงเป็นไปไม่ได้หากไม่ลงนามแอปพลิเคชันทั้งหมดใหม่

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม