# TestFlight Missing Compliance 해결 방법: 완전히 없애기

> Missing Compliance는 Apple이 암호화 신고를 기다린다는 뜻이에요. App Store Connect에서 이 빌드를 풀고, 키를 설정해 다시 안 보이게 하세요.

원본 페이지: [TestFlight Missing Compliance 해결 방법: 완전히 없애기](https://devoria.fr/ko/blog/testflight-missing-compliance-fix)
작성자: [Mehdi Azizi](https://devoria.fr/ko/mehdi-azizi)
게시일: 2026-11-06
최종 내용 수정: 2026-11-06


**Missing Compliance는 오류가 아니에요. 암호화에 대한 답변을 기다리는 빌드예요.** 답변하기 전까지 빌드는 테스터에게 전달되지 않아요. 지금 빌드는 App Store Connect의 TestFlight 탭에서 질문에 답하면 돼요. 다음 빌드부터는 Info.plist에 ITSAppUsesNonExemptEncryption 키를 넣거나, Expo라면 app.json에 `ios.config.usesNonExemptEncryption`을 넣으세요. 그러면 이 상태가 다시 나타나지 않아요.

제 iOS 앱은 Expo로 만들어요. Solys의 app.json에서는 이 키를 `false`로 두 번 넣어 뒀어요. `ios.config`와 `ios.infoPlist`에요. 이 가이드는 Apple의 [빌드 상태](https://developer.apple.com/help/app-store-connect/reference/app-uploads/app-build-statuses/) 페이지와 [베타 빌드의 수출 규정 준수](https://developer.apple.com/help/app-store-connect/test-a-beta-version/provide-export-compliance-information-for-beta-builds/) 페이지를 따르며, 2026년 11월 6일에 다시 확인했어요.

## Missing Compliance의 의미

Apple의 빌드 상태 목록은 이걸 한 문장으로 정의해요. 수출 규정 준수 문서가 빠져 있고, 여러분의 조치가 필요하다는 거예요. Apple은 이 상태를 노란색으로 표시해요. 여러분이나 Apple에 달린, 진행 중인 과정의 색이에요. 설명에도 여러분의 조치가 필요하다고 적혀 있어요.

Apple은 왜 이걸 물어볼까요? [암호화 수출 규정 페이지](https://developer.apple.com/documentation/security/complying-with-encryption-export-regulations)가 설명해 줘요. 빌드를 TestFlight나 App Store로 보내면 미국에 있는 서버로 보내는 거예요. 앱이 미국과 캐나다 밖에서 배포되면, 회사가 어느 나라에 있든 미국 수출법의 적용을 받아요. 그리고 앱이 암호화를 사용하거나, 포함하거나, 통합하는 순간 Apple은 이를 암호화 소프트웨어 수출로 봐요.

**결과적으로 새 버전마다 App Store Connect가 규정 준수 질문을 해요. Info.plist가 이미 답하고 있지 않다면요.** 그래서 Expo의 첫 빌드는 거의 항상 Missing Compliance 상태로 도착해요.

## 대기 중인 빌드 풀기

아래 단계는 Apple의 베타 빌드 수출 규정 준수 페이지에서 가져왔어요. Account Holder, Admin, App Manager 역할 중 하나가 필요해요.

1. Apps에서 앱을 열고 TestFlight 탭으로 가세요.
2. 사이드바의 Builds 아래에서 플랫폼을 선택하세요.
3. Build 열에서 해당 빌드의 아이콘이나 번호를 클릭하세요.
4. Provide Export Compliance Information을 클릭하고 질문에 답하세요.
5. Apple이 문서를 요구하면 Go to App Encryption Page를 클릭해서 보내세요. 아니면 Save를 클릭하세요.

Apple은 지름길도 알려 줘요. 빌드 옆의 Manage 링크를 누르면 같은 질문이 열리고, Choose File로 이미 승인된 문서를 첨부할 수 있어요. 저장하면 빌드는 Ready to Submit으로 바뀌고, 내부 그룹에 배포되는 빌드라면 바로 Testing으로 바뀌어요. Ready to Test는 외부 테스터용 베타 심사가 끝난 뒤에야 나와요.

**Manage 링크가 클릭되지 않나요?** 먼저 팀에서 내 역할을 확인하세요. Apple은 답변 권한을 Account Holder, Admin, App Manager 역할에만 줘요. Developer나 Marketing 계정으로는 답할 수 없어요. Apple이 문서화한 다른 원인은 없어요. 빌드를 방금 보냈다면 처리 완료 이메일을 기다린 뒤 페이지를 새로고침하세요. 자세한 내용은 [빌드 번호와 버전](https://devoria.fr/ko/blog/app-store-connect-build-number-version) 가이드에 있어요.

## 다시는 답하지 않기: 프로젝트에 키 넣기

Apple은 베타 빌드 페이지에서 이렇게 말해요. 앱이 암호화를 쓰지 않거나 면제 대상이라는 걸 Info.plist에 표시할 수 있고, 그러면 제출할 때마다 답할 필요가 없어요. 키 이름은 [ITSAppUsesNonExemptEncryption](https://developer.apple.com/documentation/bundleresources/information-property-list/itsappusesnonexemptencryption)이에요. Xcode에서는 App Uses Non-Exempt Encryption이라는 이름으로 보여요.

| 사용 도구         | 파일         | 위치                           | 값    |
| ----------------- | ------------ | ------------------------------ | ----- |
| Expo (EAS Build)  | `app.json`   | `expo.ios.config`              | false |
| Expo, 다른 방법   | `app.json`   | `expo.ios.infoPlist`           | false |
| 순수 React Native | `Info.plist` | App Uses Non-Exempt Encryption | NO    |
| Xcode, Swift      | `Info.plist` | App Uses Non-Exempt Encryption | NO    |

Expo에서는 키 이름이 `usesNonExemptEncryption`이에요. [설정 레퍼런스](https://docs.expo.dev/versions/latest/config/app/)에 따르면 이 키는 빌드의 Info.plist에 Apple 키를 써 넣고, `ios.config`는 빌드에만 쓰여요. 프로덕션 매니페스트에는 나타나지 않아요.

```json
{
  "expo": {
    "ios": {
      "config": {
        "usesNonExemptEncryption": false
      }
    }
  }
}
```

Expo에서는 `ios.infoPlist`에도 Apple 이름 그대로 같은 값으로 키를 넣을 수 있어요. Solys의 app.json에 있는 두 번째 줄이 바로 그거예요. 네이티브 프로젝트에서는 같은 선언이 Info.plist 한 줄이면 돼요. Xcode에 보이는 이름인 App Uses Non-Exempt Encryption 키에 값 NO를 넣으세요. 값은 문자열이 아니라 불리언이에요.

**키는 다음 빌드부터 적용돼요.** 이미 보낸 빌드는 App Store Connect에서 답할 때까지 Missing Compliance로 남아요. 두 작업은 서로를 대신하지 않고, 서로를 보완해요.

## false냐 true냐: 결정하는 법

Apple은 NO 값을 이렇게 정의해요. 서드파티 라이브러리를 포함해 앱이 암호화를 전혀 쓰지 않거나, 문서 제출 의무가 면제된 암호화만 쓰는 경우예요. 그 외에는 YES예요.

수출 규정 페이지에 따르면 보통 면제되는 건 시스템에 내장된 암호화예요. URLSession을 통한 HTTPS 연결 같은 거죠. 면제되지 않는 건 직접 작성했거나 앱에 넣은 독자적인 암호화예요. [수출 규정 준수 개요](https://developer.apple.com/help/app-store-connect/manage-app-information/overview-of-export-compliance/)는 중요한 점을 하나 더 짚어요. 해석의 책임은 여러분에게 있고, 면제를 잘못 주장하면 그 결과도 여러분이 져요.

HTTPS로 API를 호출하고, 설정을 저장하고, 구독을 판매하는 Expo 앱이라면 보통 답은 `false`예요. 메시지, 파일, 보관함을 앱이 직접 암호화한다면 답은 `true`이고, Apple은 문서를 요구해요.

> 습관적으로 `false`를 넣지 마세요. 의존성을 다시 확인하세요. 종단 간 암호화 라이브러리나 직접 만든 암호화 저장소가 있으면 문서 제출 대상이 돼요.

## 앱이 면제되지 않는 암호화를 쓴다면

[암호화 문서 페이지](https://developer.apple.com/help/app-store-connect/manage-app-information/determine-and-upload-app-encryption-documentation/)가 절차를 설명해요. App Information에서 App Encryption Documentation 옆의 추가 버튼을 누르면 질문이 열리고, Choose File로 문서를 올린 뒤 Save를 누르세요. Apple은 문서가 충분한지 판단할 수 있도록 미리 앱 설명을 채우고 출시 국가 설정을 마쳐 두라고 해요. 서류가 완전하면 약 2영업일을 목표로 처리해요.

문서가 승인되면 Apple이 Info.plist의 `ITSEncryptionExportComplianceCode` 키에 넣을 값을 줘요. 이 값이 있으면 업로드할 때마다 질문받지 않아요. 심사 중에는 빌드에 Waiting for Export Compliance Review 또는 In Compliance Review가 표시돼요. 이때는 여러분이 할 일이 없어요.

Apple이 짚는 두 가지가 있어요. 하나는 수출 규정 페이지에, 다른 하나는 규정 준수 개요에 있어요.

- **면제된 암호화를 쓰더라도 미국 정부에 연간 자체 분류 보고서를 내야 할 수 있어요.** 면제되지 않는 암호화를 쓰고 Apple에 문서를 제출했다면 필요 없어요.
- **프랑스도 암호화 앱의 수입과 수출을 통제해요.** Apple의 개요는 보안 저장, 보안 통신, 백신 소프트웨어를 해당 분야로 들고, 은행 앱과 의료 앱은 면제된다고 하며, ANSSI로 안내해요.

## 그다음 TestFlight에서 일어나는 일

풀린 빌드는 일반 TestFlight 빌드와 같은 흐름을 따라가요. [TestFlight로 iPhone 앱 테스트하기](https://devoria.fr/ko/blog/testflight-iphone-app-beta-testing) 가이드에 설명해 뒀어요. 빌드 상태 목록에 따르면 내부 테스터는 바로, 외부 테스터는 베타 심사 후에 받을 수 있고, 빌드는 90일 뒤 만료돼요. 이미 사용된 빌드 번호나 거부된 파일처럼 Expo 업로드가 멈추는 다른 경우는 [EAS에서 App Store Connect로 보낼 때의 오류](https://devoria.fr/ko/blog/eas-submit-ios-errors-fix)에 있고, 전체 과정은 [EAS로 Expo 앱을 App Store에 출시하기](https://devoria.fr/ko/blog/eas-submit-ios-publish-expo-app-store)에 있어요.

[iOS & Android Kit](https://devoria.fr/ko/kits/ios)에는 이 키가 이미 들어간 제 Expo Starter Code와, 첫 빌드부터 App Store 페이지까지 가는 과정이 담겨 있어요. 출시를 아직 막고 있는 게 뭔지 알고 싶다면 [무료 진단](https://devoria.fr/ko/diagnostic)이 몇 가지 질문으로 알려 주고, 제 Apple 리젝 방지 체크리스트도 보내 드려요. 전체 단계는 [App Store에 앱 출시하기](https://devoria.fr/ko/expertise/publish-app-on-app-store)에 있어요.

## 자주 묻는 질문

### TestFlight의 Missing Compliance는 무슨 뜻인가요?

빌드가 수출 규정 준수 신고, 즉 암호화 사용에 대한 답변을 기다린다는 뜻이에요. Apple은 이 상태를 여러분의 조치가 필요한 상태로 분류해요. 답하기 전까지 빌드는 테스터에게 가지 않아요.

### Missing Compliance의 Manage 링크가 왜 클릭되지 않나요?

역할을 확인하세요. Apple은 답변 권한을 Account Holder, Admin, App Manager 역할에만 줘요. Apple이 문서화한 다른 원인은 없어요. 빌드가 방금 도착했다면 처리 완료 이메일을 받은 뒤 페이지를 새로고침하세요.

### 앱이 HTTPS만 쓰는데 암호화에 '예'라고 답해야 하나요?

Apple은 URLSession을 통한 HTTPS 연결 같은 시스템 내장 암호화는 보통 문서 제출 의무가 면제된다고 해요. 이 경우 ITSAppUsesNonExemptEncryption 키는 NO예요. 단, 서드파티 라이브러리가 독자적인 암호화를 추가하지 않아야 해요.

### 빌드마다 암호화 질문에 답해야 하나요?

네, Info.plist에 ITSAppUsesNonExemptEncryption 키가 없는 한 그래요. 이 키가 있으면 App Store Connect가 더 이상 묻지 않아요. Expo에서는 app.json의 `ios.config.usesNonExemptEncryption`으로 설정해요.

### Expo에서 app.json의 어디에 암호화를 선언하나요?

app.json의 `expo.ios.config` 아래에, 앱이 면제되지 않는 암호화를 쓰지 않는다면 `"usesNonExemptEncryption": false`를 넣으세요. EAS Build가 이 키를 빌드의 Info.plist에 써 넣어요. 이미 보낸 빌드가 아니라 다음 빌드부터 적용돼요.

### Missing Compliance는 App Store 제출도 막나요?

수출 규정 준수 질문은 베타든 App Store든 모든 새 버전에 나와요. 답하지 않은 빌드는 배포할 수 없어요. Info.plist의 키 하나로 두 경우를 한 번에 해결해요.

### 연간 자체 분류 보고서를 내야 하나요?

Apple은 면제된 암호화를 쓰더라도 미국 정부에 연간 자체 분류 보고서를 내야 할 수 있다고 알리고, 공식 절차로 안내해요. 앱이 면제되지 않는 암호화를 쓰고 Apple에 문서를 제출했다면 이 보고서는 필요 없어요.


## 내 프로젝트

[Review Kit](https://devoria.fr/ko/kits/app-review): 제 App Store 심사 체크리스트, 수정해서 통과한 Apple 리젝 사례, Google Play 체크리스트, Claude Code 스킬 3개를 담았어요. ₩73,000.

[iOS & Android Kit](https://devoria.fr/ko/kits/ios): Claude Code로 iPhone·Android 앱을 만들어 보세요. 제 앱들의 시작 코드, 스토어 출시까지의 과정, 모든 키트를 담았어요. ₩148,000.

[진단: 내 아이폰 앱까지 남은 거리](https://devoria.fr/ko/diagnostic): 7개 질문, 60초. 아이폰 앱 출시를 진짜 가로막는 게 뭔지, 4단계 로드맵, 나에게 맞는 키트까지 알려드려요.
