# ITMS-90717: Expo ile “Invalid large app icon” hatası çözümü

> 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.

Orijinal sayfa: [ITMS-90717: Expo ile “Invalid large app icon” hatası çözümü](https://devoria.fr/tr/blog/itms-90717-invalid-large-app-icon-expo)
Yazar: [Mehdi Azizi](https://devoria.fr/tr/mehdi-azizi)
Yayın: 2026-11-04
İçeriğin son gözden geçirilmesi: 2026-11-04


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](https://developer.apple.com/documentation/xcode/configuring-your-app-icon) 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:

```bash
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:

```bash
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:

```bash
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
```

[ImageMagick dokümantasyonuna](https://imagemagick.org/command-line-options/#alpha) 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](https://docs.expo.dev/develop/user-interface/splash-screen-and-app-icon/) 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](https://docs.expo.dev/versions/latest/config/app/) 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ı](https://docs.expo.dev/workflow/continuous-native-generation/) 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:

```bash
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](https://developer.apple.com/documentation/xcode/creating-your-app-icon-using-icon-composer) 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:

```json
{
  "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](https://devoria.fr/tr/blog/itms-90725-sdk-version-issue-expo) 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ı](https://developer.apple.com/design/human-interface-guidelines/app-icons) 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:

```bash
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](https://devoria.fr/tr/blog/itms-90683-missing-purpose-string-expo) ya da gizlilik manifestosu için [ITMS-91053](https://devoria.fr/tr/blog/itms-91053-missing-api-declaration-expo). Build kabul edildikten sonra, ikonunu ana ekranında görmek için onu [TestFlight](https://devoria.fr/tr/blog/testflight-iphone-uygulama-test-etme) ile yükle.

Bir reviewer'ın retleri daha geniş bir bakış istiyor: izlenecek yol [Apple tarafından reddedilen uygulama](https://devoria.fr/tr/expertise/apple-tarafindan-reddedilen-uygulama) sayfasında, en sık görülen sebepler de [Apple bir uygulamayı neden reddeder](https://devoria.fr/tr/blog/apple-uygulama-reddi-neden-reddedilir) yazısında.

Gönderimden önce dosyanı kontrol etmek için [Review Kit](https://devoria.fr/tr/kits/app-review), 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](https://devoria.fr/tr/coaching): 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](https://devoria.fr/tr/diagnostic): 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.


## Projen

[Review Kit](https://devoria.fr/tr/kits/app-review): App Store inceleme kontrol listem, düzelttiğim Apple retlerim, Google Play kontrol listesi ve üç Claude Code skill'i. ₺2.699.

[iOS & Android Kit](https://devoria.fr/tr/kits/ios): Claude Code ile iPhone ve Android uygulamanı yap: uygulamalarımın başlangıç kodu, mağazalara kadar giden yol ve tüm kitler. ₺5.499.

[Analiz: Seni iPhone uygulamandan ayıran ne?](https://devoria.fr/tr/diagnostic): 7 soru, 60 saniye: iPhone uygulamanı yayınlamanı asıl neyin engellediğini, 4 adımlık yolunu ve sana uygun kiti öğren.
