iOS 개발의 Entitlements: 정의, 유형 및 설정 방법

저자: IT Sectr 게시일: 2026-05-18 읽는 시간: 8 분

Entitlements는 코드 서명 단계에서 애플리케이션에 할당되는 디지털 권리 및 권한으로, Apple 운영 체제의 보호된 기능에 대한 액세스를 결정합니다. 사용자 권한과 달리 Entitlements는 애플리케이션 시작 시 시스템에 의해 확인되며 사용자가 변경할 수 없습니다. Apple Developer Documentation (2025)에 따르면 iCloud, 푸시 알림 및 App Groups를 사용하려면 Entitlements의 올바른 구성이 필수입니다. Entitlements는 iOS 및 macOS 보안 모델의 핵심 요소입니다.

핵심 요점

  • Entitlements는 애플리케이션 서명에 포함된 디지털 권한으로 iOS 및 macOS의 보호된 기능에 대한 액세스를 결정합니다.
  • 권한과의 차이점 — Entitlements는 시작 시 시스템에 의해 확인되며 사용자에게 요청되지 않습니다. 권한은 런타임에 시스템 대화 상자를 통해 요청됩니다.
  • Capabilities — Xcode는 Entitlements를 Capabilities로 그룹화합니다: 푸시 알림, iCloud, App Groups, 인앱 구매 등.
  • Entitlements 파일 — (.entitlements)는 Xcode 프로젝트의 XML 파일로, 키-값 형식의 권한 목록을 포함하며 Apple이 서명합니다.
  • 보안 — 코드 서명 중에 entitlements가 확인됩니다. 설치된 애플리케이션에서 entitlements를 변조하면 디지털 서명이 손상되고 시작이 차단됩니다.

Entitlements란?

Entitlements(영어로 “권리”를 의미)는 빌드 시 애플리케이션의 코드 서명에 포함되는 키-값 쌍으로, 애플리케이션이 액세스할 수 있는 시스템 기능과 데이터를 결정합니다. Entitlements는 iOS SDK 도입 이후 Apple의 보안 모델에 내장되어 있으며 App Store를 통해 배포되는 모든 애플리케이션에 필수입니다.

Entitlements의 개념은 Android의 전통적인 권한과 다릅니다. Android 권한은 기능을 처음 사용할 때 사용자에게 요청되지만, iOS의 Entitlements는 디지털 서명을 기반으로 애플리케이션 시작 시 시스템에 의해 확인됩니다. 사용자는 entitlement를 철회하거나 변경할 수 없습니다. 이 권한은 App Store Connect를 통해 개발자에게 부여되며 프로비저닝 프로필에 포함됩니다.

각 entitlement는 엄격하게 정의된 목적과 형식을 가지고 있습니다. 예를 들어, com.apple.security.application-groups는 동일한 개발자의 애플리케이션 집합이 공유 컨테이너에 액세스할 수 있도록 허용하고, aps-environment는 푸시 알림 지원을 활성화합니다. Apple은 App Review 프로세스 중에 entitlement 요청을 수동으로 검토하여 권한 남용을 방지합니다.

iOS의 Entitlements 유형

Entitlements는 기능적 목적에 따라 여러 범주로 분류됩니다. 시스템 서비스 — iCloud, 푸시 알림, Siri. 보안 및 데이터 — Keychain Access Groups, App Groups, Data Protection. 네트워크 및 통신 — Multipath TCP, VPN, Hotspot Configuration. 하드웨어 기능 — 카메라, 마이크, Bluetooth(관련 capabilities를 통해).

Capabilities 및 서비스 Entitlements

Xcode는 관련 entitlements를 Capabilities로 그룹화합니다 — Signing & Capabilities 탭의 상위 수준 스위치입니다. Capability를 활성화하면 필요한 entitlements가 .entitlements 파일에 자동으로 추가됩니다. 예를 들어, 푸시 알림 Capability를 활성화하면 aps-environment entitlement가 development 또는 production 값으로 추가되고, iCloud를 활성화하면 CloudKit 및 키-값 저장소를 위한 entitlements 세트가 추가됩니다.

일부 capabilities는 Apple Developer 포털에서 추가 구성이 필요합니다. 예를 들어, App Groups는 포털에 그룹 식별자를 등록해야 하며, 이후 Xcode에서 선택할 수 있습니다. 푸시 알림의 경우 APNs 키 또는 인증서를 생성해야 합니다. 이러한 준비 단계 없이는 올바른 .entitlements 파일이 있어도 entitlement가 작동하지 않습니다.

