프로비저닝 프로파일은 iOS 앱의 코드 서명을 위해 개발자 인증서, 앱 식별자 그리고 허용된 기기 목록을 연결합니다. Apple Developer Documentation, 2026에 따르면, 물리 기기에서 앱을 실행하려면 프로파일이 필요합니다 — 그것이 없으면 Xcode iPhone이나 iPad에 빌드를 설치할 수 없습니다. 이 글에서는 프로파일의 구조, 유형 및 생성 과정을 살펴보겠습니다.
주요 요점
프로비저닝 프로파일은 Apple이 기기에서의 앱 설치 및 실행을 제어하는 데 사용하는 .mobileprovision(iOS용) 또는 .provisionprofile(macOS용) 형식의 디지털 구성 파일입니다. 프로파일에는 코드 서명 메타데이터가 포함되어 있으며, 이것이 없으면 물리적인 iPhone, iPad 또는 Apple Watch에서 앱을 실행할 수 없습니다 — 시뮬레이터는 코드가 실제 프로세서에서 실행되도록 서명되지 않으므로 프로파일이 필요하지 않습니다.
프로파일은 Apple Developer Portal을 통해 발급되며 만료일이 있습니다 — 보통 Development 및 Distribution 프로파일의 경우 1년입니다. Apple 정책에 따라, 프로파일은 파일이 서명된 Apple Developer Program 인증서와 자동으로 연결됩니다: 인증서가 권한 해제되거나 만료되면 프로파일이 더 이상 작동하지 않습니다.
각 프로파일에는 Xcode가 키체인에서 프로파일을 식별하는 데 사용하는 고유한 UUID가 포함되어 있습니다. Xcode는 빌드 중 적절한 프로파일을 자동으로 선택하지만, 개발자는 Signing & Capabilities 설정에서 선택을 무효화할 수 있습니다. 하나의 기기에 제한 없이 많은 수의 프로파일을 설치할 수 있습니다 — Apple의 모바일 기기 관리(MDM) 시스템은 기업 앱 배포를 위해 이것을 사용합니다.
코드 서명이 프로파일이 존재하는 주요 이유입니다. Apple은 iOS 기기에서 실행되는 모든 앱이 Apple이 발급한 인증서로 서명도록 요구합니다. 프로비저닝 프로파일은 게이트웨이 역할을 합니다: 개발자가 해당 기기에서 앱을 실행할 권한이 있음을 확인합니다. Apple Security Guide (2025)에 따르면, 프로파일 메커니즘은 개발자 인증서가 노출되더라도 사용자 기기에 릴웨어가 설치되는 것을 막습니다.
프로파일은 또한 앱에 사용 가능한 시스템 서비스를 결정합니다. 앱이 Push 알림을 사용하는 경우, Apple Push Notification service (APNs)는 프로파일 내에 올바른 entitlements가 필요합니다. 이것이 없으면 서버 알림이 기기에 전달되지 않습니다. 동일한 규칙이 iCloud, App Groups, Wallet, HealthKit 및 기타 Apple 프레임워크에도 적용됩니다.
개발자들은 종종 프로비저닝 프로파일과 Apple 인증서를 혼동합니다. 인증서는 신원을 확인하는 디지털 문서이며(누가 서명하는지), 프로파일은 구성 정보입니다(어떤 앱이, 어떤 기기에서, 어떤 권한으로). 하나의 인증서를 여러 프로파일에서 사용할 수 있으며, 하나의 프로파일은 정확히 하나의 인증서에 대응됩니다. Apple은 각 앱 및 각 시나리오(Development, Ad Hoc, App Store)에 대해 별도의 프로파일을 생성할 것을 권장합니다.
앱 서명 과정은 여러 단계로 구성됩니다. Xcode는 앱 바이너리(App Bundle)를 가져와 개발자의 개인키로 서명하고, 프로비저닝 프로파일을 임베드하여 기기로 보냅니다. 기기는 Apple의 공개키로 서명을 확인하고, 시스템의 신뢰되는 프로파일 목록과 UUID를 비교하여 모든 확인이 성공했을 때만 앱을 실행합니다.
사용자가 App Store에서 앱을 다운로드할 때 메커니즘이 다릅니다. App Store Connect는 Apple 자체의 Distribution 인증서로 앱을 재서명하고, 개발자의 프로파일을 Store 프로파일로 바꾸니다. 이는 App Store을 통해 게재된 앱이 기술적으로 Apple에 의해 서명되었으며, 개발자가 아님을 의미합니다 — App Store Connect에 빌드를 업로드할 때 원래 개발자 서명이 확인되지만.
Ad Hoc 배포의 경우, 프로파일은 앱이 실행 허용된 특정 기기 UDID를 등록합니다. 무료 Apple Developer Program 계정은 테스트를 연간 100대의 기기로 제한합니다. Enterprise 프로파일(조직 내부 배포용)에는 기기 제한이 없지만 활성화된 Apple Developer Enterprise Program 구독이 필요하며 비용은 연 $299입니다.
프로비저닝 프로파일의 유효 기간은 생성으로부터 1년입니다. 만료 30일 전부터 Apple은 Xcode 및 Developer Portal을 통해 개발자에게 push 알림을 보내기 시작합니다. 프로파일이 만료되면 이미 설치된 앱은 계속 작동하지만, 해당 프로파일로 새 빌드를 설치할 수 없습니다. Xcode는 만료된 프로파일로 빌드하려면 코드 -402620394의 코드 서명 오류를 발생시킵니다. Apple은 Xcode Accounts Preferences를 통해 자동 프로파일 갱신을 설정할 것을 권장합니다 — 그렇게 하면 Xcode가 만료 24시간 전에 프로파일을 갱신합니다.
Apple은 앱 수명 주기의 특정 단계를 위해 설계된 4가지 주요 프로비저닝 프로파일을 제공합니다. Development 프로파일은 Apple Developer Portal에 추가된 물리 기기에서 앱을 실행할 수 있게 하며 개발 및 QA 테스트에 사용됩니다. Development 프로파일을 생성하려면 무료 Apple 개발자 계정으로 충분합니다.
Ad Hoc 프로파일은 App Store을 사용하지 않고 제한된 테스터 그룹에 앱을 배포하도록 설계되었습니다. 프로파일은 UDID로 최대 100대의 기기를 등록하고, 앱은 iTunes, Apple Configurator 또는 MDM 해결책을 통해 직접 설치할 수 있습니다. Ad Hoc 빌드는 12개월의 유효 기간이 있으며 Apple 검토가 필요하지 않습니다.
App Store 프로파일은 App Store에 앱을 게재하는 데만 사용되며 기기 목록이 포함되지 않습니다 — 빌드 승인 후 Apple 자체가 배포를 관리합니다. App Store Connect에 아카이브를 업로드할 때 Xcode는 시스템에 App Store 프로파일이 설치되어 있으면 자동으로 그 프로파일을 사용합니다. Enterprise 프로파일은 Apple Developer Enterprise Program이 있는 조직을 위한 것으로, 기기 제한이나 Apple 검토 없이 내부 앱 배포가 가능합니다.
| 프로파일 유형 | 목적 | 기기 | 구독 비용 |
|---|---|---|---|
| Development | 개발 및 테스트 | 최대 100 UDID | 무료 / 연 $99 |
| Ad Hoc | 테스터에게 배포 | 최대 100 UDID | 연 $99 |
| App Store | App Store 게재 | 임의(Apple 통해) | 연 $99 |
| Enterprise | 내부 배포 | 무한 | 연 $299 |
프로비저닝 프로파일은 Apple이 서명한 DER 형식의 파일로, 그 내용을 명령라인으로 확인할 수 있습니다. macOS의 Security framework는 .mobileprovision을 읽을 수 있는 XML plist로 디코딩할 수 있습니다. 프로파일 내에는 프로파일 UUID, App ID(팀 접두사 + Bundle Identifier), 인증서 목록, 허용된 기기 목록(Development 및 Ad Hoc의 경우만), entitlements 그리고 만료일이 포함되어 있습니다.
App ID는 Team ID(Apple이 할당한 10자) 및 Bundle Identifier(예: com.example.myapp)로 구성된 고유한 앱 식별자입니다. App ID는 명시적(Bundle Identifier와 정확 일치) 또는 wildcard(여러 앱을 위한 패턴 *.example.com)가 되지만, Push 알림이나 iCloud를 사용하는 앱에서는 Apple이 wildcard 사용을 권장하지 않습니다 — 이러한 서비스에는 명시적 App ID가 필요하기 때문입니다.
Entitlements는 프로파일 내의 XML 블록으로, 시스템 자원에 대한 앱의 액세스 권한을 정의합니다. 일반적인 entitlements는 다음과 같습니다: aps-environment(Push 알림), com.apple.developer.icloud-services(iCloud), com.apple.security.application-groups(Widget 및 Share Extension에 대한 App Groups). Apple은 Xcode에서 활성화된 Capabilities를 기반으로 프로파일에 자동으로 entitlements를 추가합니다. 프로파일의 entitlements와 코드에서 요청된 entitlements 간에 일치하지 않으면 서명 오류가 발생합니다.
프로파일은 Apple Developer Portal 웹 인터페이스를 통해 또는 Xcode를 통해 자동으로 생성할 수 있습니다. 일반적인 프로젝트의 경우, Automatically manage signing 옵션이 활성화되어 있으면 Xcode가 프로파일을 자동으로 관리합니다. Xcode는 Apple Developer Portal과 동기하면서 수 초 내에 인증서, 프로파일 및 App ID를 생성합니다. 그러나 CI/CD 파이프라인에서는 수동 관리가 필요합니다.
Apple Developer Portal에서 수동으로 프로파일을 생성하려면: Certificates, Identifiers & Profiles로 이동하고 Profiles를 선택한 다음 "+"를 누르십시오. 그리고 프로파일 유형(Development, Ad Hoc, App Store 또는 Enterprise)을 선택하고, 등록된 목록에서 App ID를 선택한 다음, 개발자 인증서를 선택하고 (Development 및 Ad Hoc의 경우) 기기를 선택합니다. 생성 후, 프로파일은 .mobileprovision 형식으로 다운로드되고 Xcode에서 더블 클릭하면 설치됩니다.
CI/CD 서버는 특별한 접근이 필요합니다: 프로파일과 인증서는 안전한 저장소(예: GitHub Actions secrets)에 보관해야 합니다. 빌드 중 프로파일이 에이전트에 로드되고, ~/Library/MobileDevice/Provisioning Profiles 폴더에 배치되며, 인증서가 키체인에 임포트됩니다. Fastlane은 코드 서명 자동화를 위한 인기 있는 도구로, 암호화된 git 저장소를 통해 개발자 간에 프로파일과 인증서를 동기화하는 match 명령어를 제공합니다.
코드 서명 문제를 진단하려면 .mobileprovision을 디코딩하고 그 내용을 확인할 수 있습니다. 아래 명령어는 프로파일에서 XML plist를 추출하여 읽을 수 있는 형식으로 저장합니다:
# .mobileprovision을 XML로 디코딩
security cms -D -i "path/to/embedded.mobileprovision" \
-o "profile.plist"
# 프로파일 만료일 확인
plist -convert xml1 profile.plist -o -
grep -A 1 "ExpirationDate" profile.plist
Security 유틸리티는 macOS Command Line Tools에 포함된 것으로, CMS로 서명된 프로파일 파일을 디코딩합니다. -D 플래그는 디코딩을, -i는 입력 파일을 지정합니다. 디코딩 후, plist 유틸리티가 바이너리 plist를 XML로 변환하고, grep이 만료일을 추출합니다. 이 방법은 릴리스 빌드 전에 프로파일이 만료되지 않았는지 확인하는 데 CI/CD에서 유용합니다.
가장 흔한 오류는 Xcode에서 빌드 시 "No matching provisioning profiles found"입니다. Xcode가 빌드 구성과 일치하는 프로파일을 찾지 못하면 발생합니다: Bundle Identifier가 프로파일의 App ID와 매치되지 않거나, 인증서가 키체인에 설치되지 않거나, 프로파일이 만료된 경우입니다. 해결 방법은 타겟의 Signing & Capabilities 설정을 확인하고, 필요하면 Automatically manage signing으로 전환하는 것입니다.
"Provisioning profile doesn't include the selected device" 오류는 UDID가 프로파일에 추가되지 않은 기기에서 Development 또는 Ad Hoc 빌드를 실행하려면 나타난니다. Apple Developer Portal은 기존 프로파일에 기기를 추가할 수 있습니다 — 그런 다음 프로파일을 다시 다운로드하여 설치해야 합니다. Xcode는 자동 서명 관리로 연결된 기기를 프로파일에 자동으로 추가합니다.
Entitlements 문제는 App Store Connect에 업로드할 때 "The executable was signed with invalid entitlements" 오류로 나타난니다. 원인은 프로파일의 entitlements와 프로젝트의 .entitlements 파일 사이의 불일치입니다. Apple은 프로파일의 권한 집합이 앱이 요청하는 권한의 슈퍼셋이도록 요구합니다. 해결 방법은 Xcode 타겟에서 Capabilities를 확인하고 모든 활성화된 서비스에 프로파일에 해당하는 entitlements가 있는지 확인하는 것입니다. Fastlane에는 현재 entitlements로 App ID 및 프로파일을 동기화하는 produce 명령어가 있습니다.
자주 묻는 질문
네, 프로파일의 App ID가 com.example.* 형태의 wildcard 식별자를 사용하는 경우 가능합니다. 그러나 wildcard 프로파일은 Push 알림, iCloud, Game Center 및 App Groups를 지원하지 않습니다. Apple은 확장된 Capabilities를 사용하는 각 앱에 대해 별도의 명시적 프로파일을 생성할 것을 권장합니다.
App Store을 통해 업로드된 앱은 개발자의 프로파일과 무관한 Apple의 Store 프로파일을 사용합니다. 사용자는 앱을 계속 다운로드하고 실행할 수 있습니다. 만료된 프로파일은 App Store Connect에 새 빌드를 업로드하는 것만 막을 뿐입니다 — Apple은 제출 시점에 Distribution 프로파일이 유효할 것을 요구합니다.
프로파일을 새 컴퓨터의 ~/Library/MobileDevice/Provisioning Profiles 폴더에 복사할 수 있습니다. 그러나 프로파일은 키체인에 개인키가 있는 인증서에 연결되어 있습니다. Keychain Access를 통해 개인키가 있는 인증서를 또한 내보내야 하며 새 컴퓨터에 임포트해야 합니다.
컴퓨터에 프로파일 수에 제한이 없습니다. 프로파일은 ~/Library/MobileDevice/Provisioning Profiles에 저장되고 UUID로 식별됩니다. Xcode는 App ID 및 빌드 유형에 기반하여 적절한 프로파일을 자동 선택합니다. 관리를 간소화하려면 Xcode Accounts Preferences를 통해 사용하지 않는 프로파일을 제거하는 것이 좋습니다.
서명 인증서는 개발자의 신원을 확인합니다 — Apple이 발급한 암호 키입니다. 프로비저닝 프로파일은 어떤 앱(App ID)이 어떤 인증서로 어떤 기기에서 실행될 수 있는지 지정하는 구성 파일입니다. 프로파일은 항상 특정 인증서를 참조하지만 그것을 대체하지는 않습니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.