ITMS-90717: Expo ile “Invalid large app icon” hatası çözümü
Yazan: Mehdi Azizi
tarihinde yayınlandı, 8 dk.
ITMS-90717: build'indeki 1024 x 1024 ikon hâlâ şeffaflık ya da alfa kanalı içeriyor. Opak dışa aktar, sips ile kontrol et, sonra yeni build al.
ITMS-90717, Apple'ın build'in üzerinde yaptığı otomatik bir kontrol. Uygulamanın büyük ikonunun, yani App Store'da gösterilen 1024 x 1024 piksellik ikonun şeffaflık ya da alfa kanalı içerdiğini söylüyor. Çözüm: kare ve opak bir ikon, alfa kanalı olmadan dışa aktarılmış, ardından yeni bir build.
Expo'da suçlu nadiren senin PNG dosyandır: prebuild onu zaten beyaz bir zeminin üzerine yerleştiriyor. Bu kodu SDK 57'de okudum ve Solys, TradaZen ve Nolera'nın ikonlarını kontrol ettim. Hata bu durumda çoğunlukla git'e eklenmiş bir ios klasöründen ya da bir Icon Composer dosyasından geliyor. Hangisi olduğunu nasıl bulacağını ve nasıl düzelteceğini anlatıyorum.
ITMS-90717 hatası ne anlama geliyor?
Mesajın başlığı "ITMS-90717: Invalid large app icon". Uygulamanın görsel kataloğundaki büyük ikonun "can't be transparent or contain an alpha channel" olduğunu belirtiyor: ne şeffaf olabilir ne de alfa kanalı içerebilir. Eski mesajlarda "Invalid App Store Icon" yazıyordu. Kural aynı.
Bu büyük ikon, App Store ikonu. Xcode'un ikon dokümantasyonu bunu açıklıyor: App Store'da dağıtılan bir uygulama, 1024 puntoluk ikonunu görsel kataloğunda sağlamak zorunda.
Alfa kanalı, bir PNG'nin kırmızı, yeşil ve maviyle birlikte dördüncü katmanı. Her pikselin şeffaflığını saklıyor. Bir ikon tamamen dolu görünüp yine de bu kanalı taşıyabilir: forum başlıklarının hepsinde karşına çıkan tuzak bu.
Diğer ITMS hataları gibi, bu da bir reviewer'ın reddi değil. Apple binary'yi teslim anında analiz etti. Kullandığın gönderim aracına göre hata, örneğin 409 koduyla, bir doğrulama hatası olarak görünüyor.
İkonunu sips ile kontrol et
Mac'te sips hazır kurulu geliyor. Tek satır yeterli:
sips -g hasAlpha assets/icon.png
Görmek istediğin sonuç hasAlpha: no. 15 Ekim 2026'da bu komutu Solys, TradaZen ve Nolera'nın app.json dosyalarında tanımlı ikonlarda çalıştırdım: hepsi 1024 x 1024 boyutunda ve no cevabı veriyor.
Bir de deneme ikonu hazırladım: tamamen opak mavi bir kare, ama alfa kanalıyla kaydedilmiş. sips cevabı yes. Hiçbir piksel şeffaf değil, ama kanal yine de orada. Bu mesajın altına bu kadar çok geliştiricinin "ikonumda hiç şeffaflık yok" yazmasının sebebi bu.
Önizleme'de de denetçi (Araçlar, Denetçiyi Göster) görselin özelliklerini, alfa kanalı dahil, listeliyor.
Çözüm: ikonu alfa kanalı olmadan dışa aktar
En basitinden en hassasına üç yöntem.
1. Önizleme. Dosya, Dışa Aktar, PNG formatı, sonra Alfa kutucuğunun işaretini kaldır. Dışa aktarılan dosyada artık alfa kanalı yok.
2. sips, hiçbir şey kurmadan. sips bir PNG'den alfa kanalını kaldırmıyor. Alfa kanalı olmayan JPEG üzerinden geçmen gerekiyor:
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
Köşeleri şeffaf olan deneme ikonumda köşeler beyaza döndü ve son satır no cevabı verdi. JPEG'den geçmek, en yüksek kalitede bile görseli biraz sıkıştırıyor: sonuca yakından bak.
3. ImageMagick. Kuruluysa zemin rengini sen seçersin:
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
ImageMagick dokümantasyonuna göre -alpha remove görseli zemin renginin üzerine yerleştiriyor, -alpha off ise kanalı kapatıyor.
Bu üç yöntem de şeffaflığı düz bir renkle dolduruyor. Logon şeffaf bir zeminin üzerinde duruyorsa, en temizi kaynak dosyaya dönüp gerçek bir zemin çizmek. Expo da uygulama ikonu rehberinde bunu istiyor: ikon tüm kareyi doldurmalı, yuvarlatılmış köşe ya da şeffaf piksel olmamalı. Maskeyi iOS kendisi uyguluyor.
Expo ikonunu nereden alıyor ve onunla ne yapıyor
Expo önce ios.icon alanını, sonra yapılandırmanın kökündeki icon alanını okuyor. Expo yapılandırma referansına göre ios.icon üç biçim kabul ediyor: bir PNG, light, dark ve tinted varyantları olan bir nesne ya da Icon Composer ile oluşturulmuş bir .icon klasörü.
Aşağıdaki tablo, prebuild sırasında iOS ikonunu üreten koddan, @expo/prebuild-config 57.0.16'dan (SDK 57) geliyor; 15 Ekim 2026'da okudum:
| Ne tanımlıyorsun | Prebuild ne yapıyor | ITMS-90717 riski |
|---|---|---|
PNG olarak icon | Beyaz zemine düzleştirilir | Düşük |
ios.icon.light | Beyaz zemine düzleştirilir | Düşük |
ios.icon.tinted | Beyaz zemine düzleştirilir | Düşük |
ios.icon.dark | Şeffaflık korunur | Apple böyle istiyor |
.icon olarak ios.icon | Olduğu gibi kopyalanır | Gerçek |
Git'e eklenmiş ios klasörü | Prebuild yeniden çalışmaz | Gerçek |
PNG kullandığında Expo şeffaflığı kendisi kaldırıp yerine beyaz koyuyor. Yani arka planı silinmiş bir logo beyaz bir karenin üzerinde kalıyor: hata yok, ama belki istemediğin bir görünüm. Koyu varyant şeffaflığını koruyor ve bu bilerek yapılıyor: Apple, sistemin sağladığı zemin görünsün diye koyu ikon için şeffaf zemin istiyor.
Üç varyantı da tanımlayan Nolera'da sips, üretilen açık ve renklendirilmiş ikonlar için no, koyu ikon için yes cevabı veriyor. Bu varyantların commit tarihine bakılırsa, yayındaki 1.0.2 sürümü onları içeriyor. Bunu IPA'sında kontrol etmedim.
Git'e eklenmiş ios klasörü durumu
Expo'da en olası sebep bu. Expo'nun sürekli native üretim sayfası bunu söylüyor: projende android ve ios klasörleri varsa, EAS Build prebuild'i çalıştırmıyor. Bu durumda app.json'ın ikona artık dokunmuyor: Apple'a giden, ios klasöründeki PNG.
Projenin kökünden kontrol et:
sips -g hasAlpha ios/*/Images.xcassets/AppIcon.appiconset/*.png
Komut 1024 ikonu için yes cevabı veriyorsa, bu dosyayı aynı isimle opak sürümünle değiştir. Elle hiçbir native değişiklik yapmadıysan, ios klasörünü silip .gitignore dosyasına da ekleyebilirsin: EAS onu her build'de yeniden üretir. Solys, TradaZen ve Nolera'da bu klasör git tarafından yok sayılıyor.
iOS 26 formatı: Icon Composer
Icon Composer, Apple'ın iOS 26'daki Liquid Glass ikonları için aracı. Birden fazla katmanlı tek bir .icon dosyası üretiyor. Apple'ın Icon Composer rehberine göre Xcode, eski iOS sürümleri için gereken görselleri de bundan çıkarıyor.
Expo bunu SDK 54'ten beri destekliyor. Klasörü metin olarak tanımlıyorsun, asla varyant nesnesinin içinde değil:
{
"expo": {
"ios": {
"icon": "./assets/app.icon"
}
}
}
Bu durumda prebuild klasörü hiç dokunmadan kopyalıyor ve son ikonu Xcode üretiyor. Yani Xcode 26 ya da üstü gerekiyor; ITMS-90725 rehberinde anlattığım gibi, yeni EAS imajlarında olan sürüm bu.
Ağustos 2025'ten beri Apple'ın geliştirici forumunda bazı başlıklar .icon dosyalarıyla ITMS-90717 aldığını bildiriyor. Bildirilen olası sebepler: şeffaf bir PNG katmanı, tuvalden büyük bir katman, kenara yakın Blur efekti olan bir grup. Bahsedilen geçici çözümler: Blur'u kapatmak, dolu bir zemin tutmak ya da PNG'ye geri dönmek. Bu başlıklarda Apple'dan resmi bir çözüm yok ve hata Ağustos 2026'da hâlâ bildiriliyordu.
Apple'ın ikon kuralları da bu yönde: bir zemin katmanı içe aktarırsan, tüm yüzeyi kaplamalı ve opak olmalı. Benim uygulamalarım hâlâ PNG kullanıyor, yani Icon Composer'ı canlıda test etmedim. Bir .icon dosyası gönderimini engelliyorsa, ios.icon alanını PNG'ye geri al: Expo onu düzleştirir ve ikonun bu kontrolden geçer.
İkonu son build'de kontrol et
IPA'nın içinde 1024 ikon bir PNG dosyası değil: Xcode onu Assets.car içine derliyor. IPA'yı expo.dev'deki build sayfasından indir, sonra şunu çalıştır:
unzip -q MonApp.ipa -d ipa
xcrun assetutil --info ipa/Payload/*.app/Assets.car | grep -B3 '"RenditionName" : "App-Icon'
Her ikon bir Opaque alanı gösteriyor. 15 Ekim 2026'da Xcode'un aracı actool ile Solys'in ikonunu ve köşeleri şeffaf deneme ikonumu derledim. İlki "Opaque" : true, ikincisi "Opaque" : false çıktı. Apple bu alanı belgelemiyor: onu Apple'ın kontrolü olarak değil, bir ipucu olarak gör.
Bilmen gereken bir tuzak: uygulamanın kökündeki küçük PNG'leri sips ile test etme. Kaynak opak olsa bile Xcode onları alfa kanalıyla yazıyor. Solys'in ikonuyla yaptığım testte sips bunlar için yes cevabı veriyor.
Diğer ikon hataları
| Kod | Apple neyi bildiriyor | Expo'da bakılacak yer |
|---|---|---|
| ITMS-90717 | 1024 ikon şeffaf | Alfa olmadan dışa aktar |
| ITMS-90704 | 1024 ikon yok | 1024 girişi eksik |
| ITMS-90022 | iPhone ikonu yok | Katalog eksik |
| ITMS-90023 | iPad ikonu yok | Katalog eksik |
Son üç mesaj çoğunlukla 2017 ve 2018'e, Xcode 9'un ikon kurallarını değiştirdiği döneme ait.
Expo'da artık nadir görülüyorlar. Prebuild tek bir 1024 evrensel ikon yazıyor, diğer boyutları Xcode üretiyor. Hiç ikon tanımlamadıysan Expo, gönderimde hata olmasın diye beyaz bir kare bile oluşturuyor. Bu hatalardan biri gelirse, git'e eklenmiş ios klasörüne bak: AppIcon.appiconset içindeki Contents.json dosyasında 1024x1024 boyutunda bir giriş olmalı ve bu girişin gösterdiği PNG var olmalı.
Bir sonraki gönderimden önce
Bir ikon on dakikada düzelir, ama her hata sana bir build'e mal olur. Diğer otomatik kontroller de aynı titizliği istiyor; örneğin izin cümleleri için ITMS-90683 ya da gizlilik manifestosu için ITMS-91053. Build kabul edildikten sonra, ikonunu ana ekranında görmek için onu TestFlight ile yükle.
Bir reviewer'ın retleri daha geniş bir bakış istiyor: izlenecek yol Apple tarafından reddedilen uygulama sayfasında, en sık görülen sebepler de Apple bir uygulamayı neden reddeder yazısında.
Gönderimden önce dosyanı kontrol etmek için Review Kit, kontrol listemi ve projeni okuyan Claude Code skill'lerini bir araya getiriyor. Gönderimin takıldıysa ve bir insanın gözüyle bakılmasını istiyorsan, benimle bir saatlik görüşme ayarla: projeni görüntülü görüşmede, senin ekranında birlikte ele alalım. İlk yayınına hazırlanıyorsan da ücretsiz diagnostic'ini yap: adımları doğru sıraya koyar ve sana Apple reddine karşı kontrol listemi gönderir.
Sık sorulan sorular
İkonumda hiç şeffaflık yokken Apple neden alfa kanalı görüyor?
Çünkü bir PNG, tüm pikselleri opak olsa bile alfa kanalını koruyabilir. Pek çok araç dışa aktarırken bunu varsayılan olarak ekliyor. sips -g hasAlpha ile kontrol et, sonra ikonu bu kanal olmadan yeniden dışa aktar.
ITMS-90717 uzaktan bir güncellemeyle düzeltilebilir mi?
Hayır. İkon binary'nin içinde, Assets.car dosyasında derleniyor. Uzaktan güncelleme yalnızca uygulamanın JavaScript'ini ve kaynaklarını değiştirir. İkonu düzelt, yeni bir build al, sonra tekrar gönder.
Koyu ikon şeffaf olabilir mi?
Evet. Apple koyu varyant için şeffaf zemin istiyor ve Expo onun şeffaflığını koruyor. Buradan kontrolün ana ikonu, yani App Store ikonunu hedeflediği sonucunu çıkarıyorum: opak olması gereken o.
iOS ikonunun köşelerini yuvarlatmak gerekir mi?
Hayır. Dolu bir kare ver: maskeyi iOS kendisi uyguluyor. Yuvarlatılmış köşeler, köşelerde şeffaf pikseller bırakır; bu kontrolün reddettiği şey tam olarak bu.
Expo, iOS 26'nın Icon Composer ikonlarını destekliyor mu?
Evet, SDK 54'ten beri: .icon klasörünün yolunu ios.icon alanında metin olarak tanımla. Prebuild onu olduğu gibi kopyalar ve Xcode 26 derler. Bu formatla ITMS-90717 alırsan, şeffaf katmanları ve Blur efektini kontrol et ya da geçici olarak PNG'ye dön.

