# ITMS-90717: إصلاح خطأ Invalid large app icon مع Expo

> ITMS-90717 يعني أن أيقونة 1024 x 1024 في الـ build ما زالت تحتوي على شفافية أو قناة ألفا. صدّرها معتمة، وتحقق منها بـ sips، ثم أعد الـ build.

الصفحة الأصلية: [ITMS-90717: إصلاح خطأ Invalid large app icon مع Expo](https://devoria.fr/ar/blog/itms-90717-invalid-large-app-icon-expo)
الكاتب: [Mehdi Azizi](https://devoria.fr/ar/mehdi-azizi)
النشر: 2026-11-04
آخر مراجعة للمحتوى: 2026-11-04


ITMS-90717 فحص تلقائي تجريه Apple على الـ build الخاص بك. يخبرك أن الأيقونة الكبيرة للتطبيق، أي أيقونة 1024 x 1024 بكسل التي يعرضها App Store، تحتوي على شفافية أو على قناة ألفا. **الحل: أيقونة مربعة ومعتمة، مُصدَّرة بلا قناة ألفا، ثم build جديد.**

مع Expo، نادرًا ما يكون ملف PNG الخاص بك هو المذنب: فالـ prebuild يضعه أصلًا على خلفية بيضاء. قرأت هذا الكود في SDK 57 وتحققت من أيقونات Solys وTradaZen وNolera. لذلك يأتي الخطأ في الغالب من مجلد `ios` مُضاف إلى git، أو من ملف Icon Composer. إليك كيف تعرف أيهما، وكيف تصلحه.

## ماذا يعني الخطأ ITMS-90717؟

عنوان الرسالة هو "ITMS-90717: Invalid large app icon". وتوضح أن الأيقونة الكبيرة في كتالوج صور تطبيقك "can't be transparent or contain an alpha channel": أي لا يجوز أن تكون شفافة، ولا أن تحتوي على قناة ألفا. الرسائل القديمة كانت تتحدث عن "Invalid App Store Icon". إنها القاعدة نفسها.

هذه الأيقونة الكبيرة هي أيقونة App Store. وتشرح ذلك [وثائق Xcode حول الأيقونات](https://developer.apple.com/documentation/xcode/configuring-your-app-icon): التطبيق الموزَّع على App Store يجب أن يوفر أيقونته بحجم 1024 نقطة في كتالوج صوره.

قناة ألفا هي الطبقة الرابعة في ملف PNG، بجانب الأحمر والأخضر والأزرق. تخزّن شفافية كل بكسل. **قد تبدو الأيقونة ممتلئة تمامًا وتحتفظ مع ذلك بهذه القناة**: هذا هو الفخ الذي يتكرر في كل نقاشات المنتديات.

مثل أخطاء ITMS الأخرى، هذا ليس رفضًا من مراجع. Apple حلّلت الملف الثنائي عند التسليم. وحسب أداة الرفع، يظهر الخطأ كفشل في التحقق، مثلًا بالرمز 409.

## تحقق من أيقونتك باستخدام sips

على Mac، الأداة `sips` مثبتة مسبقًا. يكفيك سطر واحد:

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

النتيجة التي تريدها هي `hasAlpha: no`. في 15 أكتوبر 2026، شغّلت هذا الأمر على الأيقونات المعرّفة في ملفات app.json الخاصة بـ Solys وTradaZen وNolera: كلها أجابت `no`، بحجم 1024 x 1024.

صنعت أيضًا أيقونة تجريبية: مربع أزرق معتم بالكامل، لكنه محفوظ مع قناة ألفا. أجابت `sips` بـ `yes`. **لا يوجد أي بكسل شفاف، ومع ذلك القناة موجودة.** لهذا يكتب كثير من المطورين "أيقونتي لا تحتوي على أي شفافية" تحت هذه الرسالة.

في تطبيق Preview، يعرض المفتش (Tools، ثم Show Inspector) أيضًا خصائص الصورة، ومنها قناة ألفا.

## الإصلاح: صدّر الأيقونة بلا قناة ألفا

ثلاث طرق، من الأبسط إلى الأدق.

**1. Preview.** اختر File، ثم Export، بصيغة PNG، ثم ألغِ تحديد خانة Alpha. الملف المُصدَّر لن يحتوي بعدها على قناة ألفا.

**2. sips، دون تثبيت أي شيء.** الأداة `sips` لا تزيل قناة ألفا من ملف PNG. عليك المرور بصيغة JPEG، التي لا تحتوي عليها:

```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` يعطّل القناة.

هذه الطرق الثلاث تملأ الشفافية بلون واحد. إن كان شعارك يطفو على خلفية شفافة، فالأنظف أن تعود إلى الملف المصدر وترسم فيه خلفية حقيقية. هذا ما يطلبه Expo في [دليل أيقونة التطبيق](https://docs.expo.dev/develop/user-interface/splash-screen-and-app-icon/): يجب أن تملأ الأيقونة المربع كله، بلا زوايا مستديرة ولا بكسلات شفافة. iOS يطبّق القناع بنفسه.

## من أين يأخذ Expo أيقونتك، وماذا يفعل بها

يقرأ Expo أولًا `ios.icon`، ثم الحقل `icon` في جذر الإعدادات. حسب [مرجع إعدادات Expo](https://docs.expo.dev/versions/latest/config/app/)، يقبل `ios.icon` ثلاثة أشكال: ملف PNG، أو كائنًا فيه المتغيرات `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` في git        | لا يُعاد تشغيل الـ prebuild | حقيقي          |

**مع ملف PNG، يزيل Expo الشفافية بنفسه ويستبدلها بالأبيض.** لذلك ينتهي الشعار المقصوص فوق مربع أبيض: لا خطأ، لكن الشكل قد لا يكون ما أردته. أما المتغير الداكن فيحتفظ بشفافيته، وهذا مقصود: Apple تطلب خلفية شفافة للأيقونة الداكنة، كي تظهر الخلفية التي يوفرها النظام.

في Nolera، الذي يعرّف المتغيرات الثلاثة، أجابت `sips` بـ `no` للأيقونة الفاتحة والملوّنة المولّدتين، و`yes` للداكنة. حسب تاريخ الـ commit الخاص بهذه المتغيرات، فإن الإصدار 1.0.2 المنشور يتضمنها. لم أتحقق من ذلك داخل ملف IPA الخاص به.

### حالة مجلد ios المُضاف إلى git

هذا هو السبب الأرجح مع Expo. تقول ذلك [صفحة Expo عن التوليد الأصلي المستمر](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، استبدل هذا الملف بنسختك المعتمة، بالاسم نفسه. وإن لم تجرِ أي تعديل أصلي يدويًا، يمكنك أيضًا حذف مجلد `ios` وإضافته إلى `.gitignore`: سيعيد EAS توليده مع كل build. في Solys وTradaZen وNolera، هذا المجلد يتجاهله git.

## صيغة 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. تعرّف المجلد كنص، وليس أبدًا داخل كائن المتغيرات:

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

في هذه الحالة، ينسخ الـ prebuild المجلد دون أن يلمسه، وXcode هو من يصنع الأيقونة النهائية. لذلك تحتاج Xcode 26 أو أحدث، وهو المستخدم في صور EAS الحديثة، كما أشرح في الدليل الخاص بـ [ITMS-90725](https://devoria.fr/ar/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، جمّعت باستخدام `actool`، أداة Xcode، أيقونة Solys وأيقونتي التجريبية ذات الزوايا الشفافة. الأولى خرجت بـ `"Opaque" : true`، والثانية بـ `"Opaque" : false`. لا توثّق Apple هذا الحقل: اعتبره مؤشرًا، لا فحص Apple نفسه.

فخ يجب أن تعرفه: **لا تختبر بـ `sips` ملفات PNG الصغيرة الموجودة في جذر التطبيق.** Xcode يكتبها مع قناة ألفا، حتى عندما يكون المصدر معتمًا. في اختباري مع أيقونة Solys، أجابت `sips` بـ `yes` لها.

## أخطاء الأيقونات الأخرى

| الرمز      | ما تشير إليه Apple  | الحل المحتمل مع Expo |
| ---------- | ------------------- | -------------------- |
| ITMS-90717 | أيقونة 1024 شفافة   | التصدير بلا ألفا     |
| ITMS-90704 | أيقونة 1024 غائبة   | مدخل 1024 ناقص       |
| ITMS-90022 | أيقونة iPhone غائبة | كتالوج غير مكتمل     |
| ITMS-90023 | أيقونة iPad غائبة   | كتالوج غير مكتمل     |

الرسائل الثلاث الأخيرة تعود في الغالب إلى 2017 و2018، حين غيّر Xcode 9 قواعد الأيقونات.

مع Expo، أصبحت نادرة. الـ prebuild يكتب أيقونة شاملة واحدة بحجم 1024، وXcode يولّد بقية الأحجام. وإن لم تعرّف أي أيقونة، ينشئ Expo مربعًا أبيض، لتجنب الفشل عند الرفع. **إن ظهر أحد هذه الأخطاء، افحص مجلد `ios` المُضاف إلى git**: يجب أن يحتوي ملف `Contents.json` في `AppIcon.appiconset` على مدخل بحجم `1024x1024`، وأن يكون ملف PNG المذكور فيه موجودًا.

## قبل رفعك القادم

تصحيح الأيقونة يأخذ عشر دقائق، لكن كل خطأ يكلّفك build. الفحوص التلقائية الأخرى تتطلب الصرامة نفسها، مثل [ITMS-90683](https://devoria.fr/ar/blog/itms-90683-missing-purpose-string-expo) لنصوص طلب الأذونات، أو [ITMS-91053](https://devoria.fr/ar/blog/itms-91053-missing-api-declaration-expo) لملف الخصوصية. وبعد قبول الـ build، ثبّته عبر [TestFlight](https://devoria.fr/ar/blog/testflight-test-iphone-app-before-submission) لترى أيقونتك على شاشتك الرئيسية.

أما الرفض من مراجع فيتطلب تأنيًا أكبر: الخطوات موجودة في صفحة [تطبيق رفضته Apple](https://devoria.fr/ar/expertise/app-rejected-by-apple)، وأكثر الأسباب شيوعًا في [لماذا ترفض Apple تطبيقًا](https://devoria.fr/ar/blog/apple-app-rejection-reasons-real-cases).

للتحقق من ملفك قبل الرفع، يجمع [Review Kit](https://devoria.fr/ar/kits/app-review) قائمة التحقق الخاصة بي وskills لـ Claude Code تراجع مشروعك. وإن تعثّر رفعك وأردت نظرة بشرية، [احجز ساعة معي](https://devoria.fr/ar/coaching): نراجع مشروعك عبر مكالمة فيديو، على شاشتك. وإن كنت تحضّر إطلاقك الأول، [أجرِ التشخيص المجاني](https://devoria.fr/ar/diagnostic): يرتّب لك الخطوات ويرسل إليك قائمتي لتجنب رفض Apple.

## الأسئلة الشائعة

### لماذا ترى Apple قناة ألفا رغم أن أيقونتي بلا أي شفافية؟

لأن ملف PNG قد يحتفظ بقناة ألفا حتى عندما تكون كل بكسلاته معتمة. كثير من الأدوات تضيفها افتراضيًا عند التصدير. تحقق باستخدام `sips -g hasAlpha`، ثم أعد تصدير الأيقونة بلا هذه القناة.

### هل يمكن إصلاح ITMS-90717 بتحديث عن بُعد؟

لا. الأيقونة مجمّعة داخل الملف الثنائي، في `Assets.car`. التحديث عن بُعد لا يغيّر إلا JavaScript وموارد التطبيق. أصلح الأيقونة، وأعد الـ build، ثم أرسله من جديد.

### هل يمكن أن تكون الأيقونة الداكنة شفافة؟

نعم. Apple تطلب خلفية شفافة للمتغير الداكن، وExpo يحتفظ بشفافيته. أستنتج من ذلك أن الفحص يستهدف الأيقونة الرئيسية، أيقونة App Store: هي التي يجب أن تكون معتمة.

### هل يجب أن أجعل زوايا أيقونة iOS مستديرة؟

لا. قدّم مربعًا ممتلئًا: iOS يطبّق القناع بنفسه. الزوايا المستديرة تترك بكسلات شفافة في الأركان، وهذا بالضبط ما يرفضه هذا الفحص.

### هل يدعم Expo أيقونات Icon Composer في iOS 26؟

نعم، منذ SDK 54: عرّف مسار مجلد `.icon` في `ios.icon`، كنص. الـ prebuild ينسخه كما هو وXcode 26 يجمّعه. إن ظهر ITMS-90717 مع هذه الصيغة، افحص الطبقات الشفافة وتأثير Blur، أو عُد مؤقتًا إلى PNG.


## مشروعك

[Review Kit](https://devoria.fr/ar/kits/app-review): قائمة التحقق التي أستخدمها لمراجعة App Store، وحالات رفض Apple التي واجهتها مع حلولها، وقائمة Google Play، وثلاث skills لـ Claude Code. ‏55 ⁦US$⁩.

[iOS & Android Kit](https://devoria.fr/ar/kits/ios): أنشئ تطبيقك لـ iPhone وAndroid باستخدام Claude Code: الكود الأساسي لتطبيقاتي، والمسار الكامل حتى النشر في المتاجر، وكل الحزم. ‏109 ⁦US$⁩.

[تشخيص: ما الذي يفصلك عن تطبيقك على iPhone](https://devoria.fr/ar/diagnostic): 7 أسئلة في 60 ثانية: تعرف ما الذي يعيقك فعلًا عن نشر تطبيقك على iPhone، ومسارك في 4 مراحل، والكيت المناسب لك.
