ITMS-90717 แก้ Invalid large app icon ใน Expo
โดย Mehdi Azizi
เผยแพร่เมื่อ , 8 นาที
ITMS-90717 หมายความว่าไอคอน 1024 x 1024 ใน build ของคุณยังมีความโปร่งใสหรือ alpha channel อยู่ ให้ export ไอคอนแบบทึบ ตรวจด้วย sips แล้ว build ใหม่
ITMS-90717 คือการตรวจสอบอัตโนมัติของ Apple ที่ทำกับ build ของคุณ ข้อความนี้บอกว่าไอคอนใหญ่ของแอป ซึ่งก็คือไอคอนขนาด 1024 x 1024 พิกเซลที่แสดงบน App Store มีความโปร่งใสหรือมี alpha channel อยู่ วิธีแก้: ใช้ไอคอนสี่เหลี่ยมจัตุรัสแบบทึบ export โดยไม่มี alpha channel แล้ว build ใหม่
ถ้าคุณใช้ Expo ไฟล์ PNG ของคุณแทบไม่ใช่ตัวการ เพราะ prebuild จะวางไอคอนลงบนพื้นสีขาวให้อยู่แล้ว ผมอ่านโค้ดส่วนนี้ใน SDK 57 และตรวจไอคอนของ Solys, TradaZen และ Nolera มาแล้ว ปัญหาส่วนใหญ่จึงมาจากโฟลเดอร์ ios ที่ถูก commit ไว้ใน git หรือจากไฟล์ Icon Composer บทความนี้จะพาคุณหาว่าเป็นตัวไหน แล้วแก้ให้เรียบร้อย
ข้อผิดพลาด ITMS-90717 หมายความว่าอะไร?
ข้อความมีหัวเรื่องว่า "ITMS-90717: Invalid large app icon" และระบุว่าไอคอนใหญ่ใน asset catalog ของแอป "can't be transparent or contain an alpha channel" คือห้ามโปร่งใสและห้ามมี alpha channel ข้อความรุ่นเก่าจะเขียนว่า "Invalid App Store Icon" แต่เป็นกฎเดียวกัน
ไอคอนใหญ่นี้คือไอคอนที่ใช้บน App Store เอกสารของ Xcode เรื่องไอคอน อธิบายไว้ว่า แอปที่เผยแพร่บน App Store ต้องมีไอคอนขนาด 1024 พอยต์อยู่ใน asset catalog
alpha channel คือชั้นที่สี่ของไฟล์ PNG ที่อยู่คู่กับสีแดง เขียว และน้ำเงิน มันเก็บค่าความโปร่งใสของแต่ละพิกเซล ไอคอนอาจดูทึบเต็มทุกพื้นที่ แต่ยังมี channel นี้ติดอยู่ได้ นี่คือกับดักที่โผล่มาในทุกกระทู้ในฟอรัม
เหมือนข้อผิดพลาด ITMS อื่นๆ นี่ไม่ใช่การปฏิเสธจาก reviewer แต่ Apple วิเคราะห์ไบนารีตอนที่คุณส่งขึ้นไป ขึ้นอยู่กับเครื่องมือที่ใช้ส่ง ข้อผิดพลาดอาจแสดงเป็นการ validate ไม่ผ่าน เช่น ด้วยรหัส 409
ตรวจไอคอนด้วย sips
บน Mac มี sips ติดมาให้อยู่แล้ว ใช้แค่บรรทัดเดียว:
sips -g hasAlpha assets/icon.png
ผลที่คุณอยากเห็นคือ hasAlpha: no วันที่ 15 ตุลาคม 2026 ผมรันคำสั่งนี้กับไอคอนที่ประกาศไว้ใน app.json ของ Solys, TradaZen และ Nolera ทุกตัวตอบ no และมีขนาด 1024 x 1024
ผมยังทำไอคอนทดสอบขึ้นมาหนึ่งอัน: สี่เหลี่ยมสีน้ำเงินทึบทั้งหมด แต่บันทึกพร้อม alpha channel ผลคือ sips ตอบ yes ไม่มีพิกเซลไหนโปร่งใสเลย แต่ channel นั้นยังอยู่ นี่คือเหตุผลที่นักพัฒนาจำนวนมากเขียนใต้ข้อความนี้ว่า "ไอคอนของผมไม่มีความโปร่งใสเลยนะ"
ใน Preview หน้าต่าง Inspector (Tools, Show Inspector) ก็แสดงคุณสมบัติของภาพ รวมถึง alpha channel ด้วย
วิธีแก้: export ไอคอนโดยไม่มี alpha channel
มีสามวิธี เรียงจากง่ายที่สุดไปถึงละเอียดที่สุด
1. Preview ไปที่ File, Export เลือกฟอร์แมต PNG แล้วเอาเครื่องหมายช่อง Alpha ออก ไฟล์ที่ export ออกมาจะไม่มี alpha channel อีก
2. sips โดยไม่ต้องติดตั้งอะไรเพิ่ม sips ลบ alpha channel ออกจาก PNG โดยตรงไม่ได้ ต้องแปลงผ่าน JPEG ซึ่งไม่มี alpha channel:
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
กับไอคอนทดสอบที่มุมโปร่งใสของผม มุมกลายเป็นสีขาว และบรรทัดสุดท้ายตอบ no การแปลงผ่าน JPEG จะบีบอัดภาพเล็กน้อย แม้ใช้คุณภาพสูงสุด ดังนั้นให้ตรวจผลลัพธ์ดีๆ
3. ImageMagick ถ้าคุณติดตั้งไว้ คุณเลือกสีพื้นหลังเองได้:
magick icon.png -background white -alpha remove -alpha off icon-opaque.png
ตามเอกสารของ ImageMagick -alpha remove จะวางภาพลงบนสีพื้นหลัง และ -alpha off จะปิด channel นั้น
ทั้งสามวิธีนี้เติมส่วนที่โปร่งใสด้วยสีพื้นเรียบ ถ้าโลโก้ของคุณลอยอยู่บนพื้นโปร่งใส วิธีที่เรียบร้อยที่สุดคือกลับไปแก้ไฟล์ต้นฉบับแล้ววาดพื้นหลังจริงลงไป Expo ก็ระบุไว้ในคู่มือไอคอนแอป ว่าไอคอนต้องเต็มสี่เหลี่ยมทั้งหมด ไม่มีมุมโค้งและไม่มีพิกเซลโปร่งใส iOS จะใส่ mask ให้เอง
Expo เอาไอคอนของคุณมาจากไหน และทำอะไรกับมัน
Expo อ่าน ios.icon ก่อน แล้วจึงอ่านฟิลด์ icon ที่ระดับบนสุดของ config ตามเอกสารอ้างอิง config ของ Expo ios.icon รับได้สามแบบ: ไฟล์ PNG, object ที่มีตัวแปร light, dark และ tinted หรือโฟลเดอร์ .icon ที่สร้างด้วย Icon Composer
ตารางนี้มาจากโค้ดที่สร้างไอคอน iOS ตอน prebuild คือ @expo/prebuild-config 57.0.16 (SDK 57) ซึ่งผมอ่านเมื่อวันที่ 15 ตุลาคม 2026:
| สิ่งที่คุณประกาศ | สิ่งที่ prebuild ทำ | ความเสี่ยง ITMS-90717 |
|---|---|---|
icon เป็น PNG | วางลงบนพื้นสีขาว | ต่ำ |
ios.icon.light | วางลงบนพื้นสีขาว | ต่ำ |
ios.icon.tinted | วางลงบนพื้นสีขาว | ต่ำ |
ios.icon.dark | เก็บความโปร่งใสไว้ | Apple ต้องการแบบนี้ |
ios.icon เป็น .icon | คัดลอกไปตามเดิม | มีจริง |
โฟลเดอร์ ios ที่ commit ไว้ | ไม่รัน prebuild ใหม่ | มีจริง |
ถ้าใช้ PNG, Expo จะลบความโปร่งใสออกเองและแทนที่ด้วยสีขาว โลโก้ที่ตัดพื้นหลังออกจึงไปจบบนสี่เหลี่ยมสีขาว ไม่มี error แต่หน้าตาอาจไม่ใช่สิ่งที่คุณตั้งใจ ส่วนตัวแปรแบบมืดจะเก็บความโปร่งใสไว้ และนั่นตั้งใจ: Apple ต้องการพื้นโปร่งใสสำหรับไอคอนแบบมืด เพื่อให้พื้นหลังที่ระบบใส่ให้แสดงออกมา
บน Nolera ซึ่งประกาศครบทั้งสามตัวแปร sips ตอบ no สำหรับไอคอนแบบสว่างและแบบ tinted ที่สร้างขึ้น และตอบ yes สำหรับแบบมืด จากวันที่ของ commit ที่เพิ่มตัวแปรเหล่านี้ เวอร์ชัน 1.0.2 ที่อยู่บนสโตร์ตอนนี้น่าจะมีไอคอนเหล่านี้อยู่ แต่ผมยังไม่ได้ตรวจใน IPA ของมัน
กรณีโฟลเดอร์ ios ที่ commit ไว้
นี่คือสาเหตุที่น่าจะเป็นมากที่สุดเมื่อใช้ Expo หน้าของ Expo เรื่อง continuous native generation บอกไว้ว่า ถ้าโปรเจกต์ของคุณมีโฟลเดอร์ android และ ios อยู่ EAS Build จะไม่รัน prebuild app.json ของคุณจึงไม่มีผลกับไอคอนอีกต่อไป ไฟล์ PNG ในโฟลเดอร์ ios คือสิ่งที่ถูกส่งไปให้ Apple
ตรวจได้จากโฟลเดอร์หลักของโปรเจกต์:
sips -g hasAlpha ios/*/Images.xcassets/AppIcon.appiconset/*.png
ถ้าคำสั่งตอบ yes สำหรับไอคอน 1024 ให้แทนที่ไฟล์นั้นด้วยเวอร์ชันทึบของคุณ โดยใช้ชื่อเดิม ถ้าคุณไม่เคยแก้ไขโค้ด native ด้วยมือเลย คุณจะลบโฟลเดอร์ ios แล้วเพิ่มลงใน .gitignore ก็ได้ EAS จะสร้างใหม่ทุกครั้งที่ build บน Solys, TradaZen และ Nolera โฟลเดอร์นี้ถูก git ignore ไว้
ฟอร์แมตของ iOS 26: Icon Composer
Icon Composer คือเครื่องมือของ Apple สำหรับไอคอน Liquid Glass ของ iOS 26 มันสร้างไฟล์ .icon ไฟล์เดียวที่มีหลายเลเยอร์ ตามคู่มือของ Apple เรื่อง Icon Composer Xcode จะสร้างภาพสำหรับ iOS เวอร์ชันเก่าจากไฟล์นี้ด้วย
Expo รองรับตั้งแต่ SDK 54 คุณประกาศโฟลเดอร์เป็นข้อความ ห้ามใส่ใน object ของตัวแปร:
{
"expo": {
"ios": {
"icon": "./assets/app.icon"
}
}
}
ในกรณีนี้ prebuild จะคัดลอกโฟลเดอร์ไปโดยไม่แตะต้อง และ Xcode เป็นตัวสร้างไอคอนสุดท้าย คุณจึงต้องใช้ Xcode 26 ขึ้นไป ซึ่งเป็นเวอร์ชันที่อยู่ใน image ของ EAS รุ่นใหม่ ตามที่ผมอธิบายไว้ในคู่มือเรื่อง ITMS-90725
ตั้งแต่เดือนสิงหาคม 2025 มีกระทู้ในฟอรัมนักพัฒนาของ Apple รายงาน ITMS-90717 กับไฟล์ .icon สาเหตุที่มีคนพูดถึง: เลเยอร์ PNG ที่โปร่งใส, เลเยอร์ที่ใหญ่กว่าผืนงาน, กลุ่มที่ใช้เอฟเฟกต์ Blur ใกล้ขอบ วิธีเลี่ยงที่มีคนแนะนำ: ปิด Blur, ใช้พื้นหลังทึบ หรือกลับไปใช้ PNG กระทู้เหล่านี้ไม่มีวิธีแก้อย่างเป็นทางการจาก Apple และยังมีคนรายงานข้อผิดพลาดนี้อยู่ในเดือนสิงหาคม 2026
แนวทางของ Apple เรื่องไอคอน ก็ไปในทางเดียวกัน: ถ้าคุณนำเข้าเลเยอร์พื้นหลัง มันต้องครอบคลุมพื้นที่ทั้งหมดและต้องทึบ แอปของผมยังใช้ PNG อยู่ ผมจึงยังไม่ได้ทดสอบ Icon Composer ในงานจริง ถ้าไฟล์ .icon ทำให้ส่งไม่ผ่าน ให้เปลี่ยน ios.icon กลับไปใช้ PNG Expo จะแปลงเป็นภาพทึบให้ และไอคอนของคุณจะผ่านการตรวจนี้
ตรวจไอคอนใน build สุดท้าย
ใน IPA ไอคอน 1024 ไม่ได้เป็นไฟล์ PNG แต่ Xcode คอมไพล์มันไว้ใน Assets.car ดาวน์โหลด IPA จากหน้า build บน expo.dev แล้วรัน:
unzip -q MyApp.ipa -d ipa
xcrun assetutil --info ipa/Payload/*.app/Assets.car | grep -B3 '"RenditionName" : "App-Icon'
ไอคอนแต่ละตัวจะแสดงฟิลด์ Opaque วันที่ 15 ตุลาคม 2026 ผมคอมไพล์ไอคอนของ Solys และไอคอนทดสอบที่มุมโปร่งใสด้วย actool ซึ่งเป็นเครื่องมือของ Xcode ตัวแรกออกมาเป็น "Opaque" : true ตัวที่สองเป็น "Opaque" : false Apple ไม่ได้มีเอกสารเรื่องฟิลด์นี้ ให้ถือว่าเป็นแค่เบาะแส ไม่ใช่การตรวจแบบเดียวกับของ Apple
มีกับดักหนึ่งที่ควรรู้: อย่าใช้ sips ตรวจไฟล์ PNG ขนาดเล็กที่อยู่ระดับบนสุดของแอป Xcode เขียนไฟล์เหล่านี้พร้อม alpha channel แม้ต้นฉบับจะทึบก็ตาม ในการทดสอบของผมกับไอคอนของ Solys sips ตอบ yes สำหรับไฟล์เหล่านี้
ข้อผิดพลาดอื่นๆ เกี่ยวกับไอคอน
| รหัส | สิ่งที่ Apple แจ้ง | แนวทางกับ Expo |
|---|---|---|
| ITMS-90717 | ไอคอน 1024 โปร่งใส | export โดยไม่มี alpha |
| ITMS-90704 | ไม่มีไอคอน 1024 | ขาดรายการ 1024 |
| ITMS-90022 | ไม่มีไอคอน iPhone | catalog ไม่ครบ |
| ITMS-90023 | ไม่มีไอคอน iPad | catalog ไม่ครบ |
สามข้อความหลังส่วนใหญ่มีย้อนไปช่วงปี 2017 และ 2018 ตอนที่ Xcode 9 เปลี่ยนกฎเรื่องไอคอน
กับ Expo ข้อผิดพลาดเหล่านี้เจอได้ยากแล้ว prebuild เขียนไอคอน universal ขนาด 1024 แค่ตัวเดียว แล้ว Xcode สร้างขนาดอื่นๆ ให้ ถ้าไม่ได้ประกาศไอคอนไว้เลย Expo ยังสร้างสี่เหลี่ยมสีขาวให้ด้วย เพื่อไม่ให้ส่งไม่ผ่าน ถ้าเจอข้อผิดพลาดตัวใดตัวหนึ่งเหล่านี้ ให้ดูที่โฟลเดอร์ ios ที่ commit ไว้ ไฟล์ Contents.json ของ AppIcon.appiconset ต้องมีรายการขนาด 1024x1024 และไฟล์ PNG ที่รายการนั้นอ้างถึงต้องมีอยู่จริง
ก่อนส่งครั้งถัดไป
ไอคอนแก้ได้ในสิบนาที แต่ทุกครั้งที่ผิดพลาดก็เสีย build ไปหนึ่งรอบ การตรวจอัตโนมัติอื่นๆ ก็ต้องใส่ใจแบบเดียวกัน เช่น ITMS-90683 สำหรับข้อความขอสิทธิ์ หรือ ITMS-91053 สำหรับ privacy manifest เมื่อ build ผ่านแล้ว ให้ติดตั้งผ่าน TestFlight เพื่อดูไอคอนบนหน้าโฮมของคุณ
การถูก reviewer ปฏิเสธต้องใช้มุมมองที่กว้างกว่า ขั้นตอนอยู่ในหน้าแอปถูก Apple ปฏิเสธ และเหตุผลที่พบบ่อยที่สุดอยู่ในทำไม Apple ถึงปฏิเสธแอป
ถ้าอยากตรวจโปรเจกต์ก่อนส่ง Review Kit รวม checklist ของผมกับ skills ของ Claude Code ที่ช่วยอ่านทวนโปรเจกต์ของคุณ ถ้าการส่งติดขัดและคุณอยากให้คนช่วยดู จองเวลาหนึ่งชั่วโมงกับผม เราจะไล่ดูโปรเจกต์ของคุณผ่านวิดีโอคอลบนหน้าจอของคุณ และถ้าคุณกำลังเตรียมปล่อยแอปแรก ทำแบบประเมินฟรี ได้เลย มันจะเรียงขั้นตอนให้เป็นลำดับ และส่ง checklist กันโดน Apple ปฏิเสธของผมให้คุณ
คำถามที่พบบ่อย
ทำไม Apple ถึงเจอ alpha channel ทั้งที่ไอคอนของฉันไม่มีส่วนโปร่งใสเลย?
เพราะไฟล์ PNG อาจมี alpha channel ติดอยู่ แม้ทุกพิกเซลจะทึบ เครื่องมือหลายตัวใส่ channel นี้ให้โดยอัตโนมัติตอน export ตรวจด้วย sips -g hasAlpha แล้ว export ไอคอนใหม่โดยไม่มี channel นี้
แก้ ITMS-90717 ด้วยการอัปเดตแบบ remote ได้ไหม?
ไม่ได้ ไอคอนถูกคอมไพล์อยู่ในไบนารี ใน Assets.car การอัปเดตแบบ remote เปลี่ยนได้แค่ JavaScript และ resource ของแอป ให้แก้ไอคอน build ใหม่ แล้วส่งอีกครั้ง
ไอคอนแบบมืดโปร่งใสได้ไหม?
ได้ Apple ต้องการพื้นโปร่งใสสำหรับตัวแปรแบบมืด และ Expo ก็เก็บความโปร่งใสไว้ ผมจึงสรุปว่าการตรวจนี้มุ่งที่ไอคอนหลัก ซึ่งเป็นไอคอนของ App Store ตัวนั้นต้องทึบ
ต้องทำมุมโค้งให้ไอคอน iOS ไหม?
ไม่ต้อง ให้ใช้สี่เหลี่ยมเต็มๆ iOS จะใส่ mask ให้เอง มุมโค้งจะทิ้งพิกเซลโปร่งใสไว้ที่มุม ซึ่งเป็นสิ่งที่การตรวจนี้ไม่ยอมรับพอดี
Expo รองรับไอคอน Icon Composer ของ iOS 26 ไหม?
รองรับ ตั้งแต่ SDK 54: ประกาศ path ของโฟลเดอร์ .icon ใน ios.icon เป็นข้อความ prebuild จะคัดลอกไปตามเดิม และ Xcode 26 จะคอมไพล์ให้ ถ้าเจอ ITMS-90717 กับฟอร์แมตนี้ ให้ตรวจเลเยอร์ที่โปร่งใสและเอฟเฟกต์ Blur หรือกลับไปใช้ PNG ชั่วคราว

