ITMS-90725: jak naprawić „SDK version issue” w Expo
Autor: Mehdi Azizi
Opublikowano , 7 min
ITMS-90725: aplikacja zbudowana ze starym SDK iOS. Od 28 kwietnia 2026 Apple wymaga Xcode 26: przejdź na Expo SDK 54+ i zrób nowy build.
ITMS-90725 to automatyczna kontrola Apple sprawdzająca twój build: oznacza, że aplikacja została skompilowana ze starszym SDK iOS niż wymagane minimum. Według stanu na 15 października 2026 Apple podaje, że od 28 kwietnia 2026 aplikacje wysyłane do App Store Connect muszą być kompilowane w Xcode 26 lub nowszym i z SDK iOS 26. W Expo wszystko rozgrywa się w obrazie buildu EAS: od Expo SDK 54 domyślnie wybierany obraz zawiera Xcode 26.
Moje aplikacje, Solys, TradaZen i Nolera, są na Expo SDK 57, bez wymuszonego obrazu w eas.json: EAS sam wybiera wersję Xcode. Oto jak sprawdzić swoją i co zrobić, jeśli twój projekt jest starszy.
Co oznacza błąd ITMS-90725?
Komunikat nosi tytuł „ITMS-90725: SDK version issue”. Podaje SDK, z którym skompilowano twoją aplikację, a potem wymagane minimum i wersję Xcode, która je zawiera. Na forum deweloperów Apple wiadomość z 2024 roku zaczynała się na przykład tak: „This app was built with the iOS 16.2 SDK”, a dalej szło ówczesne wymaganie.
SDK to zestaw bibliotek iOS, z którymi Xcode kompiluje twoją aplikację. Każda wersja Xcode ma własne: Xcode 26 zawiera SDK iOS 26. Kompilacja z nowym SDK nie oznacza porzucenia starszych iPhone'ów. Minimalna wersja iOS, którą akceptuje twoja aplikacja, to osobne ustawienie: deployment target.
Jak inne błędy ITMS, to nie jest odrzucenie przez reviewera. Kontrola jest automatyczna i dotyczy wysłanego pliku binarnego.
Jakiej wersji Xcode Apple wymaga dziś?
Oto co mówią strona nadchodzących wymagań Apple i strona o wysyłaniu do App Store, sprawdzone 15 października 2026:
| Data | Wymaganie |
|---|---|
| 28 kwietnia 2026 | Xcode 26, SDK iOS 26 |
| 9 września 2026 | Minimalny target iOS 13 |
| Kwiecień 2027 | SDK iOS 27, target iOS 15 |
ITMS-90725 wywołuje pierwsza reguła. Build zrobiony w Xcode 16 z SDK iOS 18 nie jest już akceptowany. Druga dotyczy minimalnej docelowej wersji, nie SDK. Trzecia jest zapowiedziana na kwiecień 2027, bez konkretnego dnia na stronie w momencie sprawdzania. Apple już zachęca do kompilowania i testowania w Xcode 27.
To wymaganie regularnie rośnie, i zawsze wiosną. Ta sama strona Apple zachowuje ślad kilku terminów: Xcode 14.1 25 kwietnia 2023, Xcode 15 29 kwietnia 2024, Xcode 26 28 kwietnia 2026. Przed każdą wiosną przeczytaj ją ponownie, zamiast polegać na artykule, także tym.
Ostrzeżenie czy blokada: jak je odróżnić?
Przed terminem ITMS-90725 przychodzi jako ostrzeżenie. W 2024 roku, na forum Apple, e-mail zaznaczał, że dostarczenie się udało, i radził poprawić to przy następnej wysyłce. Po terminie Apple pisze, że aplikacje „muszą” być skompilowane z wymaganym SDK, żeby je wysłać: build nie jest już akceptowany.
| Wskazówka | Ostrzeżenie | Blokada |
|---|---|---|
| Data wysyłki | Przed terminem | Po terminie |
| Wysyłka przyjęta | Tak | Nie |
| Co robisz | Poprawiasz w kolejnym | Nowy build |
Ostrzeżenie ITMS-90725 to odliczanie. Build przechodzi dziś, ale następny, skompilowany tak samo, zostanie odrzucony po tej dacie. Popraw to, dopóki nie goni cię pilna aktualizacja.
Naprawa ITMS-90725 w projekcie Expo
Z EAS twoja aplikacja jest kompilowana na Macach Expo, jak wyjaśniam w artykule publikacja aplikacji iOS bez Maca. Wersja Xcode zależy od obrazu buildu. Jeśli nie podasz image w eas.json, EAS używa aliasu auto: wybiera obraz według twojej wersji Expo SDK.
Oto obraz przypisany do każdego SDK według dokumentacji infrastruktury EAS, zaktualizowanej 8 października 2026:
| Expo SDK | Xcode w obrazie | ITMS-90725 |
|---|---|---|
| 57 | 26.6 | Nie |
| 56 | 26.4 | Nie |
| 55 | 26.2 | Nie |
| 54 | 26.0 | Nie |
| 53 | 16.4 | Tak |
| 52 | 16.2 | Tak |
- Sprawdź obraz użyty w ostatnim buildzie. Na stronie buildu w expo.dev sekcja „Spin up build environment” w logach pokazuje jego nazwę i wersję Xcode.
- Jeśli jesteś na SDK 54 lub nowszym, poszukaj wymuszonego obrazu. Linia
imagewskazująca na Xcode 16, np.macos-sequoia-15.6-xcode-16.4, wystarczy, żeby wywołać błąd. Dokumentacja Expo przedstawia go jako obraz SDK 54 dla tych, którzy nie chcą Xcode 26: od 28 kwietnia 2026 taki wybór kończy się odrzuceniem. Usuń tę linię: EAS wróci do domyślnego obrazu. - Jeśli jesteś na SDK 53 lub starszym, zaktualizuj SDK. To zalecenie Expo z ogłoszenia z 27 kwietnia 2026: przejść co najmniej na SDK 54.
- Zrób nowy build i wyślij go ponownie. SDK jest zapisane w pliku binarnym: aktualizacja zdalna niczego nie zmienia.
Obejście dla starego SDK
To samo ogłoszenie Expo podaje opcję, jeśli nie możesz od razu zaktualizować: wymusić obraz z Xcode 26 w eas.json, w profilu produkcyjnym.
{
"build": {
"production": {
"ios": {
"image": "macos-sequoia-15.6-xcode-26.2"
}
}
}
}
Expo ostrzega: nie wszystkie wersje SDK są zgodne z Xcode 26, a wynik zależy też od twoich bibliotek. Traktuj to jako odroczenie, nie poprawkę. Jeśli build nie przejdzie kompilacji, jedyną drogą pozostaje aktualizacja SDK.
Aktualizuj SDK po jednej wersji
Przewodnik aktualizacji Expo zaleca podnosić wersję po jednej naraz, żeby na każdym etapie wyłapać, co się psuje. Żeby przejść z SDK 53 na SDK 54:
npm install expo@^54.0.0
npx expo install --fix
npx expo-doctor
Jeśli twój folder ios jest generowany przez Expo, usuń go: zostanie odtworzony przy następnym buildzie. Potem przetestuj aplikację na iPhonie, zanim przejdziesz do kolejnej wersji.
Jedna rzecz, którą warto wiedzieć, zanim celujesz w najnowsze SDK. Według tabeli wersji Expo SDK 54 i 55 obsługują iOS 15.1 i nowsze, a SDK 56 i 57 tylko iOS 16.4 i nowsze. Przejście na SDK 56 odcina więc iPhone'y, które zostały na iOS 15. Do usunięcia ITMS-90725 wystarczy SDK 54.
Sprawdzenie SDK buildu przed wysyłką
Xcode zapisuje w Info.plist każdego buildu użyte SDK i wersję Xcode. Pobierz IPA ze strony buildu na expo.dev, a potem uruchom na swoim Macu:
unzip -q MonApp.ipa -d ipa
plutil -extract DTSDKName raw ipa/Payload/*.app/Info.plist
plutil -extract DTXcode raw ipa/Payload/*.app/Info.plist
Dla buildu przeznaczonego do App Store pierwsza wartość musi zaczynać się od iphoneos26. Druga koduje wersję Xcode: dla buildu Nolery zrobionego w Xcode 26.2 na symulator dostaję 2620. Jeśli widzisz iphoneos18 albo wartość zaczynającą się od 16, build zostanie odrzucony.
Jeśli kompilujesz na własnym Macu, liczy się twój Xcode, nie obraz EAS. xcodebuild -version pokazuje aktywną wersję. Ta sama logika w CI: wersja Xcode zależy od wybranej maszyny. W 2024 roku na forum Apple deweloperzy dostawali ITMS-90725, bo ich maszyna GitHub Actions działała na macOS zbyt starym dla Xcode 15.
Kiedy wyślesz właściwy build, przetestuj go w TestFlight przed zgłoszeniem. Nowy build też przechodzi przez weryfikację, z czasami opisanymi w artykule czas weryfikacji w App Store.
Wyślij build bez przykrych niespodzianek
ITMS-90725 da się uniknąć w minutę: sprawdzaj obraz i SDK przed każdym buildem produkcyjnym. Inne automatyczne kontrole wymagają tej samej dyscypliny, jak ITMS-90683 dla opisów uprawnień. Odrzucenia przez reviewera wymagają więcej dystansu: sposób postępowania znajdziesz na stronie aplikacja odrzucona przez Apple, a najczęstsze powody w artykule dlaczego Apple odrzuca aplikację.
Żeby sprawdzić swoje zgłoszenie przed wysyłką, Review Kit łączy moją checklistę i skille Claude Code, które przeglądają twój projekt. Jeśli wysyłka się blokuje i chcesz, żeby spojrzał na to człowiek, zarezerwuj ze mną godzinę: przejdziemy przez twój projekt na wideorozmowie, na twoim ekranie. A jeśli przygotowujesz pierwszą premierę, zrób darmową diagnozę: ułoży kroki we właściwej kolejności i wyśle ci moją checklistę przeciw odrzuceniom Apple.
Najczęściej zadawane pytania
Czy ITMS-90725 blokuje publikację mojej aplikacji?
Po terminie wyznaczonym przez Apple tak: build nie jest już akceptowany i trzeba skompilować nowy. Przed terminem to ostrzeżenie: build przechodzi, ale następny zostanie odrzucony, jeśli skompilujesz go tak samo.
Czy trzeba porzucić starsze iPhone'y, żeby kompilować z SDK iOS 26?
Nie. SDK kompilacji i minimalna wersja iOS to dwa osobne ustawienia. W Expo to wersja Expo SDK ustala to minimum: iOS 15.1 dla SDK 54 i 55, iOS 16.4 dla SDK 56 i 57.
Czy można naprawić ITMS-90725 aktualizacją zdalną?
Nie. SDK jest zapisywane w pliku binarnym w momencie kompilacji. Aktualizacja zdalna zmienia tylko JavaScript i zasoby. Trzeba zrobić nowy build w Xcode 26 i wysłać go ponownie.
Jak sprawdzić, jakiej wersji Xcode używa EAS?
Otwórz logi buildu na expo.dev, sekcja „Spin up build environment”. Nazwa obrazu wskazuje wersję Xcode, np. macos-tahoe-26.5-xcode-26.6. Pełna lista jest w dokumentacji infrastruktury EAS.
Co zmieni wymaganie z kwietnia 2027?
Według strony Apple o wysyłaniu aplikacji trzeba będzie kompilować z SDK iOS 27 i celować co najmniej w iOS 15. Po stronie EAS Expo planuje obraz z Xcode 27 dla przyszłego SDK 58: sprawdź listę obrazów buildu przed kompilacją. Wiosną przeczytaj ponownie stronę Apple, żeby poznać dokładny dzień.

