---
title: "IPA 실링"
description: "빌드된 .IPA를 Developer Console에 업로드하여 iOS 앱을 보호합니다. SDK 연동이나 코드 변경이 필요 없습니다."
---
> For the complete documentation index, see [llms.txt](https://docs.doverunner.com/llms.txt).

IPA 실링은 이미 빌드된 iOS 앱을 보호합니다. 빌드된 `.IPA`를 Developer Console에 업로드하면 DoveRunner가 RASP(런타임 애플리케이션 자체 보호)와 앱 변조 방어 기능을 바이너리에 직접 주입하고, 보호된 빌드를 내려받을 수 있습니다.

소스 코드나 앱 로직은 전혀 변경되지 않습니다. 컴파일된 바이너리를 대상으로 동작하기 때문입니다.

**Note:** 
다운로드한 SDK를 빌드 파이프라인에 통합하는 [SDK 실링](https://docs.doverunner.com/ko/mobile-app-security/ios/sdk-sealing/)의 대안입니다. 빌드 방식을 바꾸는 대신 완성된 빌드를 보호하고 싶을 때 사용하세요.


## 서명이 중요한 이유

보호 기능을 주입하면 앱 실행 파일이 변경되므로 원본 코드 서명이 무효화됩니다. **실링된 IPA는 재서명해야 iOS가 설치·실행을 허용합니다.** 위저드 2단계의 **코드 서명** 스위치로 재서명 주체를 정합니다.

| 코드 서명 | 업로드하는 것 | 결과물 |
| :-------- | :------------ | :----- |
| **활성** (기본값) — DoveRunner가 재서명 | IPA **+** 프로비저닝 프로파일 **+** `.p12` 인증서 **+** 인증서 비밀번호 | 서명이 완료된 IPA를 받아 바로 설치하거나 제출할 수 있습니다. |
| **비활성** — 직접 재서명 | IPA만 | 서명되지 않은 IPA를 받습니다. 본인의 프로비저닝 프로파일과 인증서로 재서명하기 전까지는 기기에 설치하거나 App Store Connect에 업로드할 수 없습니다. |

## 준비물

애플리케이션 바이너리는 항상 필요합니다. **코드 서명**이 기본적으로 활성 상태이므로 나머지 세 가지도 필수이며, 세 가지를 모두 제공해야 실링을 시작할 수 있습니다. **코드 서명**을 비활성으로 바꾸고 결과물을 직접 재서명하는 경우에만 생략할 수 있습니다.

| 자산 | 형식 | 필수 여부 | 용도 |
| :--- | :--- | :-------- | :--- |
| **애플리케이션 바이너리** | `.IPA` | **필수** | 보호 전의 컴파일된 iOS 애플리케이션. Xcode 또는 CI/CD 파이프라인으로 빌드합니다. |
| **프로비저닝 프로파일** | `.mobileprovision` | 코드 서명 활성 시 필수 | 설치 대상, App ID 기능, 엔타이틀먼트를 정의합니다. |
| **서명 인증서** | `.p12` (PKCS#12) | 코드 서명 활성 시 필수 | 개인 키와 Apple이 발급한 배포·개발용 인증서를 포함합니다. |
| **인증서 비밀번호** | 평문 | 코드 서명 활성 시 필수 | 비밀번호로 보호된 `.p12` 개인 키를 복호화합니다. |

### 애플리케이션 바이너리 (`.IPA`)

- **생성 방법** — Xcode에서 `.IPA`로 내보내거나 자동화된 빌드 시스템에서 생성합니다.
- **아키텍처** — 표준 iOS 기기(ARM64)를 대상으로 해야 합니다.
- **복호화된 빌드** — IPA는 복호화된 빌드여야 합니다. App Store에서 내려받은 앱은 FairPlay 암호화가 적용되어 있어 그대로 실링할 수 없습니다.
- **Bitcode** — 내보낼 때 Bitcode를 비활성화하세요. DoveRunner는 표준 ARM64 바이너리를 요구하며, Apple도 최근 Xcode에서 Bitcode를 지원 중단했습니다.
- **무결성** — 보호 전에 정상적으로 컴파일되고 동작하는 빌드인지 확인하세요. 실링 과정에서 원본 서명이 대체됩니다.

### 프로비저닝 프로파일 (`.mobileprovision`)

- **Bundle ID 일치** — 프로파일의 App ID가 앱의 기본 Bundle ID와 정확히 일치하거나, 승인된 와일드카드 App ID여야 합니다.
- **엔타이틀먼트 일치** — App Groups, 푸시 알림, Associated Domains, Keychain Sharing 등 앱이 사용하는 모든 기능이 프로파일에 명시적으로 포함되어야 합니다.
- **배포 방식** — Development, Ad-Hoc, Enterprise In-House, App Store 중 실제 배포 경로와 일치시켜야 합니다.

### 서명 인증서 (`.p12`)와 비밀번호

- **형식** — 인증서와 그에 대응하는 개인 키를 모두 포함한 `.p12`(PKCS#12) 파일이어야 합니다.
- **유효성** — 만료되지 않았고 Apple이 발급한 인증서(Apple Development 또는 Apple Distribution)여야 합니다.
- **추출 위치** — macOS 키체인 접근의 **나의 인증서**에서 내보냅니다.
- **비밀번호** — `.p12`를 내보낼 때 지정한 암호입니다.

#### 키체인 접근에서 `.p12` 내보내기


1. Mac에서 **키체인 접근**을 엽니다(Spotlight 또는 **응용 프로그램 → 유틸리티**).

2. 사이드바에서 *키체인* 아래 **로그인**을, *카테고리* 아래 **나의 인증서**를 선택합니다.

3. 사용 중인 Apple Distribution 또는 Development 인증서를 찾습니다. 예: `iPhone Distribution: Company Name (Team ID)`

4. 인증서 항목을 펼쳐 아래에 개인 키가 있는지 확인합니다.

5. 인증서와 개인 키를 **둘 다** 선택한 뒤 마우스 오른쪽 버튼을 클릭하고 **2개 항목 보내기…**를 선택합니다.

6. 파일 형식을 **개인 정보 교환(.p12)**으로 설정하고 **저장**을 클릭합니다.

7. 강력한 비밀번호를 지정하고 보관하세요. Developer Console에서 입력해야 합니다.


**Caution:** 
개인 키 없이 인증서만 내보내면 실링이 개인 키 누락 오류로 실패합니다. 반드시 항목을 펼쳐 두 개를 함께 선택하세요.


## 실링 절차

**iOS 모바일 앱 보안 → IPA 실링**을 엽니다. 위저드는 3단계로 구성됩니다.

| 단계 | 이름 | 다루는 내용 |
| :--- | :--- | :---------- |
| 1 | **파일 업로드** | `.IPA` 업로드 및 상시 적용 보호 기능 확인 |
| 2 | **기본 설정** | 프레임워크 지정, 배포 옵션, **코드 서명**, 그리고 DoveRunner가 대신 서명하는 경우 프로비저닝 프로파일·`.p12`·인증서 비밀번호 |
| 3 | **환경 탐지** | 변조되었거나 신뢰할 수 없는 실행 환경에 대한 앱의 대응 방식 |

### 1단계 — 파일 업로드

보호 전 `.IPA`를 선택하거나 업로드 영역으로 끌어다 놓습니다. 옆 패널에는 아래에서 설명하는 [상시 적용 보호 기능](#상시-적용-보호-기능)이 표시됩니다.

### 2단계 — 기본 설정

| 옵션 | 설명 |
| :--- | :--- |
| **React Native로 빌드된 앱입니다** | React Native 앱이라면 체크합니다. React Native 앱은 암호화된 JavaScript를 정상적으로 복호화하고 실행하려면 사용 중인 React Native 버전과 일치하는 Hermes 엔진이 필요합니다. 체크하면 **프레임워크 버전**이 나타나며 React Native 주 버전(**주 버전 선택**)과 부 버전(**부 버전 선택**)을 선택합니다. |
| **AppSealing 버전** | 빌드에 적용되는 실링 버전입니다. `1.14.0.0`으로 고정되며 선택할 수 없습니다. |
| **App Store & TestFlight를 사용하지 않는 배포 허용** | App Store나 TestFlight 외의 방식(엔터프라이즈 배포, IPA 직접 설치 등)으로 배포하는 경우 활성화합니다. 일반적인 App Store 제출이라면 해제 상태로 둡니다. |
| **코드 서명** | 기본값은 **활성**입니다. DoveRunner가 프로비저닝 프로파일과 인증서로 실링된 IPA를 재서명하므로, 다운로드한 파일을 바로 설치하고 배포할 수 있습니다. 활성 상태에서는 아래 세 항목이 모두 필수입니다. **비활성**으로 바꾸면 재서명을 건너뛰며, 세 항목이 숨겨지고 입력값이 지워지고, 다운로드하는 IPA가 서명되지 않는다는 경고가 표시됩니다. |
| **프로비저닝 프로파일 (.mobileprovision)** | **코드 서명**이 활성일 때 표시됩니다. 실링된 IPA 재서명에 필요합니다. |
| **P12 인증서** | **코드 서명**이 활성일 때 표시됩니다. 실링된 IPA 재서명에 필요합니다. Ad Hoc 및 App Store 배포에 사용되며, 코드 서명에 필요한 인증서와 개인 키를 모두 포함해야 합니다. |
| **P12 비밀번호** | **코드 서명**이 활성일 때 표시됩니다. 키체인 접근에서 `.p12`를 내보낼 때 지정한 비밀번호입니다. |

**Note:** 
요금제에 하이브리드(React Native) 앱이 포함되어 있지 않으면 **React Native로 빌드된 앱입니다**가 비활성화됩니다. 사용하려면 [헬프 센터](https://support.doverunner.com)로 문의해 주세요.


### 3단계 — 환경 탐지

변조되었거나 신뢰할 수 없는 실행 환경에 대해 실링된 앱이 어떻게 대응할지 설정합니다.

| 옵션 | 값 | 기본값 | 설명 |
| :--- | :-- | :----- | :--- |
| **후킹** | 차단 / 허용 | 차단 | 앱에 코드를 주입하는 런타임 후킹 프레임워크를 차단합니다. |
| **메소드 스위즐링** | 차단 / 허용 | 차단 | 런타임에 앱 동작을 바꾸는 Objective-C 메서드 스위즐링을 차단합니다. |
| **보안 스토리지** | 사용 / 미사용 | 사용 | 기기에 저장되는 앱 데이터를 보호합니다. |
| **화면 캡처** | 차단 / 허용 | 차단 | 앱 화면이 캡처되거나 녹화되지 않도록 합니다. |
| **위협 감지 시 앱을 종료하지 않음.** | 체크박스 | 해제 | 체크하면 위협 탐지 시 DoveRunner가 앱을 자동으로 종료하지 않으므로 대응을 직접 처리할 수 있습니다. 위협 유형별로 콜백을 등록해야 하며, 운영 환경에서 처리되지 않은 상태로 두면 안 됩니다. |

### 마무리


1. **앱실링 적용**을 클릭하면 바이너리 주입, 변조 방어 적용, (**코드 서명**이 활성인 경우) 재서명이 수행됩니다. 이 버튼은 `.IPA`를 업로드하고 필수 항목을 모두 입력해야 활성화됩니다.

   **코드 서명**이 비활성이면 먼저 **코드 서명 없이 시작할까요?** 확인 창이 열리고, 실링된 IPA가 서명되지 않는다는 안내가 표시됩니다. 계속하려면 **서명 없이 계속**을, 돌아가려면 **닫기**를 클릭합니다.

2. 실링이 완료되면 결과에 **서명됨** 또는 **서명되지 않음** 태그가 표시됩니다. **실링 된 앱 다운로드**를 클릭해 실링된 `.IPA`를 내려받습니다. 서명되지 않은 IPA라면 배포 전에 직접 재서명하세요.


이전 실행 이력은 [**실링 이력**](https://docs.doverunner.com/ko/mobile-app-security/ios/#%EC%8B%A4%EB%A7%81-%EC%9D%B4%EB%A0%A5)에서 확인할 수 있으며, 성공한 실행의 실링된 IPA를 일정 기간 동안 다시 내려받을 수 있습니다. 앱별 서비스 설정은 IPA 실링과 SDK 실링이 함께 사용하는 [**앱 구성**](https://docs.doverunner.com/ko/mobile-app-security/ios/sdk-sealing/#%EC%95%B1-%EA%B5%AC%EC%84%B1)에서 관리합니다.

## 상시 적용 보호 기능

IPA로 실링한 모든 앱에는 아래 보호 기능이 적용됩니다. 항상 활성화되어 있으며 별도의 코딩이 필요 없습니다. 위저드 1단계의 **고유 기능** 영역에서 확인할 수 있습니다.

### 상시 적용 기능

| 보호 기능 | 설명 |
| :-------- | :--- |
| **JavaScript 바이트코드 암호화 (React Native 전용)** | React Native JavaScript 바이트코드를 암호화하여 비즈니스 로직의 리버스 엔지니어링을 방지합니다. |
| **코드 암호화 플래그** | 코드 암호화 플래그를 적용하여 정적 분석 도구에 대한 바이너리 내성을 강화합니다. |
| **인증서 / 인증서 확인** | 앱 서명 인증서를 검증하여 승인되지 않은 주체가 재서명하지 않았는지 확인합니다. |
| **Jailbreak 탐지** | 탈옥된 기기를 탐지하고 변조된 환경에서 앱이 실행되지 않도록 합니다. |
| **치트 도구 탐지** | 일반적인 치트툴, 게임 해킹 유틸리티, 비인가 자동화 도구를 탐지합니다. |
| **파일 무결성 검사** | `Assets.car`, 프레임워크, 화이트리스트 파일을 제외한 앱 파일의 무결성을 검증하여 비인가 변조를 탐지합니다. |

### 디버깅 및 동적 공격 방어

| 보호 기능 | 설명 |
| :-------- | :--- |
| **메서드 스위즐링/훅 탐지** | Frida, Cydia Substrate 등이 런타임에 악성 코드를 주입하는 데 사용하는 Objective-C 메서드 스위즐링을 탐지하고 차단합니다. |
| **디버깅/어태치(Attach) 탐지** | 앱 프로세스에 디버거가 연결된 것을 탐지하고 앱을 종료합니다. |
| **Frida 프레임워크** | 디버깅·후킹·스크립트 주입에 널리 쓰이는 Frida 프레임워크를 여러 레이어에서 탐지합니다. |

## 자격 증명 처리

- **임시 처리** — 서명 자격 증명은 격리된 일회성 빌드 환경에서 처리됩니다.
- **미저장** — `.p12` 파일, 인증서 비밀번호, 프로비저닝 프로파일은 영구 저장되지 않으며, 실링 세션이 끝나는 즉시 안전하게 파기됩니다.
- **변조 방지 봉인** — RASP, 무결성 검사, 안티 디버깅 기능은 바이너리 서명에 결속되므로, 실링 이후 변조된 바이너리는 실행되지 않습니다.

## 문제 해결

| 오류 | 원인 | 해결 방법 |
| :--- | :--- | :-------- |
| **인증서 복호화 실패 / 잘못된 비밀번호** | 입력한 비밀번호가 `.p12`를 내보낼 때 지정한 암호와 다르거나 파일이 손상되었습니다. | 키체인 접근에서 인증서와 개인 키를 함께 다시 내보내고 단순한 평문 암호를 지정하세요. `.p12`를 키체인에 다시 가져와 확인한 뒤 재업로드합니다. |
| **Bundle ID 불일치** | 앱의 Bundle ID가 `.mobileprovision`의 App ID와 다릅니다. | Xcode에서 Bundle ID를 확인하고, 프로파일이 해당 Bundle ID를 정확히 대상으로 하거나 승인된 와일드카드 App ID(`com.company.*`)를 사용하도록 설정하세요. |
| **엔타이틀먼트 불일치** | IPA가 사용하는 기능(푸시 알림, App Groups, Keychain Sharing 등)이 업로드한 프로파일에 없습니다. | Apple Developer 계정에서 프로파일을 수정해 필요한 기능을 모두 활성화하고, 다시 내려받아 실링을 재실행하세요. |
| **`.p12`에 개인 키 없음** | 공개 인증서만 내보냈습니다. | 키체인 접근에서 인증서 항목을 펼쳐 인증서와 개인 키를 함께 선택한 뒤 **2개 항목 보내기…**를 실행하세요. |
| **실링 후 실행 시 앱 크래시** | 프로파일의 배포 유형이 대상 환경과 맞지 않습니다. 예를 들어 TestFlight 빌드에 Development 프로파일을 사용했거나, Ad-Hoc 프로파일에 등록되지 않은 기기를 사용한 경우입니다. | `.mobileprovision`이 실제 배포 경로와 일치하는지 확인하세요. Ad-Hoc 테스트라면 프로파일 생성 전에 기기 UDID를 추가해야 합니다. |

## 자주 묻는 질문

**실링하면 앱의 기능이나 소스 코드가 바뀌나요?**
아니요. DoveRunner는 컴파일된 바이너리를 대상으로 RASP 방어 기능과 변조 방지 장치를 주입하며, 소스 코드나 앱 로직은 건드리지 않습니다.

**실링된 `.IPA`를 App Store에 바로 제출할 수 있나요?**
네. 유효한 Apple Distribution 인증서와 프로덕션 App Store 프로비저닝 프로파일로 서명되어 있다면 — 실링 중 DoveRunner가 서명했든 이후에 직접 서명했든 — App Store 제출과 TestFlight 배포에 사용할 수 있습니다.

**DoveRunner가 `.p12` 개인 키와 비밀번호를 요구하는 이유는 무엇인가요?**
DoveRunner에게 재서명을 맡기는 경우, 즉 **코드 서명**이 활성(기본값)인 경우에만 필요합니다. 보호 기능을 주입하면 원본 서명이 깨지므로, 변경된 바이너리를 재서명하려면 개인 키가 필요합니다. 공유하고 싶지 않다면 **코드 서명**을 비활성으로 바꾸고, 실링을 시작할 때 **서명 없이 계속**을 선택한 뒤 결과물을 직접 재서명하세요.

**서명 자격 증명이 DoveRunner 서버에 저장되나요?**
아니요. 업로드된 `.p12` 파일, 비밀번호, `.mobileprovision` 프로파일은 일회성 컨테이너에서 처리되며 실링 세션이 끝나는 즉시 파기됩니다.

**Bitcode 빌드를 지원하나요?**
아니요. DoveRunner는 표준 ARM64 바이너리를 요구하므로 내보낼 때 Bitcode를 비활성화하세요.