# ITMS-90717 แก้ Invalid large app icon ใน Expo

> ITMS-90717 หมายความว่าไอคอน 1024 x 1024 ใน build ของคุณยังมีความโปร่งใสหรือ alpha channel อยู่ ให้ export ไอคอนแบบทึบ ตรวจด้วย sips แล้ว build ใหม่

หน้าต้นฉบับ: [ITMS-90717 แก้ Invalid large app icon ใน Expo](https://devoria.fr/th/blog/itms-90717-invalid-large-app-icon-expo)
ผู้เขียน: [Mehdi Azizi](https://devoria.fr/th/mehdi-azizi)
เผยแพร่: 2026-11-04
แก้ไขเนื้อหาล่าสุด: 2026-11-04


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 เรื่องไอคอน](https://developer.apple.com/documentation/xcode/configuring-your-app-icon) อธิบายไว้ว่า แอปที่เผยแพร่บน App Store ต้องมีไอคอนขนาด 1024 พอยต์อยู่ใน asset catalog

alpha channel คือชั้นที่สี่ของไฟล์ PNG ที่อยู่คู่กับสีแดง เขียว และน้ำเงิน มันเก็บค่าความโปร่งใสของแต่ละพิกเซล **ไอคอนอาจดูทึบเต็มทุกพื้นที่ แต่ยังมี channel นี้ติดอยู่ได้** นี่คือกับดักที่โผล่มาในทุกกระทู้ในฟอรัม

เหมือนข้อผิดพลาด ITMS อื่นๆ นี่ไม่ใช่การปฏิเสธจาก reviewer แต่ Apple วิเคราะห์ไบนารีตอนที่คุณส่งขึ้นไป ขึ้นอยู่กับเครื่องมือที่ใช้ส่ง ข้อผิดพลาดอาจแสดงเป็นการ validate ไม่ผ่าน เช่น ด้วยรหัส 409

## ตรวจไอคอนด้วย sips

บน Mac มี `sips` ติดมาให้อยู่แล้ว ใช้แค่บรรทัดเดียว:

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

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

กับไอคอนทดสอบที่มุมโปร่งใสของผม มุมกลายเป็นสีขาว และบรรทัดสุดท้ายตอบ `no` การแปลงผ่าน JPEG จะบีบอัดภาพเล็กน้อย แม้ใช้คุณภาพสูงสุด ดังนั้นให้ตรวจผลลัพธ์ดีๆ

**3. ImageMagick** ถ้าคุณติดตั้งไว้ คุณเลือกสีพื้นหลังเองได้:

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

ตาม[เอกสารของ ImageMagick](https://imagemagick.org/command-line-options/#alpha) `-alpha remove` จะวางภาพลงบนสีพื้นหลัง และ `-alpha off` จะปิด channel นั้น

ทั้งสามวิธีนี้เติมส่วนที่โปร่งใสด้วยสีพื้นเรียบ ถ้าโลโก้ของคุณลอยอยู่บนพื้นโปร่งใส วิธีที่เรียบร้อยที่สุดคือกลับไปแก้ไฟล์ต้นฉบับแล้ววาดพื้นหลังจริงลงไป Expo ก็ระบุไว้ใน[คู่มือไอคอนแอป](https://docs.expo.dev/develop/user-interface/splash-screen-and-app-icon/) ว่าไอคอนต้องเต็มสี่เหลี่ยมทั้งหมด ไม่มีมุมโค้งและไม่มีพิกเซลโปร่งใส iOS จะใส่ mask ให้เอง

## Expo เอาไอคอนของคุณมาจากไหน และทำอะไรกับมัน

Expo อ่าน `ios.icon` ก่อน แล้วจึงอ่านฟิลด์ `icon` ที่ระดับบนสุดของ config ตาม[เอกสารอ้างอิง config ของ Expo](https://docs.expo.dev/versions/latest/config/app/) `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](https://docs.expo.dev/workflow/continuous-native-generation/) บอกไว้ว่า ถ้าโปรเจกต์ของคุณมีโฟลเดอร์ `android` และ `ios` อยู่ EAS Build จะไม่รัน prebuild **app.json ของคุณจึงไม่มีผลกับไอคอนอีกต่อไป** ไฟล์ PNG ในโฟลเดอร์ `ios` คือสิ่งที่ถูกส่งไปให้ Apple

ตรวจได้จากโฟลเดอร์หลักของโปรเจกต์:

```bash
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](https://developer.apple.com/documentation/xcode/creating-your-app-icon-using-icon-composer) Xcode จะสร้างภาพสำหรับ iOS เวอร์ชันเก่าจากไฟล์นี้ด้วย

Expo รองรับตั้งแต่ SDK 54 คุณประกาศโฟลเดอร์เป็นข้อความ ห้ามใส่ใน object ของตัวแปร:

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

ในกรณีนี้ prebuild จะคัดลอกโฟลเดอร์ไปโดยไม่แตะต้อง และ Xcode เป็นตัวสร้างไอคอนสุดท้าย คุณจึงต้องใช้ Xcode 26 ขึ้นไป ซึ่งเป็นเวอร์ชันที่อยู่ใน image ของ EAS รุ่นใหม่ ตามที่ผมอธิบายไว้ในคู่มือเรื่อง [ITMS-90725](https://devoria.fr/th/blog/itms-90725-sdk-version-issue-expo)

ตั้งแต่เดือนสิงหาคม 2025 มีกระทู้ในฟอรัมนักพัฒนาของ Apple รายงาน ITMS-90717 กับไฟล์ `.icon` สาเหตุที่มีคนพูดถึง: เลเยอร์ PNG ที่โปร่งใส, เลเยอร์ที่ใหญ่กว่าผืนงาน, กลุ่มที่ใช้เอฟเฟกต์ Blur ใกล้ขอบ วิธีเลี่ยงที่มีคนแนะนำ: ปิด Blur, ใช้พื้นหลังทึบ หรือกลับไปใช้ PNG กระทู้เหล่านี้ไม่มีวิธีแก้อย่างเป็นทางการจาก Apple และยังมีคนรายงานข้อผิดพลาดนี้อยู่ในเดือนสิงหาคม 2026

[แนวทางของ Apple เรื่องไอคอน](https://developer.apple.com/design/human-interface-guidelines/app-icons) ก็ไปในทางเดียวกัน: ถ้าคุณนำเข้าเลเยอร์พื้นหลัง มันต้องครอบคลุมพื้นที่ทั้งหมดและต้องทึบ แอปของผมยังใช้ PNG อยู่ ผมจึงยังไม่ได้ทดสอบ Icon Composer ในงานจริง **ถ้าไฟล์ `.icon` ทำให้ส่งไม่ผ่าน ให้เปลี่ยน `ios.icon` กลับไปใช้ PNG** Expo จะแปลงเป็นภาพทึบให้ และไอคอนของคุณจะผ่านการตรวจนี้

## ตรวจไอคอนใน build สุดท้าย

ใน IPA ไอคอน 1024 ไม่ได้เป็นไฟล์ PNG แต่ Xcode คอมไพล์มันไว้ใน `Assets.car` ดาวน์โหลด IPA จากหน้า build บน expo.dev แล้วรัน:

```bash
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](https://devoria.fr/th/blog/itms-90683-missing-purpose-string-expo) สำหรับข้อความขอสิทธิ์ หรือ [ITMS-91053](https://devoria.fr/th/blog/itms-91053-missing-api-declaration-expo) สำหรับ privacy manifest เมื่อ build ผ่านแล้ว ให้ติดตั้งผ่าน [TestFlight](https://devoria.fr/th/blog/testflight-test-iphone-app-before-app-store) เพื่อดูไอคอนบนหน้าโฮมของคุณ

การถูก reviewer ปฏิเสธต้องใช้มุมมองที่กว้างกว่า ขั้นตอนอยู่ในหน้า[แอปถูก Apple ปฏิเสธ](https://devoria.fr/th/expertise/app-rejected-by-apple) และเหตุผลที่พบบ่อยที่สุดอยู่ใน[ทำไม Apple ถึงปฏิเสธแอป](https://devoria.fr/th/blog/apple-app-rejection-reasons-real-cases)

ถ้าอยากตรวจโปรเจกต์ก่อนส่ง [Review Kit](https://devoria.fr/th/kits/app-review) รวม checklist ของผมกับ skills ของ Claude Code ที่ช่วยอ่านทวนโปรเจกต์ของคุณ ถ้าการส่งติดขัดและคุณอยากให้คนช่วยดู [จองเวลาหนึ่งชั่วโมงกับผม](https://devoria.fr/th/coaching) เราจะไล่ดูโปรเจกต์ของคุณผ่านวิดีโอคอลบนหน้าจอของคุณ และถ้าคุณกำลังเตรียมปล่อยแอปแรก [ทำแบบประเมินฟรี](https://devoria.fr/th/diagnostic) ได้เลย มันจะเรียงขั้นตอนให้เป็นลำดับ และส่ง 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 ชั่วคราว


## โปรเจกต์ของคุณ

[Review Kit](https://devoria.fr/th/kits/app-review): เช็กลิสต์รีวิว App Store ของผม การถูก Apple ปฏิเสธที่ผมแก้ไขแล้ว เช็กลิสต์ของ Google Play และ skill ของ Claude Code อีกสามตัว ฿1,849

[iOS & Android Kit](https://devoria.fr/th/kits/ios): สร้างแอป iPhone และ Android ของคุณด้วย Claude Code: โค้ดเริ่มต้นจากแอปของผม เส้นทางจนถึงสโตร์ และชุดคิททั้งหมด ฿3,699

[แบบประเมิน: อะไรกั้นคุณไว้จากแอป iPhone ของคุณ](https://devoria.fr/th/diagnostic): 7 คำถาม 60 วินาที: รู้ว่าอะไรที่ขวางคุณจากการเผยแพร่แอป iPhone จริง ๆ พร้อมเส้นทาง 4 ขั้นตอนและชุดคิทที่เหมาะกับคุณ
