ITMS-90717: åtgärda ”Invalid large app icon” i Expo
Av Mehdi Azizi
Publicerad , 8 min
ITMS-90717: byggets ikon på 1024 x 1024 har transparens eller en alfakanal. Exportera den ogenomskinlig, kontrollera med sips och bygg om.
ITMS-90717 är en automatisk kontroll som Apple kör på ditt bygge. Den säger att appens stora ikon, den på 1024 x 1024 pixlar som visas i App Store, innehåller transparens eller en alfakanal. Lösningen: en kvadratisk, ogenomskinlig ikon som exporteras utan alfakanal, och sedan ett nytt bygge.
Med Expo är det sällan din PNG-fil som är boven: prebuild lägger den redan på en vit bakgrund. Jag har läst den koden i SDK 57 och kontrollerat ikonerna i Solys, TradaZen och Nolera. Felet kommer då oftast från en versionshanterad ios-mapp eller en Icon Composer-fil. Så här hittar du vilken det är, och fixar den.
Vad betyder felet ITMS-90717?
Meddelandet heter ”ITMS-90717: Invalid large app icon”. Det anger att den stora ikonen i appens bildkatalog ”can't be transparent or contain an alpha channel”: den får varken vara transparent eller innehålla en alfakanal. Äldre meddelanden talade om ”Invalid App Store Icon”. Det är samma regel.
Den stora ikonen är App Store-ikonen. Xcodes dokumentation om ikoner förklarar det: en app som distribueras på App Store måste ha sin ikon på 1024 punkter i bildkatalogen.
Alfakanalen är det fjärde lagret i en PNG, bredvid rött, grönt och blått. Den lagrar varje pixels transparens. En ikon kan se helt fylld ut och ändå ha kvar kanalen: det är fällan som dyker upp i varenda forumtråd.
Precis som andra ITMS-fel är det här inget avslag från en granskare. Apple har analyserat binären vid leveransen. Beroende på uppladdningsverktyget visas felet som en misslyckad validering, till exempel med kod 409.
Kontrollera ikonen med sips
På Mac är sips förinstallerat. Det räcker med en rad:
sips -g hasAlpha assets/icon.png
Du vill se hasAlpha: no. Den 15 oktober 2026 körde jag kommandot på ikonerna som anges i app.json för Solys, TradaZen och Nolera: alla svarar no, i 1024 x 1024.
Jag gjorde också en testikon: en helt ogenomskinlig blå kvadrat, men sparad med alfakanal. sips svarar yes. Ingen pixel är transparent, och ändå finns kanalen där. Det är därför så många utvecklare skriver ”min ikon har ingen transparens” under det här meddelandet.
I Preview listar inspektören (Tools, Show Inspector) också bildens egenskaper, bland annat alfakanalen.
Åtgärda: exportera ikonen utan alfakanal
Tre metoder, från den enklaste till den mest exakta.
1. Preview. File, Export, formatet PNG, och avmarkera sedan rutan Alpha. Den exporterade filen har ingen alfakanal längre.
2. sips, utan att installera något. sips tar inte bort alfakanalen från en PNG. Du får gå via en JPEG, som inte har någon:
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
På min testikon med transparenta hörn blev hörnen vita och sista raden svarar no. Omvägen via JPEG komprimerar bilden lite, även med högsta kvalitet: granska resultatet noga.
3. ImageMagick. Har du det installerat väljer du själv bakgrundsfärgen:
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
Enligt ImageMagicks dokumentation lägger -alpha remove bilden på bakgrundsfärgen, och -alpha off stänger av kanalen.
Alla tre metoderna fyller transparensen med en enfärgad yta. Om din logga svävade på en transparent bakgrund är det snyggast att gå tillbaka till källfilen och rita en riktig bakgrund. Expo kräver det i sin guide om appikonen: ikonen ska fylla hela kvadraten, utan rundade hörn eller transparenta pixlar. iOS lägger på masken själv.
Var Expo hämtar din ikon, och vad den gör med den
Expo läser först ios.icon, sedan fältet icon i roten av din konfiguration. Enligt Expos konfigurationsreferens accepterar ios.icon tre former: en PNG, ett objekt med varianterna light, dark och tinted, eller en .icon-mapp skapad med Icon Composer.
Tabellen nedan bygger på koden som genererar iOS-ikonen vid prebuild, @expo/prebuild-config 57.0.16 (SDK 57), läst den 15 oktober 2026:
| Det du anger | Det prebuild gör | Risk för ITMS-90717 |
|---|---|---|
icon som PNG | Plattas ut på vit bakgrund | Låg |
ios.icon.light | Plattas ut på vit bakgrund | Låg |
ios.icon.tinted | Plattas ut på vit bakgrund | Låg |
ios.icon.dark | Transparensen behålls | Avsett av Apple |
ios.icon som .icon | Kopieras som den är | Verklig |
Versionshanterad ios-mapp | Prebuild körs inte | Verklig |
Med en PNG tar Expo själv bort transparensen och ersätter den med vitt. En frilagd logga hamnar alltså på en vit kvadrat: inget fel, men ett utseende du kanske inte ville ha. Den mörka varianten behåller sin transparens, och det är meningen: Apple kräver transparent bakgrund för den mörka ikonen så att systemets bakgrund syns.
I Nolera, som anger alla tre varianterna, svarar sips no för den genererade ljusa och tonade ikonen, och yes för den mörka. Att döma av datumet på commiten med varianterna innehåller version 1.0.2, som är publicerad, dem. Jag har inte kontrollerat det i dess IPA.
Fallet med versionshanterad ios-mapp
Det är den troligaste orsaken med Expo. Expos sida om continuous native generation säger det: om ditt projekt innehåller mapparna android och ios kör EAS Build inte prebuild. Då påverkar din app.json inte längre ikonen: det är PNG-filen i ios-mappen som skickas till Apple.
Kontrollera det från projektets rot:
sips -g hasAlpha ios/*/Images.xcassets/AppIcon.appiconset/*.png
Om kommandot svarar yes för 1024-ikonen ersätter du den filen med din ogenomskinliga version, under samma namn. Har du inte gjort några native-ändringar för hand kan du också ta bort ios-mappen och lägga till den i .gitignore: EAS genererar den på nytt vid varje bygge. I Solys, TradaZen och Nolera ignoreras den mappen av git.
Formatet i iOS 26: Icon Composer
Icon Composer är Apples verktyg för Liquid Glass-ikonerna i iOS 26. Det skapar en enda .icon-fil med flera lager. Enligt Apples guide om Icon Composer tar Xcode även fram bilderna för äldre iOS-versioner ur den.
Expo stöder det sedan SDK 54. Du anger mappen som text, aldrig i variantobjektet:
{
"expo": {
"ios": {
"icon": "./assets/app.icon"
}
}
}
I det fallet kopierar prebuild mappen utan att röra den, och det är Xcode som skapar den slutliga ikonen. Du behöver alltså Xcode 26 eller senare, den som finns i de senaste EAS-avbildningarna, som jag förklarar i guiden om ITMS-90725.
Sedan augusti 2025 finns det trådar på Apples utvecklarforum som rapporterar ITMS-90717 med .icon-filer. De spår som nämns: ett transparent PNG-lager, ett lager som är större än duken, en grupp med Blur-effekten nära kanten. De lösningar som nämns: stäng av Blur, behåll en helfylld bakgrund eller gå tillbaka till en PNG. Trådarna ger ingen officiell lösning från Apple, och felet rapporterades fortfarande i augusti 2026.
Apples regler för ikoner pekar åt samma håll: om du importerar ett bakgrundslager måste det täcka hela ytan och vara ogenomskinligt. Mina appar använder fortfarande en PNG, så jag har inte testat Icon Composer i produktion. Om en .icon-fil stoppar din uppladdning, byt tillbaka ios.icon till en PNG: Expo plattar ut den, och ikonen klarar kontrollen.
Kontrollera ikonen i det färdiga bygget
I IPA-filen är 1024-ikonen ingen PNG-fil: Xcode kompilerar den till Assets.car. Ladda ner IPA-filen från byggets sida på expo.dev och kör sedan:
unzip -q MyApp.ipa -d ipa
xcrun assetutil --info ipa/Payload/*.app/Assets.car | grep -B3 '"RenditionName" : "App-Icon'
Varje ikon visar ett Opaque-fält. Den 15 oktober 2026 kompilerade jag med actool, Xcodes verktyg, Solys ikon och min testikon med transparenta hörn. Den första ger "Opaque" : true, den andra "Opaque" : false. Apple dokumenterar inte fältet: se det som en ledtråd, inte som Apples kontroll.
En fälla att känna till: testa inte de små PNG-filerna i appens rot med sips. Xcode skriver dem med alfakanal, även när källan är ogenomskinlig. I mitt test med Solys ikon svarar sips yes för dem.
Andra ikonfel
| Kod | Vad Apple rapporterar | Spår med Expo |
|---|---|---|
| ITMS-90717 | Transparent 1024-ikon | Exportera utan alfa |
| ITMS-90704 | 1024-ikon saknas | 1024-post saknas |
| ITMS-90022 | iPhone-ikon saknas | Ofullständig katalog |
| ITMS-90023 | iPad-ikon saknas | Ofullständig katalog |
De tre sista meddelandena härstammar mest från 2017 och 2018, när Xcode 9 ändrade reglerna för ikoner.
Med Expo har de blivit sällsynta. Prebuild skriver en enda universell ikon på 1024, och Xcode genererar övriga storlekar. Utan angiven ikon skapar Expo till och med en vit kvadrat, för att undvika att uppladdningen misslyckas. Om något av de här felen dyker upp, titta på den versionshanterade ios-mappen: filen Contents.json i AppIcon.appiconset måste innehålla en post med storleken 1024x1024, och PNG-filen den hänvisar till måste finnas.
Inför nästa uppladdning
En ikon fixar du på tio minuter, men varje fel kostar ett bygge. De andra automatiska kontrollerna kräver samma noggrannhet, som ITMS-90683 för behörighetstexterna eller ITMS-91053 för integritetsmanifestet. När bygget har godkänts installerar du det med TestFlight för att se ikonen på din hemskärm.
Avslag från en granskare kräver mer eftertanke: arbetsgången finns på sidan app avvisad av Apple, och de vanligaste orsakerna i varför Apple avvisar en app.
För att kontrollera ditt projekt före uppladdning samlar Review Kit min checklista och Claude Code-skills som går igenom ditt projekt. Om uppladdningen fastnar och du vill ha ett mänskligt öga, boka en timme med mig: vi går igenom ditt projekt via videosamtal, på din skärm. Och om du förbereder din första release, gör din gratis diagnos: den sätter stegen i rätt ordning och skickar dig min checklista mot avslag från Apple.
Vanliga frågor
Varför ser Apple en alfakanal när min ikon inte har någon transparens?
För att en PNG kan behålla en alfakanal även när alla pixlar är ogenomskinliga. Många verktyg lägger till den som standard vid export. Kontrollera med sips -g hasAlpha och exportera sedan om ikonen utan kanalen.
Kan man åtgärda ITMS-90717 med en fjärruppdatering?
Nej. Ikonen kompileras in i binären, i Assets.car. En fjärruppdatering ändrar bara appens JavaScript och resurser. Fixa ikonen, bygg om och skicka in igen.
Får den mörka ikonen vara transparent?
Ja. Apple kräver transparent bakgrund för den mörka varianten, och Expo behåller dess transparens. Min slutsats är att kontrollen gäller huvudikonen, App Store-ikonen: det är den som måste vara ogenomskinlig.
Ska man runda hörnen på iOS-ikonen?
Nej. Leverera en helfylld kvadrat: iOS lägger på masken själv. Rundade hörn lämnar transparenta pixlar i hörnen, precis det som den här kontrollen avvisar.
Stöder Expo Icon Composer-ikonerna i iOS 26?
Ja, sedan SDK 54: ange sökvägen till .icon-mappen i ios.icon, som text. Prebuild kopierar den som den är och Xcode 26 kompilerar den. Får du ITMS-90717 med det formatet, kontrollera transparenta lager och Blur-effekten, eller gå tillfälligt tillbaka till en PNG.

