프로그래밍/Xcode
[Xcode] Entitlements 파일
Joo-Topia
2025. 4. 8. 00:08
728x90
엔타이틀먼트 파일(Entitlements file)이란?
앱이 특정한 시스템 기능(권한) 을 사용하고자 할 때, 그 기능을 앱 서명(Signing) 시점에 명시적으로 선언하는 설정 파일
`.entitlements` 확장자이며, 내부는 plist(XML) 형식으로 되어 있다.
기능 | Entitlement | 키설명 |
푸시 알림 | aps-environment | APNs 등록을 위한 선언 |
App Group | com.apple.security.application-groups | 앱 간 데이터 공유 |
iCloud | com.apple.developer.icloud-services | iCloud 문서/키-값 저장 |
키체인 공유 | keychain-access-groups | 앱 간 키체인 공유 |
백그라운드 작업 | UIBackgroundModes | 위치 추적, 오디오, fetch 등 |
Siri, HomeKit, Sign in with Apple 등 | 다양한 개별 entitlement 키들 | 시스템 기능들 |
Entitlements 파일 생성
1. Xcode에서 타겟 선택 → Signing & Capabilities 탭 클릭
2.+ Capability 버튼 클릭
3. 원하는 기능 추가 (예: Push Notifications)
4. 생성된 `.entitlements` 파일 확인
.entitlements 파일 내용
푸시 알림 예시:
<?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.yourcompany.yourapp.stage</string>
</array>
</dict>
</plist>
중요한 특징
특징 | 설명 |
서명 시점에 사용됨 | 코드 자체보다, 앱 패키징 + 서명 단계에서 매우 중요 |
Capabilities에 따라 자동 수정됨 | Signing & Capabilities에서 추가한 기능이 여기에 반영됨 |
Provisioning Profile과 연동됨 | Apple 계정에 등록된 권한과 일치해야 함 (불일치 시 빌드/배포 에러 발생) |
Debug / Release 별로 구분 가능 | 예: 개발용 푸시 인증서 → development, 배포용 → production |
런타임 동작
- 앱이 UNUserNotificationCenter로 푸시 알림 권한 요청 할 경우
aps-environment entitlement가 없으면 APNs 등록 자체가 실패
- 앱이 UserDefaults(suiteName:)으로 앱 그룹을 접근 할 경우
앱 그룹 entitlement가 없으면 접근 거부됨
-> 코드만으로는 사용할 수 없음. 반드시 .entitlements에 등록 필요
앱 보안과 연결
Apple 플랫폼은 Sandbox 구조이기 때문에, Entitlements는 일종의 권한 계약서 역할을 함.
이 파일이 없으면 OS가 해당 기능을 차단해버림. (위 런타임 동작 예시)
728x90