# ITMS-90717 Invalid large app icon 해결법 (Expo)

> ITMS-90717은 빌드의 1024 x 1024 아이콘에 투명도나 알파 채널이 남아 있다는 뜻이에요. 불투명하게 내보내고 sips로 확인한 뒤 다시 빌드하세요.

원본 페이지: [ITMS-90717 Invalid large app icon 해결법 (Expo)](https://devoria.fr/ko/blog/itms-90717-invalid-large-app-icon-expo)
작성자: [Mehdi Azizi](https://devoria.fr/ko/mehdi-azizi)
게시일: 2026-11-04
최종 내용 수정: 2026-11-04


ITMS-90717은 Apple이 빌드를 자동으로 검사해서 내는 오류예요. 앱의 큰 아이콘, 즉 App Store에 표시되는 1024 x 1024 픽셀 아이콘에 투명도나 알파 채널이 들어 있다는 뜻이에요. **해결 방법: 정사각형의 불투명한 아이콘을 알파 채널 없이 내보내고, 새로 빌드하세요.**

Expo를 쓴다면 PNG 파일 자체가 원인인 경우는 드물어요. prebuild가 이미 아이콘을 흰 배경 위에 올려 주거든요. 저는 SDK 57에서 이 코드를 직접 읽어 봤고, Solys, TradaZen, Nolera의 아이콘도 확인했어요. 그래서 이 오류는 대부분 버전 관리되는 `ios` 폴더나 Icon Composer 파일에서 나와요. 어느 쪽이 원인인지 찾고 고치는 방법을 알려 드릴게요.

## ITMS-90717 오류는 무슨 뜻인가요?

메시지 제목은 "ITMS-90717: Invalid large app icon"이에요. 앱 이미지 카탈로그의 큰 아이콘이 "can't be transparent or contain an alpha channel"라고 설명해요. 투명해서도 안 되고, 알파 채널을 포함해서도 안 된다는 뜻이에요. 예전 메시지는 "Invalid App Store Icon"이라고 했어요. 규칙은 같아요.

이 큰 아이콘이 바로 App Store용 아이콘이에요. [Xcode의 아이콘 문서](https://developer.apple.com/documentation/xcode/configuring-your-app-icon)에 나와 있듯이, App Store에 배포하는 앱은 이미지 카탈로그에 1024포인트 아이콘을 넣어야 해요.

알파 채널은 PNG에서 빨강, 초록, 파랑 옆에 있는 네 번째 레이어예요. 각 픽셀의 투명도를 저장하죠. **아이콘이 꽉 차 보여도 이 채널은 남아 있을 수 있어요.** 포럼 스레드마다 등장하는 함정이 바로 이거예요.

다른 ITMS 오류처럼 이것도 리뷰어의 거절이 아니에요. Apple이 바이너리를 전달받을 때 분석한 결과예요. 업로드 도구에 따라 409 코드 같은 검증 실패로 표시돼요.

## sips로 아이콘 확인하기

Mac에는 `sips`가 기본으로 설치되어 있어요. 한 줄이면 돼요.

```bash
sips -g hasAlpha assets/icon.png
```

`hasAlpha: no`가 나와야 해요. 2026년 10월 15일에 Solys, TradaZen, Nolera의 app.json에 선언된 아이콘으로 이 명령을 돌려 봤어요. 모두 `no`였고, 크기는 1024 x 1024였어요.

테스트용 아이콘도 하나 만들어 봤어요. 완전히 불투명한 파란 정사각형인데, 알파 채널을 포함해서 저장했어요. `sips`는 `yes`라고 답해요. **투명한 픽셀은 하나도 없는데, 채널은 남아 있는 거예요.** 그래서 이 메시지 아래에 "내 아이콘엔 투명한 부분이 전혀 없는데요"라고 쓰는 개발자가 그렇게 많아요.

미리보기 앱에서도 속성 보기(Tools, Show Inspector)를 열면 알파 채널을 포함한 이미지 속성이 나와요.

## 해결: 알파 채널 없이 아이콘 내보내기

가장 쉬운 방법부터 가장 정밀한 방법까지 세 가지예요.

**1. 미리보기.** File, Export에서 PNG 형식을 고르고 Alpha 체크박스를 해제하세요. 내보낸 파일에는 알파 채널이 없어요.

**2. 아무것도 설치하지 않고 sips 쓰기.** `sips`는 PNG에서 알파 채널을 제거하지 못해요. 그래서 알파 채널이 없는 JPEG를 한 번 거쳐야 해요.

```bash
sips -s format jpeg -s formatOptions 100 icon.png --out icon.jpg
sips -s format png icon.jpg --out icon-opaque.png
sips -g hasAlpha icon-opaque.png
```

모서리가 투명한 테스트 아이콘으로 해 보니 모서리가 흰색이 됐고, 마지막 줄은 `no`라고 답했어요. JPEG를 거치면 최고 품질로 해도 이미지가 조금 압축돼요. 결과를 자세히 확인하세요.

**3. ImageMagick.** 설치되어 있다면 배경색을 직접 고를 수 있어요.

```bash
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
```

[ImageMagick 문서](https://imagemagick.org/command-line-options/#alpha)에 따르면 `-alpha remove`는 이미지를 배경색 위에 올리고, `-alpha off`는 채널을 끄는 옵션이에요.

세 방법 모두 투명한 부분을 단색으로 채워요. 로고가 투명 배경 위에 떠 있었다면, 원본 파일을 다시 열어 제대로 된 배경을 그리는 게 가장 깔끔해요. Expo도 [앱 아이콘 가이드](https://docs.expo.dev/develop/user-interface/splash-screen-and-app-icon/)에서 이렇게 요구해요. 아이콘은 정사각형 전체를 채워야 하고, 둥근 모서리나 투명한 픽셀이 없어야 해요. 마스크는 iOS가 알아서 적용해요.

## Expo가 아이콘을 어디서 가져와서 어떻게 처리하나요

Expo는 먼저 `ios.icon`을 읽고, 그다음 설정 루트의 `icon` 필드를 읽어요. [Expo 설정 레퍼런스](https://docs.expo.dev/versions/latest/config/app/)에 따르면 `ios.icon`은 세 가지 형태를 받아요. PNG, `light`, `dark`, `tinted` 변형을 담은 객체, 또는 Icon Composer로 만든 `.icon` 폴더예요.

아래 표는 prebuild 시 iOS 아이콘을 생성하는 코드인 `@expo/prebuild-config` 57.0.16(SDK 57)을 2026년 10월 15일에 읽고 정리한 거예요.

| 선언한 내용               | prebuild 처리 방식    | ITMS-90717 위험 |
| ------------------------- | --------------------- | --------------- |
| PNG로 된 `icon`           | 흰 배경 위로 평탄화   | 낮음            |
| `ios.icon.light`          | 흰 배경 위로 평탄화   | 낮음            |
| `ios.icon.tinted`         | 흰 배경 위로 평탄화   | 낮음            |
| `ios.icon.dark`           | 투명도 유지           | Apple의 의도    |
| `.icon`으로 된 `ios.icon` | 그대로 복사           | 실제로 있음     |
| 버전 관리되는 `ios` 폴더  | prebuild 재실행 안 됨 | 실제로 있음     |

**PNG라면 Expo가 직접 투명도를 없애고 흰색으로 채워요.** 그래서 배경을 따낸 로고는 흰 정사각형 위에 놓이게 돼요. 오류는 안 나지만, 원하지 않았던 모습일 수도 있어요. 다크 변형은 투명도를 유지하는데, 이건 의도된 거예요. Apple은 시스템이 제공하는 배경이 보이도록 다크 아이콘에 투명 배경을 요구해요.

세 변형을 모두 선언한 Nolera에서는 생성된 라이트 아이콘과 틴티드 아이콘에 `sips`가 `no`, 다크 아이콘에 `yes`라고 답해요. 이 변형들의 커밋 날짜로 보면 현재 출시된 1.0.2 버전에 포함되어 있어요. IPA에서 직접 확인하지는 않았어요.

### 버전 관리되는 ios 폴더의 경우

Expo에서 가장 유력한 원인이에요. [Expo의 Continuous Native Generation 페이지](https://docs.expo.dev/workflow/continuous-native-generation/)에 나와 있듯이, 프로젝트에 `android`와 `ios` 폴더가 있으면 EAS Build는 prebuild를 실행하지 않아요. **그러면 app.json은 더 이상 아이콘에 영향을 주지 않아요.** Apple로 가는 건 `ios` 폴더 안의 PNG예요.

프로젝트 루트에서 확인해 보세요.

```bash
sips -g hasAlpha ios/*/Images.xcassets/AppIcon.appiconset/*.png
```

1024 아이콘에 `yes`가 나오면 그 파일을 같은 이름의 불투명 버전으로 교체하세요. 네이티브 코드를 직접 수정한 적이 없다면 `ios` 폴더를 삭제하고 `.gitignore`에 추가해도 돼요. 그러면 EAS가 빌드할 때마다 다시 생성해요. Solys, TradaZen, Nolera에서는 이 폴더를 git이 무시하도록 해 뒀어요.

## iOS 26 형식: Icon Composer

Icon Composer는 iOS 26의 Liquid Glass 아이콘을 만드는 Apple 도구예요. 여러 레이어로 된 `.icon` 파일 하나를 만들어요. [Apple의 Icon Composer 가이드](https://developer.apple.com/documentation/xcode/creating-your-app-icon-using-icon-composer)에 따르면 Xcode는 이 파일로 이전 iOS 버전용 이미지도 만들어요.

Expo는 SDK 54부터 이 형식을 지원해요. 폴더 경로는 변형 객체가 아니라 문자열로 선언해야 해요.

```json
{
  "expo": {
    "ios": {
      "icon": "./assets/app.icon"
    }
  }
}
```

이 경우 prebuild는 폴더를 손대지 않고 그대로 복사하고, 최종 아이콘은 Xcode가 만들어요. 그래서 최신 EAS 이미지에 들어 있는 Xcode 26 이상이 필요해요. 자세한 내용은 [ITMS-90725](https://devoria.fr/ko/blog/itms-90725-sdk-version-issue-expo) 가이드에서 설명했어요.

2025년 8월부터 Apple 개발자 포럼에는 `.icon` 파일로 ITMS-90717이 났다는 스레드가 올라오고 있어요. 거론된 원인은 투명한 PNG 레이어, 캔버스보다 큰 레이어, 가장자리 근처에 Blur 효과를 쓴 그룹이에요. 언급된 우회 방법은 Blur 끄기, 꽉 찬 배경 유지하기, PNG로 돌아가기예요. 이 스레드들에 Apple의 공식 해결책은 없고, 2026년 8월에도 여전히 오류가 보고됐어요.

[Apple의 아이콘 가이드라인](https://developer.apple.com/design/human-interface-guidelines/app-icons)도 같은 방향이에요. 배경 레이어를 가져온다면 전체 영역을 덮고 불투명해야 해요. 제 앱들은 아직 PNG를 쓰고 있어서 Icon Composer를 실제 배포에서 테스트해 보진 않았어요. **`.icon` 파일 때문에 업로드가 막힌다면 `ios.icon`을 다시 PNG로 바꾸세요.** Expo가 평탄화해 주니까 아이콘이 이 검사를 통과할 거예요.

## 최종 빌드에서 아이콘 확인하기

IPA 안에서 1024 아이콘은 PNG 파일이 아니에요. Xcode가 `Assets.car`에 컴파일해 넣어요. expo.dev의 빌드 페이지에서 IPA를 내려받고 다음을 실행하세요.

```bash
unzip -q MyApp.ipa -d ipa
xcrun assetutil --info ipa/Payload/*.app/Assets.car | grep -B3 '"RenditionName" : "App-Icon'
```

아이콘마다 `Opaque` 필드가 표시돼요. 2026년 10월 15일에 Xcode 도구인 `actool`로 Solys 아이콘과 모서리가 투명한 테스트 아이콘을 컴파일해 봤어요. 앞의 것은 `"Opaque" : true`, 뒤의 것은 `"Opaque" : false`로 나왔어요. Apple은 이 필드를 문서화하지 않았어요. Apple의 검사 그 자체가 아니라 참고 단서로만 보세요.

알아 둘 함정이 하나 있어요. **앱 루트에 있는 작은 PNG들을 `sips`로 검사하지 마세요.** Xcode는 원본이 불투명해도 이 파일들을 알파 채널과 함께 저장해요. Solys 아이콘으로 테스트했을 때도 `sips`가 이 파일들에 `yes`라고 답했어요.

## 다른 아이콘 오류들

| 코드       | Apple이 알리는 내용  | Expo에서 확인할 점 |
| ---------- | -------------------- | ------------------ |
| ITMS-90717 | 1024 아이콘이 투명함 | 알파 없이 내보내기 |
| ITMS-90704 | 1024 아이콘 없음     | 1024 항목 누락     |
| ITMS-90022 | iPhone 아이콘 없음   | 카탈로그 불완전    |
| ITMS-90023 | iPad 아이콘 없음     | 카탈로그 불완전    |

마지막 세 메시지는 주로 Xcode 9에서 아이콘 규칙이 바뀐 2017년과 2018년에 많이 나왔어요.

Expo에서는 이제 드물어요. prebuild가 1024 범용 아이콘 하나만 쓰고, 나머지 크기는 Xcode가 생성하거든요. 아이콘을 선언하지 않으면 업로드 실패를 막으려고 Expo가 흰 정사각형까지 만들어 줘요. **이 중 하나가 뜨면 버전 관리되는 `ios` 폴더를 확인하세요.** `AppIcon.appiconset`의 `Contents.json` 파일에 `1024x1024` 크기 항목이 있어야 하고, 그 항목이 가리키는 PNG가 실제로 있어야 해요.

## 다음 업로드 전에

아이콘은 10분이면 고치지만, 오류가 날 때마다 빌드 하나가 날아가요. 다른 자동 검사도 똑같이 꼼꼼하게 챙겨야 해요. 권한 문구는 [ITMS-90683](https://devoria.fr/ko/blog/itms-90683-missing-purpose-string-expo), 개인정보 매니페스트는 [ITMS-91053](https://devoria.fr/ko/blog/itms-91053-missing-api-declaration-expo)을 참고하세요. 빌드가 통과되면 [TestFlight](https://devoria.fr/ko/blog/testflight-iphone-app-beta-testing)로 설치해서 홈 화면에서 아이콘을 확인해 보세요.

리뷰어의 거절은 좀 더 차분하게 대응해야 해요. 대응 방법은 [Apple 앱 거절](https://devoria.fr/ko/expertise/app-rejected-by-apple) 페이지에, 가장 흔한 거절 사유는 [Apple이 앱을 거절하는 이유](https://devoria.fr/ko/blog/app-store-rejection-reasons-real-cases)에 정리해 뒀어요.

업로드 전에 프로젝트를 점검하고 싶다면 [Review Kit](https://devoria.fr/ko/kits/app-review)에 제 체크리스트와 프로젝트를 검토해 주는 Claude Code 스킬을 담아 뒀어요. 업로드가 막혀서 사람의 눈이 필요하다면 [저와 한 시간 예약하세요](https://devoria.fr/ko/coaching). 화상으로 여러분 화면을 보면서 프로젝트를 같이 살펴봐요. 그리고 첫 출시를 준비 중이라면 [무료 진단을 받아 보세요](https://devoria.fr/ko/diagnostic). 단계를 순서대로 정리해 주고, Apple 거절 방지 체크리스트도 보내 드려요.

## 자주 묻는 질문

### 아이콘에 투명한 부분이 없는데 왜 Apple은 알파 채널이 있다고 하나요?

PNG는 모든 픽셀이 불투명해도 알파 채널을 가질 수 있기 때문이에요. 많은 도구가 내보낼 때 기본으로 이 채널을 추가해요. `sips -g hasAlpha`로 확인한 다음, 채널 없이 아이콘을 다시 내보내세요.

### 원격 업데이트로 ITMS-90717을 고칠 수 있나요?

아니요. 아이콘은 바이너리 안의 `Assets.car`에 컴파일돼요. 원격 업데이트는 앱의 JavaScript와 리소스만 바꿔요. 아이콘을 고치고, 다시 빌드한 다음, 다시 제출하세요.

### 다크 아이콘은 투명해도 되나요?

네. Apple은 다크 변형에 투명 배경을 요구하고, Expo도 투명도를 유지해요. 그래서 저는 이 검사가 메인 아이콘, 즉 App Store 아이콘을 대상으로 한다고 판단해요. 불투명해야 하는 건 그 아이콘이에요.

### iOS 아이콘 모서리를 둥글게 해야 하나요?

아니요. 꽉 찬 정사각형을 제공하세요. 마스크는 iOS가 알아서 적용해요. 모서리를 둥글게 하면 귀퉁이에 투명한 픽셀이 남는데, 이게 바로 이 검사가 거부하는 거예요.

### Expo는 iOS 26의 Icon Composer 아이콘을 지원하나요?

네, SDK 54부터 지원해요. `ios.icon`에 `.icon` 폴더 경로를 문자열로 선언하세요. prebuild가 그대로 복사하고 Xcode 26이 컴파일해요. 이 형식에서 ITMS-90717이 나면 투명한 레이어와 Blur 효과를 확인하거나, 임시로 PNG로 돌아가세요.


## 내 프로젝트

[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단계 로드맵, 나에게 맞는 키트까지 알려드려요.