App Groups 및 Keychain Access

com.apple.security.application-groups entitlement를 사용하면 동일한 개발자의 여러 애플리케이션이 파일 시스템에서 공통 컨테이너를 공유할 수 있습니다. 이는 기본 애플리케이션과 확장 기능(Widget, Watch App, Share Extension) 간의 데이터 공유에 사용됩니다. 동일한 그룹의 모든 애플리케이션은 공유 디렉토리 /Library/Group Containers/에서 파일을 읽고 쓸 수 있습니다.

Keychain Access Groups(키 keychain-access-groups)는 동일한 그룹의 애플리케이션이 Keychain 항목에 대한 액세스를 공유할 수 있도록 하는 또 다른 중요한 entitlement입니다. 이는 Single Sign-On 구현에 매우 중요합니다. 사용자가 한 애플리케이션에 로그인하면 비밀번호를 다시 입력하지 않고 다른 애플리케이션에서 동일한 계정에 자동으로 액세스할 수 있습니다.

Entitlements 구성 방법

Entitlements 구성은 Xcode의 Target 설정에 있는 Signing & Capabilities 탭에서 수행됩니다. 개발자가 목록에서 필요한 Capabilities를 선택하면 Xcode가 자동으로 .entitlements 파일을 생성하거나 업데이트합니다. 이 파일은 plist 구조의 XML 형식으로 프로젝트에 저장되며 해당 Target의 모든 entitlement 키를 포함합니다.

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 파일을 수동으로 생성할 때는 키 형식과 접두사를 따르는 것이 중요합니다. Apple의 entitlements는 역방향 도메인 스타일(com.apple.*)을 사용합니다. 자체 목적을 위한 사용자 정의 entitlements도 가능하지만 개발자 포털에 등록해야 합니다. Xcode는 모든 표준 entitlement 키에 대해 자동 완성을 제공합니다.

Entitlements를 디버깅하려면 macOS 터미널에서 codesign 명령을 사용하십시오. codesign -d --entitlements :- <애플리케이션_경로> 명령은 애플리케이션이 서명된 모든 entitlements를 출력합니다. 이는 문제 진단에 유용합니다. 출력에서 entitlement가 누락된 경우 Xcode 설정에 관계없이 애플리케이션이 해당 기능에 액세스할 수 없습니다.

Entitlement 파일 수동 생성

Xcode는 Capabilities를 활성화할 때 entitlement 파일을 자동으로 생성하지만, 숙련된 개발자는 미세 조정을 위해 수동으로 생성하거나 편집하는 경우가 많습니다. 파일 확장자는 .entitlements이고 형식은 plist(XML)입니다. Xcode 인터페이스에 없는 사용자 정의 entitlement 키를 추가하거나 다른 capabilities의 entitlements를 하나의 파일에 결합할 수 있습니다.

수동으로 편집할 때는 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를 다시 확인합니다.

중요한 보안 요구 사항 중 하나는 최소 권한 원칙입니다. 개발자는 애플리케이션에서 실제로 사용되는 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)은 iOS에 비해 더 광범위한 entitlements 세트를 가지고 있습니다. 예를 들어, com.apple.security.temporary-exception.* entitlement는 특정 작업에 대해 샌드박스를 일시적으로 우회할 수 있도록 허용하지만 iOS에서는 이러한 entitlements가 완전히 존재하지 않습니다.

Entitlements 및 프로비저닝 프로필

Entitlements는 프로비저닝 프로필과 밀접하게 연결됩니다. 프로비저닝 프로필은 개발자 인증서, 허용된 장치 목록 및 특정 애플리케이션에 대한 entitlements 세트를 연결하는 파일입니다. 애플리케이션을 설치할 때 시스템은 코드의 entitlements와 프로비저닝 프로필의 entitlements를 비교합니다. entitlement가 코드에는 있지만 프로필에 없으면 애플리케이션이 해당 기능에 액세스할 수 없습니다.

Entitlements 문제를 진단하려면 먼저 프로비저닝 프로필을 확인하십시오. Xcode는 Apple Developer 포털에서 선택된 capabilities를 기반으로 프로필을 자동 생성합니다. Xcode에서 capability가 추가되었지만 포털에서 활성화되지 않은 경우, 보호된 기능을 사용하려고 하면 애플리케이션이 서명 오류로 충돌합니다.

