ITMS-90717: „Invalid large app icon“ mit Expo beheben
Von Mehdi Azizi
Veröffentlicht am , 8 Min.
ITMS-90717: Dein 1024er-Icon hat Transparenz oder einen Alphakanal. Exportiere es deckend, prüfe es mit sips und mach einen neuen Build.
ITMS-90717 ist eine automatische Prüfung, die Apple auf deinen Build anwendet. Sie meldet, dass das große App-Icon, also das 1024 x 1024 Pixel große Icon, das der App Store anzeigt, Transparenz oder einen Alphakanal enthält. Die Lösung: ein quadratisches, deckendes Icon, ohne Alphakanal exportiert, und danach ein neuer Build.
Mit Expo ist deine PNG-Datei selten schuld: Der Prebuild legt sie bereits auf einen weißen Hintergrund. Ich habe diesen Code im SDK 57 gelesen und die Icons von Solys, TradaZen und Nolera geprüft. Der Fehler kommt dann meistens von einem versionierten ios-Ordner oder einer Icon-Composer-Datei. So findest du heraus, was es bei dir ist, und behebst es.
Was bedeutet der Fehler ITMS-90717?
Die Meldung heißt „ITMS-90717: Invalid large app icon“. Sie erklärt, dass das große Icon im Asset-Katalog deiner App „can't be transparent or contain an alpha channel“: Es darf weder transparent sein noch einen Alphakanal enthalten. Ältere Meldungen sprachen von „Invalid App Store Icon“. Es ist dieselbe Regel.
Dieses große Icon ist das des App Store. Die Xcode-Dokumentation zu Icons erklärt es: Eine App, die über den App Store verteilt wird, muss ihr 1024-Punkt-Icon im Asset-Katalog mitliefern.
Der Alphakanal ist die vierte Ebene eines PNG, neben Rot, Grün und Blau. Er speichert die Transparenz jedes Pixels. Ein Icon kann komplett gefüllt aussehen und diesen Kanal trotzdem behalten: Das ist die Falle, die in jedem Forenthread wieder auftaucht.
Wie die anderen ITMS-Fehler ist das keine Ablehnung durch einen Reviewer. Apple hat das Binary bei der Auslieferung analysiert. Je nach Upload-Tool erscheint der Fehler als fehlgeschlagene Validierung, zum Beispiel mit dem Code 409.
Dein Icon mit sips prüfen
Auf dem Mac ist sips vorinstalliert. Eine Zeile reicht:
sips -g hasAlpha assets/icon.png
Du willst hasAlpha: no lesen. Am 15. Oktober 2026 habe ich diesen Befehl auf die Icons laufen lassen, die in den app.json von Solys, TradaZen und Nolera angegeben sind: Alle antworten mit no, in 1024 x 1024.
Ich habe auch ein Test-Icon gebaut: ein komplett deckendes blaues Quadrat, aber mit Alphakanal gespeichert. sips antwortet mit yes. Kein einziges Pixel ist transparent, und trotzdem ist der Kanal da. Deshalb schreiben so viele Entwickler unter diese Meldung „mein Icon hat keinerlei Transparenz“.
In Preview listet auch der Inspector (Tools, Show Inspector) die Eigenschaften des Bildes auf, darunter den Alphakanal.
Beheben: das Icon ohne Alphakanal exportieren
Drei Methoden, von der einfachsten bis zur genauesten.
1. Preview. File, Export, Format PNG, dann das Häkchen bei Alpha entfernen. Die exportierte Datei hat keinen Alphakanal mehr.
2. sips, ohne etwas zu installieren. sips entfernt den Alphakanal eines PNG nicht. Du musst den Umweg über ein JPEG gehen, das keinen hat:
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
Bei meinem Test-Icon mit transparenten Ecken wurden die Ecken weiß, und die letzte Zeile antwortet mit no. Der Umweg über JPEG komprimiert das Bild etwas, selbst bei maximaler Qualität: Schau dir das Ergebnis genau an.
3. ImageMagick. Wenn du es installiert hast, wählst du die Hintergrundfarbe selbst:
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
Laut der ImageMagick-Dokumentation legt -alpha remove das Bild auf die Hintergrundfarbe, und -alpha off deaktiviert den Kanal.
Diese drei Methoden füllen die Transparenz mit einer einfarbigen Fläche. Wenn dein Logo auf transparentem Hintergrund schwebte, ist es am saubersten, die Quelldatei zu nehmen und dort einen echten Hintergrund zu zeichnen. Expo verlangt das in seinem Leitfaden zum App-Icon: Das Icon muss das ganze Quadrat füllen, ohne abgerundete Ecken und ohne transparente Pixel. iOS wendet die Maske selbst an.
Wo Expo dein Icon herholt und was es damit macht
Expo liest zuerst ios.icon, dann das Feld icon auf der obersten Ebene deiner Konfiguration. Laut der Referenz der Expo-Konfiguration akzeptiert ios.icon drei Formen: ein PNG, ein Objekt mit den Varianten light, dark und tinted oder einen mit Icon Composer erstellten .icon-Ordner.
Die folgende Tabelle stammt aus dem Code, der das iOS-Icon beim Prebuild erzeugt, @expo/prebuild-config 57.0.16 (SDK 57), gelesen am 15. Oktober 2026:
| Was du angibst | Was der Prebuild macht | Risiko ITMS-90717 |
|---|---|---|
icon als PNG | Auf weißen Hintergrund gelegt | Gering |
ios.icon.light | Auf weißen Hintergrund gelegt | Gering |
ios.icon.tinted | Auf weißen Hintergrund gelegt | Gering |
ios.icon.dark | Transparenz bleibt erhalten | Von Apple gewollt |
ios.icon als .icon | Unverändert kopiert | Real |
Versionierter ios-Ordner | Prebuild läuft nicht erneut | Real |
Bei einem PNG entfernt Expo die Transparenz selbst und ersetzt sie durch Weiß. Ein freigestelltes Logo landet also auf einem weißen Quadrat: kein Fehler, aber vielleicht nicht der Look, den du wolltest. Die dunkle Variante behält ihre Transparenz, und das ist gewollt: Apple verlangt für das dunkle Icon einen transparenten Hintergrund, damit der vom System gelieferte Hintergrund durchscheint.
Bei Nolera, das alle drei Varianten angibt, antwortet sips mit no für das erzeugte helle und getönte Icon und mit yes für das dunkle. Laut dem Datum des Commits dieser Varianten enthält die veröffentlichte Version 1.0.2 sie. In ihrer IPA habe ich das nicht geprüft.
Der Fall des versionierten ios-Ordners
Das ist mit Expo die wahrscheinlichste Ursache. Die Expo-Seite zu Continuous Native Generation sagt es: Wenn dein Projekt die Ordner android und ios enthält, startet EAS Build den Prebuild nicht. Deine app.json hat dann keinen Einfluss mehr auf das Icon: Es ist das PNG aus dem ios-Ordner, das an Apple geht.
Prüf das vom Projektstamm aus:
sips -g hasAlpha ios/*/Images.xcassets/AppIcon.appiconset/*.png
Wenn der Befehl für das 1024er-Icon mit yes antwortet, ersetze diese Datei durch deine deckende Version, unter demselben Namen. Wenn du keine nativen Änderungen von Hand gemacht hast, kannst du den ios-Ordner auch löschen und in die .gitignore aufnehmen: EAS erzeugt ihn bei jedem Build neu. Bei Solys, TradaZen und Nolera wird dieser Ordner von git ignoriert.
Das Format von iOS 26: Icon Composer
Icon Composer ist Apples Tool für die Liquid-Glass-Icons von iOS 26. Es erzeugt eine einzige .icon-Datei mit mehreren Ebenen. Laut Apples Leitfaden zu Icon Composer erzeugt Xcode daraus auch die Bilder für ältere iOS-Versionen.
Expo unterstützt das seit SDK 54. Du gibst den Ordner als Text an, niemals im Varianten-Objekt:
{
"expo": {
"ios": {
"icon": "./assets/app.icon"
}
}
}
In diesem Fall kopiert der Prebuild den Ordner, ohne ihn anzufassen, und Xcode erzeugt das endgültige Icon. Du brauchst also Xcode 26 oder neuer, wie in den aktuellen EAS-Images, wie ich im Leitfaden zu ITMS-90725 erkläre.
Seit August 2025 melden Threads im Apple-Entwicklerforum ITMS-90717 mit .icon-Dateien. Die genannten Spuren: eine transparente PNG-Ebene, eine Ebene, die größer ist als die Leinwand, eine Gruppe mit Blur-Effekt nahe am Rand. Die genannten Workarounds: Blur abschalten, einen vollen Hintergrund behalten oder zu einem PNG zurückkehren. Diese Threads liefern keine offizielle Lösung von Apple, und der Fehler wurde noch im August 2026 gemeldet.
Apples Regeln für Icons gehen in dieselbe Richtung: Wenn du eine Hintergrundebene importierst, muss sie die ganze Fläche abdecken und deckend sein. Meine Apps nutzen noch ein PNG, ich habe Icon Composer also nicht in Produktion getestet. Wenn eine .icon-Datei deinen Upload blockiert, stell ios.icon wieder auf ein PNG um: Expo legt es auf einen Hintergrund, und dein Icon besteht diese Prüfung.
Das Icon im fertigen Build prüfen
In der IPA ist das 1024er-Icon keine PNG-Datei: Xcode kompiliert es in Assets.car. Lade die IPA von der Build-Seite auf expo.dev herunter und führe dann aus:
unzip -q MyApp.ipa -d ipa
xcrun assetutil --info ipa/Payload/*.app/Assets.car | grep -B3 '"RenditionName" : "App-Icon'
Jedes Icon zeigt ein Feld Opaque. Am 15. Oktober 2026 habe ich mit actool, dem Xcode-Tool, das Icon von Solys und mein Test-Icon mit transparenten Ecken kompiliert. Das erste kommt mit "Opaque" : true heraus, das zweite mit "Opaque" : false. Apple dokumentiert dieses Feld nicht: Sieh es als Hinweis, nicht als Apples eigentliche Prüfung.
Eine Falle, die du kennen solltest: Teste nicht die kleinen PNGs im Stammverzeichnis der App mit sips. Xcode schreibt sie mit Alphakanal, selbst wenn die Quelle deckend ist. Bei meinem Test mit dem Solys-Icon antwortet sips für sie mit yes.
Die anderen Icon-Fehler
| Code | Was Apple meldet | Ansatz mit Expo |
|---|---|---|
| ITMS-90717 | 1024er-Icon transparent | Ohne Alpha exportieren |
| ITMS-90704 | 1024er-Icon fehlt | 1024er-Eintrag fehlt |
| ITMS-90022 | iPhone-Icon fehlt | Katalog unvollständig |
| ITMS-90023 | iPad-Icon fehlt | Katalog unvollständig |
Die letzten drei Meldungen stammen vor allem aus 2017 und 2018, als Xcode 9 die Regeln für Icons geändert hat.
Mit Expo sind sie selten geworden. Der Prebuild schreibt ein einziges universelles 1024er-Icon, und Xcode erzeugt die anderen Größen. Ohne angegebenes Icon erzeugt Expo sogar ein weißes Quadrat, um einen Fehler beim Upload zu vermeiden. Wenn einer dieser Fehler auftaucht, schau in den versionierten ios-Ordner: Die Datei Contents.json in AppIcon.appiconset muss einen Eintrag der Größe 1024x1024 enthalten, und das dort genannte PNG muss existieren.
Vor deinem nächsten Upload
Ein Icon ist in zehn Minuten korrigiert, aber jeder Fehler kostet einen Build. Die anderen automatischen Prüfungen verlangen dieselbe Sorgfalt, etwa ITMS-90683 für die Berechtigungstexte oder ITMS-91053 für das Privacy Manifest. Sobald der Build akzeptiert ist, installier ihn mit TestFlight, um dein Icon auf deinem Home-Bildschirm zu sehen.
Ablehnungen durch einen Reviewer brauchen mehr Abstand: Das Vorgehen steht auf der Seite App von Apple abgelehnt, und die häufigsten Gründe findest du unter warum Apple eine App ablehnt.
Um dein Projekt vor dem Upload zu prüfen, bündelt das Review Kit meine Checkliste und Claude-Code-Skills, die dein Projekt gegenlesen. Wenn dein Upload hängt und du einen menschlichen Blick willst, buch eine Stunde mit mir: Wir gehen dein Projekt per Video durch, auf deinem Bildschirm. Und wenn du deinen ersten Release vorbereitest, mach deine kostenlose Diagnose: Sie bringt die Schritte in die richtige Reihenfolge und schickt dir meine Checkliste gegen Apple-Ablehnungen.
Häufige Fragen
Warum sieht Apple einen Alphakanal, obwohl mein Icon keinerlei Transparenz hat?
Weil ein PNG einen Alphakanal behalten kann, auch wenn alle Pixel deckend sind. Viele Tools fügen ihn beim Export standardmäßig hinzu. Prüf das mit sips -g hasAlpha und exportiere das Icon dann ohne diesen Kanal neu.
Kann man ITMS-90717 mit einem Remote-Update beheben?
Nein. Das Icon ist ins Binary kompiliert, in Assets.car. Ein Remote-Update ändert nur das JavaScript und die Ressourcen der App. Korrigier das Icon, mach einen neuen Build und lade ihn erneut hoch.
Darf das dunkle Icon transparent sein?
Ja. Apple verlangt für die dunkle Variante einen transparenten Hintergrund, und Expo behält ihre Transparenz. Daraus schließe ich, dass die Prüfung auf das Haupt-Icon zielt, das des App Store: Das muss deckend sein.
Muss ich die Ecken des iOS-Icons abrunden?
Nein. Liefere ein volles Quadrat: iOS wendet die Maske selbst an. Abgerundete Ecken hinterlassen transparente Pixel in den Ecken, genau das, was diese Prüfung ablehnt.
Unterstützt Expo die Icon-Composer-Icons von iOS 26?
Ja, seit SDK 54: Gib den Pfad zum .icon-Ordner in ios.icon als Text an. Der Prebuild kopiert ihn unverändert, und Xcode 26 kompiliert ihn. Bei ITMS-90717 mit diesem Format prüfst du die transparenten Ebenen und den Blur-Effekt oder kehrst vorübergehend zu einem PNG zurück.

