ITMS-90717: mengatasi Invalid large app icon di Expo
Oleh Mehdi Azizi
Terbit , 8 mnt
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.
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 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:
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:
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:
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
Menurut dokumentasi ImageMagick, -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: 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, 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 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:
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, 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:
{
"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.
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 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:
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 untuk kalimat permintaan izin atau ITMS-91053 untuk privacy manifest. Setelah build diterima, instal lewat TestFlight untuk melihat ikonmu di layar utama.
Penolakan dari reviewer butuh pendekatan yang lebih matang: langkah-langkahnya ada di halaman aplikasi ditolak Apple, dan alasan yang paling sering ada di kenapa Apple menolak aplikasi.
Untuk mengecek berkasmu sebelum mengirim, Review Kit 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: kita bahas proyekmu lewat video call, di layarmu. Dan kalau kamu sedang menyiapkan rilis pertama, ikuti diagnostik gratis: 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.

