ITMS-90725 SDK version issue 해결 방법 (Expo)
글: Mehdi Azizi
게시, 7분
ITMS-90725는 앱이 오래된 iOS SDK로 빌드됐다는 뜻이에요. 2026년 4월 28일부터 Xcode 26이 필수라서 Expo SDK 54 이상으로 올리고 다시 빌드해야 해요.
ITMS-90725는 Apple이 빌드에 대해 자동으로 수행하는 검사예요. 앱이 요구되는 최소 버전보다 오래된 iOS SDK로 컴파일됐다는 뜻이죠. 2026년 10월 15일 기준으로 Apple은 2026년 4월 28일부터 App Store Connect에 업로드하는 앱은 Xcode 26 이상과 iOS 26 SDK로 컴파일해야 한다고 안내하고 있어요. Expo에서는 모든 게 EAS 빌드 이미지에 달려 있어요. Expo SDK 54부터는 기본으로 선택되는 이미지에 Xcode 26이 들어 있어요.
제 앱인 Solys, TradaZen, Nolera는 Expo SDK 57을 쓰고 있고, eas.json에서 이미지를 강제로 지정하지 않았어요. Xcode 버전은 EAS가 알아서 골라요. 여기서는 여러분의 프로젝트를 확인하는 방법과, 프로젝트가 더 오래된 경우 어떻게 해야 하는지 알려드릴게요.
ITMS-90725 오류는 무슨 뜻인가요?
메시지 제목은 "ITMS-90725: SDK version issue"예요. 앱을 컴파일한 SDK, 요구되는 최소 버전, 그리고 그 SDK가 들어 있는 Xcode 버전을 알려줘요. 예를 들어 Apple 개발자 포럼에 올라온 2024년 메시지는 "This app was built with the iOS 16.2 SDK"로 시작했고, 그 뒤에 당시의 요구 사항이 이어졌어요.
SDK는 Xcode가 앱을 컴파일할 때 쓰는 iOS 라이브러리 묶음이에요. Xcode 버전마다 자기 SDK가 들어 있어요. Xcode 26에는 iOS 26 SDK가 들어 있죠. 최신 SDK로 컴파일한다고 해서 구형 iPhone을 포기해야 하는 건 아니에요. 앱이 지원하는 최소 iOS 버전은 배포 대상(deployment target)이라는 별도의 설정이에요.
다른 ITMS 오류처럼 이것도 리뷰어가 거절한 게 아니에요. 업로드한 바이너리를 대상으로 하는 자동 검사예요.
지금 Apple이 요구하는 Xcode 버전은 무엇인가요?
2026년 10월 15일에 확인한 Apple의 향후 요구 사항 페이지와 App Store 제출 페이지의 내용은 다음과 같아요.
| 날짜 | 요구 사항 |
|---|---|
| 2026년 4월 28일 | Xcode 26, iOS 26 SDK |
| 2026년 9월 9일 | 최소 대상 iOS 13 |
| 2027년 4월 | iOS 27 SDK, 최소 대상 iOS 15 |
ITMS-90725를 일으키는 건 첫 번째 규칙이에요. Xcode 16과 iOS 18 SDK로 만든 빌드는 더 이상 받아주지 않아요. 두 번째는 SDK가 아니라 최소 대상 버전에 관한 규칙이에요. 세 번째는 2027년 4월로 예고돼 있는데, 확인 시점에는 페이지에 정확한 날짜가 없었어요. Apple은 이미 Xcode 27로 컴파일하고 테스트해 보라고 권하고 있어요.
이 요구 사항은 주기적으로, 그리고 항상 봄에 올라가요. 같은 Apple 페이지에 여러 마감일이 기록돼 있어요. 2023년 4월 25일 Xcode 14.1, 2024년 4월 29일 Xcode 15, 2026년 4월 28일 Xcode 26이에요. 매년 봄이 오기 전에 블로그 글(이 글 포함)을 믿기보다 이 페이지를 직접 다시 읽어 보세요.
경고인지 차단인지 어떻게 구분하나요?
마감일 전에는 ITMS-90725가 경고로 와요. 2024년 Apple 포럼에 올라온 사례를 보면, 이메일에 업로드는 성공했다고 적혀 있었고 다음 업로드 때 수정하라고 권했어요. 마감일 이후에는 Apple이 업로드하려면 요구되는 SDK로 컴파일"해야 한다"고 써요. 빌드가 더 이상 받아들여지지 않아요.
| 단서 | 경고 | 차단 |
|---|---|---|
| 업로드 날짜 | 마감일 전 | 마감일 후 |
| 업로드 수락 | 예 | 아니요 |
| 해야 할 일 | 다음 업로드 때 수정 | 새로 빌드 |
ITMS-90725 경고는 카운트다운이에요. 오늘은 빌드가 통과해도, 같은 방식으로 컴파일한 다음 빌드는 마감일 이후 거절돼요. 급한 업데이트에 쫓기기 전에 미리 고쳐 두세요.
Expo 프로젝트에서 ITMS-90725 해결하기
EAS를 쓰면 앱은 Expo의 Mac에서 컴파일돼요. 자세한 건 Mac 없이 iOS 앱 출시하기에서 설명했어요. Xcode 버전은 빌드 이미지에 따라 달라져요. eas.json에 image를 지정하지 않으면 EAS는 auto 별칭을 사용해서 Expo SDK 버전에 맞는 이미지를 골라요.
2026년 10월 8일에 업데이트된 EAS 인프라 문서에 따른 SDK별 이미지는 다음과 같아요.
| Expo SDK | 이미지의 Xcode | ITMS-90725 |
|---|---|---|
| 57 | 26.6 | 아니요 |
| 56 | 26.4 | 아니요 |
| 55 | 26.2 | 아니요 |
| 54 | 26.0 | 아니요 |
| 53 | 16.4 | 예 |
| 52 | 16.2 | 예 |
- 마지막 빌드에 쓰인 이미지를 확인하세요. expo.dev의 빌드 페이지에서 로그의 "Spin up build environment" 섹션을 보면 이미지 이름과 Xcode 버전이 나와요.
- SDK 54 이상이라면 강제로 지정된 이미지가 있는지 찾아보세요.
macos-sequoia-15.6-xcode-16.4처럼 Xcode 16을 가리키는image줄 하나만 있어도 오류가 나요. Expo 문서는 이 이미지를 Xcode 26을 원하지 않는 사람을 위한 SDK 54용 이미지로 소개하지만, 2026년 4월 28일 이후로는 이 선택이 거절로 이어져요. 그 줄을 지우면 EAS가 기본 이미지로 돌아가요. - SDK 53 이하라면 SDK를 올리세요. Expo가 2026년 4월 27일 공지에서 권한 방법이에요. 최소한 SDK 54로 올리라는 거죠.
- 다시 빌드해서 업로드하세요. SDK는 바이너리에 고정돼 있어서 원격 업데이트로는 아무것도 바뀌지 않아요.
오래된 SDK를 위한 임시 방편
같은 Expo 공지에는 당장 SDK를 올릴 수 없는 경우를 위한 옵션도 있어요. production 프로필에서 eas.json에 Xcode 26 이미지를 강제로 지정하는 거예요.
{
"build": {
"production": {
"ios": {
"image": "macos-sequoia-15.6-xcode-26.2"
}
}
}
}
Expo는 모든 SDK 버전이 Xcode 26과 호환되지는 않고, 결과는 사용하는 라이브러리에 따라서도 달라진다고 경고해요. 이건 해결책이 아니라 유예라고 생각하세요. 컴파일 단계에서 빌드가 실패하면 남은 방법은 SDK를 올리는 것뿐이에요.
SDK는 한 번에 한 버전씩 올리기
Expo 업그레이드 가이드는 단계마다 무엇이 깨지는지 파악할 수 있도록 한 번에 한 버전씩 올리라고 권해요. SDK 53에서 SDK 54로 올리려면 이렇게 해요.
npm install expo@^54.0.0
npx expo install --fix
npx expo-doctor
ios 폴더를 Expo가 생성했다면 삭제하세요. 다음 빌드 때 다시 만들어져요. 그다음 버전으로 넘어가기 전에 iPhone에서 앱을 테스트하세요.
최신 SDK를 목표로 하기 전에 알아 둘 점이 있어요. Expo 버전 표에 따르면 SDK 54와 55는 iOS 15.1 이상을, SDK 56과 57은 iOS 16.4 이상만 지원해요. 그러니 SDK 56으로 올리면 iOS 15에 머물러 있는 iPhone은 제외돼요. ITMS-90725를 해결하는 데는 SDK 54로 충분해요.
업로드 전에 빌드의 SDK 확인하기
Xcode는 빌드할 때마다 사용한 SDK와 Xcode 버전을 Info.plist에 기록해요. expo.dev의 빌드 페이지에서 IPA를 내려받은 뒤 Mac에서 실행해 보세요.
unzip -q MyApp.ipa -d ipa
plutil -extract DTSDKName raw ipa/Payload/*.app/Info.plist
plutil -extract DTXcode raw ipa/Payload/*.app/Info.plist
App Store용 빌드라면 첫 번째 값이 iphoneos26으로 시작해야 해요. 두 번째 값은 Xcode 버전을 나타내요. Xcode 26.2로 만든 Nolera 시뮬레이터 빌드에서는 2620이 나왔어요. iphoneos18이나 16으로 시작하는 값이 보이면 그 빌드는 거절돼요.
자기 Mac에서 컴파일한다면 EAS 이미지가 아니라 내 Xcode가 기준이에요. xcodebuild -version으로 현재 활성화된 버전을 볼 수 있어요. CI도 마찬가지로, Xcode 버전은 선택한 머신에 따라 달라져요. 2024년 Apple 포럼에서는 GitHub Actions 머신이 Xcode 15를 돌리기엔 너무 오래된 macOS를 쓰고 있어서 ITMS-90725를 받은 개발자들이 있었어요.
올바른 빌드를 업로드했다면 제출하기 전에 TestFlight에서 테스트하세요. 새 빌드도 다시 심사를 거치고, 걸리는 시간은 App Store 심사 기간에 정리해 뒀어요.
깜짝 놀랄 일 없이 빌드 업로드하기
ITMS-90725는 1분이면 예방할 수 있어요. production 빌드 전마다 이미지와 SDK를 확인하세요. 다른 자동 검사도 똑같이 꼼꼼해야 해요. 권한 설명 문구에 관한 ITMS-90683이 그런 예예요. 리뷰어의 거절은 좀 더 차분히 대응해야 해요. 방법은 Apple에 거절된 앱 페이지에, 가장 흔한 거절 사유는 Apple이 앱을 거절하는 이유에 정리해 뒀어요.
업로드 전에 프로젝트를 점검하고 싶다면 Review Kit에 제 체크리스트와 프로젝트를 검토해 주는 Claude Code 스킬을 담아 뒀어요. 업로드가 막혀서 사람의 눈이 필요하다면 저와 1시간 예약하세요. 화상으로 여러분 화면을 보면서 프로젝트를 함께 살펴봐요. 첫 출시를 준비 중이라면 무료 진단을 받아 보세요. 단계를 순서대로 정리해 주고, Apple 거절 방지 체크리스트도 보내 드려요.
자주 묻는 질문
ITMS-90725가 있으면 앱을 출시할 수 없나요?
Apple이 정한 마감일 이후라면 맞아요. 빌드가 받아들여지지 않으니 새로 컴파일해야 해요. 마감일 전에는 경고예요. 빌드는 통과하지만, 같은 방식으로 컴파일한 다음 빌드는 거절돼요.
iOS 26 SDK로 컴파일하려면 구형 iPhone을 포기해야 하나요?
아니요. 컴파일 SDK와 최소 iOS 버전은 별개의 설정이에요. Expo에서는 Expo SDK 버전이 이 최소 버전을 정해요. SDK 54와 55는 iOS 15.1, SDK 56과 57은 iOS 16.4예요.
원격 업데이트로 ITMS-90725를 해결할 수 있나요?
아니요. SDK는 컴파일할 때 바이너리에 새겨져요. 원격 업데이트는 JavaScript와 리소스만 바꿔요. Xcode 26으로 다시 빌드해서 업로드해야 해요.
EAS가 어떤 Xcode 버전을 쓰는지 어떻게 알 수 있나요?
expo.dev에서 빌드 로그의 "Spin up build environment" 섹션을 열어 보세요. 이미지 이름에 Xcode 버전이 나와 있어요. 예를 들면 macos-tahoe-26.5-xcode-26.6이에요. 전체 목록은 EAS 인프라 문서에 있어요.
2027년 4월 요구 사항으로 무엇이 바뀌나요?
Apple 제출 페이지에 따르면 iOS 27 SDK로 컴파일하고 최소 iOS 15를 대상으로 해야 해요. EAS 쪽에서는 Expo가 향후 SDK 58용으로 Xcode 27 이미지를 준비하고 있으니, 컴파일 전에 빌드 이미지 목록을 확인하세요. 정확한 날짜는 봄에 Apple 페이지를 다시 확인하세요.