일반적으로 사용되는 Entitlements

iOS 개발에서 가장 일반적으로 사용되는 entitlements를 살펴보겠습니다. aps-environment(푸시 알림) — 푸시 알림 전송에 필수. com.apple.developer.ubiquity-container-identifiers(iCloud) — CloudKit을 통한 데이터 동기화용. com.apple.security.application-groups — 애플리케이션과 확장 기능 간 데이터 공유용. com.apple.developer.associated-domains — Universal Links 및 Handoff용.

이러한 각 entitlements에는 엄격한 구성 절차가 있습니다. 푸시 알림은 Apple Developer 포털에서 APNs 키를 생성하고 Xcode에서 capability를 활성화해야 합니다. 이후 entitlement가 .entitlements 파일에 자동으로 설정됩니다. iCloud는 포털에서 컨테이너를 설정하고 Xcode의 드롭다운 목록에서 선택해야 합니다.

Associated Domains — 애플리케이션을 웹 도메인에 연결하는 entitlement입니다. Universal Links(애플리케이션에서 직접 열리는 딥 링크) 및 Handoff(다른 Apple 장치에서 작업 계속)에 사용됩니다. entitlement 값에는 applinks:example.com 형식의 문자열 배열이 포함됩니다. 서버에 apple-app-site-association 파일을 배치해야 합니다.

인기 있는 entitlements 및 그 목적 표:

Entitlement 키목적검토 필요
aps-environment푸시 알림아니요
com.apple.developer.ubiquity-*iCloud 동기화아니요
application-groups공유 앱 컨테이너아니요
com.apple.developer.healthkitHealthKit 데이터
com.apple.developer.nfc.*NFC 태그 읽기
associated-domainsUniversal Links아니요

자주 묻는 질문

iOS에서 Entitlements와 권한의 차이점은 무엇인가요?

Entitlements는 애플리케이션 서명에 포함되어 시작 시 시스템에 의해 확인되는 정적 권리입니다. 권한은 런타임에 사용자에게 요청되는 동적 허가입니다(카메라, 위치 정보).

설치된 애플리케이션의 Entitlements를 확인하는 방법은?

macOS 터미널에서 codesign -d --entitlements 명령을 사용하십시오. App Store 애플리케이션의 경우 ProvisionQL 유틸리티 또는 Xcode Organizer를 통해 entitlements를 확인할 수 있습니다.

게시 후 Entitlements를 변경할 수 있나요?

Entitlements를 변경하려면 새 빌드와 애플리케이션 재서명이 필요합니다. entitlement에 Apple의 승인이 필요한 경우 App Review를 다시 거쳐야 합니다. 재서명 없이는 entitlements 변경이 불가능합니다.

Xcode의 Entitlements 파일이란?

.entitlements 파일은 Xcode 프로젝트에 저장된 plist 형식의 XML 문서입니다. 구조화된 형태로 애플리케이션의 모든 entitlements 목록을 포함하며 실행 파일과 함께 서명됩니다.

Xcode의 Capabilities란?

Capabilities는 Xcode의 Signing & Capabilities 탭에 있는 상위 수준 스위치입니다. capability를 활성화하면 해당 entitlements가 .entitlements 파일에 자동으로 추가되고 프로비저닝 프로필이 구성됩니다.

요약

  • Entitlements는 iOS 및 macOS의 보호된 시스템 기능을 사용하기 위한 애플리케이션의 디지털 권리로, 코드 서명에 포함됩니다.
  • 권한과의 차이점 — entitlements는 시작 시 서명을 기반으로 시스템에 의해 확인되며, 사용자에게 요청되지 않고 철회될 수 없습니다.
  • Capabilities는 푸시 알림, iCloud, App Groups, 인앱 구매 및 기타 기능을 위한 entitlements의 Xcode 그룹입니다.
  • 확인 — macOS 터미널에서 codesign 명령을 통해 설치된 애플리케이션 권한을 진단합니다.
  • 민감한 entitlements — HealthKit, NFC, PassKit은 App Review를 통한 Apple의 추가 승인이 필요합니다.
  • 최소 권한 원칙 — 공격 표면을 줄이고 검토를 통과하기 위해 필요한 entitlements만 포함하십시오.
  • 보안 — entitlements는 디지털 서명으로 보호되며, 전체 애플리케이션에 다시 서명하지 않으면 변조가 불가능합니다.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기