IPA(iOS App Store Package)는 iOS에서 애플리케이션을 배포하기 위한 아카이브 파일 형식입니다. App Store에 도달하는 모든 애플리케이션은 IPA 형식을 거칩니다. 개발자가 프로젝트를 빌드하고 서명한 후 IPA를 App Store Connect에 업로드합니다. Apple Developer Documentation, 2026에 따르면 IPA 형식은 ZIP 기반이며 실행 가능한 Mach-O 파일, 리소스 및 서명 메타데이터를 포함합니다.
주요 포인트
IPA(iOS App Store Package)는 Apple 플랫폼에서 애플리케이션을 배포하기 위한 패키지 형식입니다. APK와 마찬가지로 IPA는 기술적으로 ZIP 아카이브이지만 iOS 보안 및 서명 요구 사항에 의해 결정되는 자체 구조를 가지고 있습니다.
IPA 형식은 2008년 iPhone OS 2.0 및 App Store와 함께 등장했습니다. 전송 중 크기를 줄이기 위해 ZIP으로 패키징된 macOS의 .app 번들 형식을 기반으로 했습니다. 그 이후로 IPA 구조는 큰 변화를 겪지 않았으며 서명 체계와 메타데이터만 발전했습니다.
App Store — 주요 채널. Ad-hoc 배포 — 제한된 수의 장치(최대 100개)에서 테스트용. Enterprise 배포 — 스토어에 게시하지 않고 기업 앱 배포용. 개발자는 Xcode를 통해 실제 장치에서 테스트하기 위해 IPA를 사용하기도 합니다.
IPA의 내부 구조는 .app 번들이 포함된 Payload 폴더와 메타데이터가 포함된 ZIP 아카이브입니다.
| 파일/디렉터리 | 목적 |
|---|---|
| Payload/ | .app 번들이 포함된 루트 폴더 |
| Payload/App.app/ | 애플리케이션 번들: 실행 파일, 리소스, nib/storyboard |
| Payload/App.app/Info.plist | 메타데이터: bundle ID, 버전, 권한 |
| Payload/App.app/embedded.mobileprovision | 설치용 Provisioning Profile |
| iTunesMetadata.plist | iTunes 메타데이터(선택 사항) |
| META-INF/ | 검증을 위한 서명 및 해시 |
Payload 폴더 안에는 .app 확장자를 가진 애플리케이션 번들이 있습니다. 이것은 파일이 아니라 iOS가 애플리케이션으로 인식하는 디렉터리입니다. 내부에는 실행 가능한 Mach-O 파일(이름은 번들 이름과 일치), Info.plist, 리소스, 이미지 및 지역화된 문자열이 있습니다.
Swift 또는 Objective-C의 소스 코드는 Mach-O(Mach Object) 형식의 기계어 코드로 컴파일됩니다. 파일에는 __TEXT(코드), __DATA(데이터) 및 __LINKEDIT(링커 메타데이터) 세그먼트가 포함됩니다. 최신 IPA에는 64비트 arm64 아키텍처만 포함됩니다.
Xcode는 IPA 빌드를 자동화합니다: 소스 코드 컴파일부터 App Store Connect에 업로드할 준비가 된 서명된 아카이브 생성까지.
Debug — 개발용, 최적화 없음. Release — 게시용, 컴파일러 최적화 포함. 각 스키마는 컴파일 플래그, 코드 서명 및 entitlements를 정의합니다. Xcode는 Product → Archive를 통해 아카이브를 생성합니다.
// Info.plist — 기본 애플리케이션 메타데이터
<key>CFBundleName</key>
<string>MyApp</string>
<key>CFBundleIdentifier</key>
<string>com.example.myapp</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
Xcode는 각 .swift 또는 .m 파일을 개체 파일(.o)로 컴파일한 다음 단일 Mach-O 바이너리로 링크합니다. 리소스(이미지, XIB, storyboard)는 별도로 처리됩니다: 스토리보드는 바이너리 .storyboardc 형식으로 컴파일되고 이미지는 Asset Catalog(.car)로 최적화됩니다.
서명은 IPA의 가장 복잡한 측면입니다. Apple은 실제 장치에서 실행되는 모든 애플리케이션에 디지털 서명을 요구합니다. 시스템은 개발자 인증서, entitlements 및 Provisioning Profile 준수를 확인합니다.
인증서(Development 또는 Distribution) — 개발자의 신원을 인증합니다. Provisioning Profile — 인증서, bundle ID 및 허용된 장치 목록(ad-hoc용)을 연결합니다. Entitlements — 앱 권한(푸시 알림, iCloud, App Groups).
Xcode는 .app 번들 내의 각 라이브러리와 프레임워크에 서명한 다음 번들 자체에 서명합니다. 최종 IPA는 ZIP 아카이브 수준에서 서명됩니다. Apple은 설치 중에 모든 서명 수준을 확인합니다. iOS는 하나의 구성 요소라도 유효하지 않은 서명이 있으면 애플리케이션을 시작하지 않습니다.
// Security framework를 통한 서명 확인
import Security
func checkSignature() -> Bool {
let url = Bundle.main.bundleURL
var staticCode: SecStaticCode?
guard SecStaticCodeCreateWithPath(
url as CFURL,
[], &staticCode
) == errSecSuccess else {
return false
}
return true
}
App Store Connect는 앱 게시를 관리하는 Apple의 플랫폼입니다. IPA 업로드는 Xcode Organizer, Transporter 또는 명령줄에서 xcrun altool을 통해 수행됩니다.
아카이브를 생성한 후 Xcode는 방법 선택과 함께 Distribute App을 제공합니다: App Store Connect, Ad-hoc, Enterprise 또는 Development. App Store Connect를 선택하면 개발자가 팀을 지정하고 업로드를 확인합니다. Xcode는 서명을 확인하고 IPA를 Apple 서버로 보낸 후 처리 상태를 반환합니다.
CI/CD에는 xcrun altool 또는 최신 notarytool이 사용됩니다. Apple은 macOS 앱에 공증을 요구합니다. iOS의 경우 이 단계는 선택 사항이지만 권장됩니다. xcodebuild -exportArchive는 업로드할 준비가 된 서명된 IPA를 생성합니다.
Apple은 각 IPA를 악성 코드, 비공개 API 및 App Store Review Guidelines 준수 여부를 확인합니다. 검토 프로세스는 1시간에서 2일이 소요됩니다.
IPA를 App Store Connect에 업로드할 때 Apple은 App Thinning을 적용합니다. 이는 특정 기기에 맞게 바이너리를 최적화하는 기술입니다. Slicing은 지원되지 않는 해상도 및 아키텍처의 리소스를 제거합니다. On-Demand Resources는 사용자 요청 시에만 앱의 일부(게임 레벨, 비디오)를 로드할 수 있습니다. Bitcode는 Apple이 개발자의 개입 없이 새 아키텍처용으로 다시 컴파일할 수 있는 중간 표현입니다.
App Store는 또한 Sandbox 요구 사항 준수 여부를 확인합니다: 앱은 다른 앱의 데이터, 자체 컨테이너 외부의 파일 시스템 또는 사용자의 명시적 허가 없이 하드웨어 기능에 액세스할 수 없습니다.
TestFlight는 앱 베타 테스트를 위한 Apple의 공식 서비스입니다. 개발자가 IPA를 App Store Connect에 업로드하고 이메일 또는 공개 링크를 통해 테스터를 초대합니다.
Internal Testing — 개발자 팀의 최대 100명. Apple 검토 불필요. External Testing — 최대 10,000명의 테스터, Beta App Review 통과 필요. TestFlight는 자동으로 테스터에게 빌드를 배포하고 분석을 수집합니다.
빌드는 업로드 후 90일 동안 테스트에 사용할 수 있습니다. TestFlight는 동시에 최대 100개의 활성 빌드를 지원합니다. 각 테스터는 한 번에 최대 30개의 앱을 설치할 수 있습니다. Crashlytics는 TestFlight와 통합하여 충돌 보고서 및 비치명적 오류를 수집합니다.
CI 환경에서 IPA 빌드에는 macOS 러너가 필요합니다. GitHub Actions, GitLab CI 및 Bitrise는 iOS 빌드를 위한 macOS 환경을 제공합니다. Fastlane의 `build_app` lane은 보관, 서명, IPA 내보내기 및 TestFlight 업로드의 전체 사이클을 자동화합니다. 인증서 및 프로필 관리를 위해 암호화된 Git 저장소에 서명을 저장하는 Fastlane 도구인 Match가 사용됩니다.
개발자는 IPA 빌드 및 서명 시 여러 특징적인 오류에 직면합니다. 대부분은 인증서 및 프로필의 잘못된 구성과 관련됩니다.
Xcode가 bundle ID 및 인증서와 일치하는 Provisioning Profile을 찾을 수 없습니다. 해결 방법 — Xcode Accounts → Download Manual Profiles에서 최신 프로필을 다운로드하거나 Automatic Signing을 사용합니다.
이 오류는 잘못된 아키텍처로 IPA를 업로드할 때 발생합니다. 최신 IPA에는 arm64만 포함되어야 합니다. 바이너리에 i386 또는 x86_64가 포함되면 거부됩니다. 해결 방법 — Build Settings에서 아키텍처를 확인하고 시뮬레이터 아키텍처를 제외합니다.
IPA에 올바른 Payload/App.app 구조가 없습니다. Apple은 정확한 계층 구조를 기대합니다. 해결 방법 — 아카이브에 .app 번들이 있는 Payload 폴더가 포함되어 있는지 확인합니다(평면 파일 목록이 아님).
엔터프라이즈 배포에는 Enterprise Apple Developer Program($299/년)이 사용됩니다. IPA는 Enterprise 인증서로 서명되며 수량 제한 없이 회사의 모든 장치에 설치할 수 있습니다. Ad-hoc 배포는 개발자 계정당 100개의 장치로 제한됩니다($99/년). MDM(모바일 장치 관리) 시스템(Jamf, Microsoft Intune 등)은 Enterprise IPA의 대량 설치를 지원합니다.
자주 묻는 질문
IPA는 DEX 대신 Mach-O 실행 형식을 사용하며 설치에 Provisioning Profile이 필요하고 엄격한 App Store 검토를 거칩니다. APK는 IPA와 달리 중개자 없이 직접 설치할 수 있습니다(사이드로딩).
아니요, IPA 빌드에는 Xcode 및 Apple 도구가 필요하며 이는 macOS에서만 사용할 수 있습니다. 대안: 원격 macOS 서버(Mac mini, AWS Mac) 또는 클라우드 CI 서비스(macOS 러너가 있는 GitHub Actions).
간단한 앱 — 5~30MB. 중간 복잡성 앱 — 30~150MB. 게임은 4GB에 도달할 수 있습니다. Apple은 셀룰러 네트워크 다운로드 크기를 200MB로 제한하지만 사용자는 Wi-Fi를 통해 다운로드할 수 있습니다.
Ad-hoc 설치에는 Xcode 또는 Apple Configurator가 사용됩니다. Enterprise 앱은 manifest.plist와 함께 내부 서버를 통해 배포됩니다. 일반 사용자는 jailbreak 또는 TestFlight 없이는 IPA를 설치할 수 없습니다.
Fat IPA는 범용 빌드를 위해 여러 아키텍처(arm64 + x86_64)를 포함합니다. Thin IPA는 특정 기기에 대해 하나의 아키텍처만 포함합니다. Apple은 게시를 위해 thin IPA만 허용하며 fat 바이너리는 거부됩니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.