# ITMS-90717: mengatasi Invalid large app icon di Expo

> ITMS-90717: ikon 1024 x 1024 di build kamu masih punya transparansi atau kanal alpha. Ekspor ulang tanpa alpha, cek dengan sips, lalu build ulang.

Halaman asli: [ITMS-90717: mengatasi Invalid large app icon di Expo](https://devoria.fr/id/blog/itms-90717-invalid-large-app-icon-expo)
Penulis: [Mehdi Azizi](https://devoria.fr/id/mehdi-azizi)
Terbit: 2026-11-04
Revisi konten terakhir: 2026-11-04


ITMS-90717 adalah pemeriksaan otomatis Apple pada build kamu. Pesannya bilang ikon besar aplikasi, yaitu ikon 1024 x 1024 piksel yang tampil di App Store, mengandung transparansi atau kanal alpha. **Solusinya: ikon persegi yang solid, diekspor tanpa kanal alpha, lalu build baru.**

Di Expo, file PNG kamu jarang jadi biang masalahnya: prebuild sudah menempatkannya di atas latar putih. Saya sudah membaca kode ini di SDK 57 dan mengecek ikon Solys, TradaZen, dan Nolera. Jadi, error ini paling sering datang dari folder `ios` yang ikut di-commit atau dari file Icon Composer. Berikut cara mencari tahu yang mana, lalu memperbaikinya.

## Apa arti error ITMS-90717?

Judul pesannya "ITMS-90717: Invalid large app icon". Pesan itu menjelaskan bahwa ikon besar di katalog gambar aplikasi kamu "can't be transparent or contain an alpha channel": tidak boleh transparan dan tidak boleh punya kanal alpha. Pesan versi lama menyebutnya "Invalid App Store Icon". Aturannya sama.

Ikon besar ini adalah ikon untuk App Store. [Dokumentasi Xcode tentang ikon](https://developer.apple.com/documentation/xcode/configuring-your-app-icon) menjelaskannya: aplikasi yang didistribusikan lewat App Store harus menyediakan ikon 1024 point di katalog gambarnya.

Kanal alpha adalah lapisan keempat sebuah PNG, di samping merah, hijau, dan biru. Lapisan ini menyimpan tingkat transparansi setiap piksel. **Sebuah ikon bisa terlihat penuh tapi tetap menyimpan kanal ini**: inilah jebakan yang muncul di semua thread forum.

Seperti error ITMS lainnya, ini bukan penolakan dari reviewer. Apple menganalisis binary saat pengiriman. Tergantung alat pengirimnya, error muncul sebagai kegagalan validasi, misalnya dengan kode 409.

## Cek ikon kamu dengan sips

Di Mac, `sips` sudah terpasang bawaan. Cukup satu baris:

```bash
sips -g hasAlpha assets/icon.png
```

Yang kamu harapkan adalah `hasAlpha: no`. Pada 15 Oktober 2026, saya menjalankan perintah ini pada ikon yang dideklarasikan di app.json Solys, TradaZen, dan Nolera: semuanya menjawab `no`, dalam ukuran 1024 x 1024.

Saya juga membuat ikon uji: persegi biru yang sepenuhnya solid, tapi disimpan dengan kanal alpha. `sips` menjawab `yes`. **Tidak ada satu piksel pun yang transparan, tapi kanalnya tetap ada.** Itulah sebabnya banyak developer menulis "ikon saya sama sekali tidak transparan" di bawah pesan ini.

Di Preview, inspector (Tools, Show Inspector) juga menampilkan properti gambar, termasuk kanal alpha.

## Perbaikan: ekspor ikon tanpa kanal alpha

Tiga metode, dari yang paling mudah sampai yang paling presisi.

**1. Preview.** File, Export, format PNG, lalu hapus centang Alpha. File hasil ekspor tidak lagi punya kanal alpha.

**2. sips, tanpa menginstal apa pun.** `sips` tidak bisa menghapus kanal alpha dari PNG. Kamu harus lewat JPEG, yang memang tidak punya kanal alpha:

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

Pada ikon uji saya yang sudutnya transparan, sudut-sudutnya jadi putih dan baris terakhir menjawab `no`. Konversi lewat JPEG sedikit mengompresi gambar, bahkan dengan kualitas maksimum: periksa hasilnya dengan teliti.

**3. ImageMagick.** Kalau sudah terinstal, kamu bisa memilih warna latarnya:

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

Menurut [dokumentasi ImageMagick](https://imagemagick.org/command-line-options/#alpha), `-alpha remove` menempatkan gambar di atas warna latar, dan `-alpha off` menonaktifkan kanalnya.

Ketiga metode ini mengisi area transparan dengan satu warna polos. Kalau logomu mengambang di atas latar transparan, cara paling rapi adalah membuka file sumbernya dan menggambar latar yang sungguhan. Expo memintanya di [panduan ikon aplikasinya](https://docs.expo.dev/develop/user-interface/splash-screen-and-app-icon/): ikon harus memenuhi seluruh persegi, tanpa sudut membulat atau piksel transparan. iOS sendiri yang menerapkan masker.

## Dari mana Expo mengambil ikonmu, dan apa yang dilakukannya

Expo membaca `ios.icon` lebih dulu, lalu field `icon` di root konfigurasi. Menurut [referensi konfigurasi Expo](https://docs.expo.dev/versions/latest/config/app/), `ios.icon` menerima tiga bentuk: PNG, objek dengan varian `light`, `dark`, dan `tinted`, atau folder `.icon` yang dibuat dengan Icon Composer.

Tabel berikut berasal dari kode yang membuat ikon iOS saat prebuild, `@expo/prebuild-config` 57.0.16 (SDK 57), yang saya baca pada 15 Oktober 2026:

| Yang kamu deklarasikan    | Yang dilakukan prebuild    | Risiko ITMS-90717    |
| ------------------------- | -------------------------- | -------------------- |
| `icon` berupa PNG         | Diratakan di latar putih   | Rendah               |
| `ios.icon.light`          | Diratakan di latar putih   | Rendah               |
| `ios.icon.tinted`         | Diratakan di latar putih   | Rendah               |
| `ios.icon.dark`           | Transparansi dipertahankan | Memang diminta Apple |
| `ios.icon` berupa `.icon` | Disalin apa adanya         | Nyata                |
| Folder `ios` di-commit    | Prebuild tidak dijalankan  | Nyata                |

**Dengan PNG, Expo sendiri yang menghapus transparansi dan menggantinya dengan putih.** Jadi logo tanpa latar akan berakhir di atas persegi putih: tidak ada error, tapi tampilannya mungkin bukan yang kamu inginkan. Varian gelap tetap transparan, dan itu memang disengaja: Apple meminta latar transparan untuk ikon gelap, supaya latar dari sistem bisa terlihat.

Di Nolera, yang mendeklarasikan ketiga varian, `sips` menjawab `no` untuk ikon terang dan ikon tinted yang dihasilkan, dan `yes` untuk ikon gelap. Berdasarkan tanggal commit varian-varian ini, versi 1.0.2 yang sudah rilis menyertakannya. Saya belum mengeceknya di IPA-nya.

### Kasus folder ios yang di-commit

Ini penyebab yang paling mungkin di Expo. [Halaman Expo tentang continuous native generation](https://docs.expo.dev/workflow/continuous-native-generation/) menyebutkannya: kalau proyekmu berisi folder `android` dan `ios`, EAS Build tidak menjalankan prebuild. **Akibatnya app.json kamu tidak lagi menyentuh ikon**: yang dikirim ke Apple adalah PNG di folder `ios`.

Cek dari root proyek:

```bash
sips -g hasAlpha ios/*/Images.xcassets/AppIcon.appiconset/*.png
```

Kalau perintah ini menjawab `yes` untuk ikon 1024, ganti file itu dengan versi solid kamu, dengan nama yang sama. Kalau kamu tidak pernah mengubah kode native secara manual, kamu juga bisa menghapus folder `ios` dan menambahkannya ke `.gitignore`: EAS akan membuatnya ulang di setiap build. Di Solys, TradaZen, dan Nolera, folder ini diabaikan oleh git.

## Format iOS 26: Icon Composer

Icon Composer adalah alat dari Apple untuk ikon Liquid Glass di iOS 26. Alat ini menghasilkan satu file `.icon` dengan beberapa layer. Menurut [panduan Apple tentang Icon Composer](https://developer.apple.com/documentation/xcode/creating-your-app-icon-using-icon-composer), Xcode juga mengambil gambar untuk versi iOS yang lebih lama dari file itu.

Expo mendukungnya sejak SDK 54. Deklarasikan foldernya sebagai teks, jangan di dalam objek varian:

```json
{
  "expo": {
    "ios": {
      "icon": "./assets/app.icon"
    }
  }
}
```

Dalam kasus ini, prebuild menyalin folder tanpa mengubahnya, dan Xcode yang membuat ikon akhirnya. Jadi kamu butuh Xcode 26 atau lebih baru, yaitu yang ada di image EAS terbaru, seperti yang saya jelaskan di panduan tentang [ITMS-90725](https://devoria.fr/id/blog/itms-90725-sdk-version-issue-expo).

Sejak Agustus 2025, di forum developer Apple, beberapa thread melaporkan ITMS-90717 dengan file `.icon`. Dugaan yang dilaporkan: layer PNG transparan, layer yang lebih besar dari kanvas, grup dengan efek Blur di dekat tepi. Solusi sementara yang disebutkan: matikan Blur, pertahankan latar penuh, atau kembali ke PNG. Thread-thread ini tidak memberikan perbaikan resmi dari Apple, dan error ini masih dilaporkan pada Agustus 2026.

[Aturan Apple tentang ikon](https://developer.apple.com/design/human-interface-guidelines/app-icons) sejalan dengan ini: kalau kamu mengimpor layer latar, layer itu harus menutupi seluruh permukaan dan solid. Aplikasi saya masih memakai PNG, jadi saya belum menguji Icon Composer di production. **Kalau file `.icon` memblokir pengirimanmu, kembalikan `ios.icon` ke PNG**: Expo akan meratakannya, dan ikonmu akan lolos pemeriksaan ini.

## Cek ikon di build final

Di dalam IPA, ikon 1024 bukan file PNG: Xcode mengompilasinya ke `Assets.car`. Unduh IPA dari halaman build di expo.dev, lalu jalankan:

```bash
unzip -q MyApp.ipa -d ipa
xcrun assetutil --info ipa/Payload/*.app/Assets.car | grep -B3 '"RenditionName" : "App-Icon'
```

Setiap ikon menampilkan field `Opaque`. Pada 15 Oktober 2026, saya mengompilasi ikon Solys dan ikon uji saya yang sudutnya transparan dengan `actool`, alat dari Xcode. Yang pertama menghasilkan `"Opaque" : true`, yang kedua `"Opaque" : false`. Apple tidak mendokumentasikan field ini: anggap saja sebagai petunjuk, bukan pemeriksaan resmi Apple.

Satu jebakan yang perlu kamu tahu: **jangan uji dengan `sips` PNG kecil yang ada di root aplikasi.** Xcode menulisnya dengan kanal alpha, bahkan kalau sumbernya solid. Dalam pengujian saya dengan ikon Solys, `sips` menjawab `yes` untuk file-file itu.

## Error ikon lainnya

| Kode       | Yang dilaporkan Apple | Petunjuk di Expo      |
| ---------- | --------------------- | --------------------- |
| ITMS-90717 | Ikon 1024 transparan  | Ekspor tanpa alpha    |
| ITMS-90704 | Ikon 1024 tidak ada   | Entri 1024 hilang     |
| ITMS-90022 | Ikon iPhone tidak ada | Katalog tidak lengkap |
| ITMS-90023 | Ikon iPad tidak ada   | Katalog tidak lengkap |

Tiga pesan terakhir kebanyakan muncul di 2017 dan 2018, saat Xcode 9 mengubah aturan ikon.

Di Expo, error ini sudah jarang. Prebuild hanya menulis satu ikon universal 1024, dan Xcode membuat ukuran lainnya. Tanpa ikon yang dideklarasikan pun, Expo membuat persegi putih supaya pengiriman tidak gagal. **Kalau salah satu error ini muncul, periksa folder `ios` yang di-commit**: file `Contents.json` di `AppIcon.appiconset` harus berisi entri berukuran `1024x1024`, dan PNG yang disebutnya harus ada.

## Sebelum pengiriman berikutnya

Ikon bisa diperbaiki dalam sepuluh menit, tapi setiap error menghabiskan satu build. Pemeriksaan otomatis lainnya juga butuh ketelitian yang sama, seperti [ITMS-90683](https://devoria.fr/id/blog/itms-90683-missing-purpose-string-expo) untuk kalimat permintaan izin atau [ITMS-91053](https://devoria.fr/id/blog/itms-91053-missing-api-declaration-expo) untuk privacy manifest. Setelah build diterima, instal lewat [TestFlight](https://devoria.fr/id/blog/testflight-cara-tes-aplikasi-iphone) untuk melihat ikonmu di layar utama.

Penolakan dari reviewer butuh pendekatan yang lebih matang: langkah-langkahnya ada di halaman [aplikasi ditolak Apple](https://devoria.fr/id/expertise/aplikasi-ditolak-apple), dan alasan yang paling sering ada di [kenapa Apple menolak aplikasi](https://devoria.fr/id/blog/aplikasi-ditolak-apple-penyebab-solusi).

Untuk mengecek berkasmu sebelum mengirim, [Review Kit](https://devoria.fr/id/kits/app-review) berisi checklist saya dan skill Claude Code yang membaca ulang proyekmu. Kalau pengirimanmu macet dan kamu ingin dilihat langsung oleh manusia, [pesan satu jam bersama saya](https://devoria.fr/id/coaching): kita bahas proyekmu lewat video call, di layarmu. Dan kalau kamu sedang menyiapkan rilis pertama, [ikuti diagnostik gratis](https://devoria.fr/id/diagnostic): diagnostik ini mengurutkan langkah-langkahnya dan mengirimkan checklist anti-penolakan Apple saya.

## Pertanyaan umum

### Kenapa Apple melihat kanal alpha padahal ikonku sama sekali tidak transparan?

Karena PNG bisa tetap menyimpan kanal alpha meskipun semua pikselnya solid. Banyak alat menambahkannya secara default saat ekspor. Cek dengan `sips -g hasAlpha`, lalu ekspor ulang ikon tanpa kanal itu.

### Bisakah ITMS-90717 diperbaiki dengan update jarak jauh?

Tidak. Ikon dikompilasi ke dalam binary, di `Assets.car`. Update jarak jauh hanya mengubah JavaScript dan aset aplikasi. Perbaiki ikonnya, build ulang, lalu kirim lagi.

### Bolehkah ikon gelap transparan?

Boleh. Apple meminta latar transparan untuk varian gelap, dan Expo mempertahankan transparansinya. Dari situ saya menyimpulkan bahwa pemeriksaan ini menyasar ikon utama, yaitu ikon App Store: ikon itulah yang harus solid.

### Apakah sudut ikon iOS perlu dibulatkan?

Tidak. Berikan persegi penuh: iOS sendiri yang menerapkan masker. Sudut yang membulat menyisakan piksel transparan di pojok, persis hal yang ditolak oleh pemeriksaan ini.

### Apakah Expo mendukung ikon Icon Composer di iOS 26?

Ya, sejak SDK 54: deklarasikan path folder `.icon` di `ios.icon`, sebagai teks. Prebuild menyalinnya apa adanya dan Xcode 26 mengompilasinya. Kalau muncul ITMS-90717 dengan format ini, cek layer transparan dan efek Blur, atau kembali sementara ke PNG.


## Proyekmu

[Review Kit](https://devoria.fr/id/kits/app-review): Checklist review App Store saya, penolakan Apple yang sudah saya perbaiki, checklist Google Play, dan tiga skill Claude Code. Rp 999.000.

[iOS & Android Kit](https://devoria.fr/id/kits/ios): Bikin app iPhone dan Android kamu dengan Claude Code: kode awal dari app-app saya, langkah demi langkah sampai ke store, dan semua kit. Rp 1.999.000.

[Diagnosis: apa yang memisahkanmu dari app iPhone-mu](https://devoria.fr/id/diagnostic): 7 pertanyaan, 60 detik: kamu tahu apa yang benar-benar menghambatmu merilis app iPhone, jalurmu dalam 4 tahap, dan kit yang cocok untukmu.
