# الإرشاد 2.5.4: رفض Apple لوضع الخلفية في تطبيقك

> الإرشاد 2.5.4: ترفض Apple أي وضع خلفية مُعلَن لا تستخدمه ميزة في التطبيق. احذف المفتاح أو اعرض على المراجع الصوت أو الموقع أو المكالمة.

الصفحة الأصلية: [الإرشاد 2.5.4: رفض Apple لوضع الخلفية في تطبيقك](https://devoria.fr/ar/blog/guideline-2-5-4-background-mode-rejected-apple)
الكاتب: [Mehdi Azizi](https://devoria.fr/ar/mehdi-azizi)
النشر: 2026-11-04
آخر مراجعة للمحتوى: 2026-11-04


الإرشاد 2.5.4 يحصر أوضاع الخلفية في استخدامها المقصود: الصوت، الموقع، مكالمات VoIP، إكمال المهام، الإشعارات المحلية. يأتي الرفض عندما يُعلن ملف Info.plist أحد هذه الأوضاع ولا يجد المراجع أي ميزة تحتاج إليه. **احذف المفتاح إن لم يكن هناك ما يستخدمه، وإلا فاعرض الميزة على المراجع في ثلاثين ثانية.**

أنشر تطبيقات iOS الخاصة بي باستخدام Expo. تطبيق Solys، منبّهي الذي يحتوي على ألعاب مصغّرة، يُعلن وضع الصوت: حذفته، ثم أعدته لسبب آخر. يعتمد هذا الدليل على نص Apple، وعلى حالات رفض نشرها مطوّرون آخرون، وعلى مشاريعي. لنظرة شاملة على أسباب الرفض، اقرأ [لماذا ترفض Apple تطبيقًا](https://devoria.fr/ar/blog/apple-app-rejection-reasons-real-cases).

## ماذا يقول الإرشاد 2.5.4؟

القاعدة جملة واحدة، في القسم 2 «Performance»، الجزء 2.5 «Software Requirements»، من [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#2.5.4): «Multitasking apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc.»

بعبارة بسيطة: خدمة الخلفية لا تُستخدم إلا لما وُجدت من أجله. ومن هنا العنوان «Guideline 2.5.4 - Performance - Software Requirements».

افتراضيًا، يتوقف التطبيق مؤقتًا عند انتقاله إلى الخلفية. ليستمر في العمل، يُعلن وضعًا أو أكثر في المفتاح `UIBackgroundModes` في ملف Info.plist. تطلب [وثائق Apple حول أوضاع الخلفية](https://developer.apple.com/documentation/xcode/configuring-background-execution-modes) استخدامها باعتدال بسبب البطارية، وتفضيل حل آخر حين يوجد. **كل وضع مُعلَن هو وعد يستطيع المراجع التحقق منه.**

## أوضاع الخلفية واستخدامها المقصود

| الوضع               | المفتاح               | الاستخدام المقصود    |
| ------------------- | --------------------- | -------------------- |
| الصوت، AirPlay، PiP | `audio`               | صوت مسموع في الخلفية |
| الموقع              | `location`            | موقع مستمر           |
| الصوت عبر IP        | `voip`                | مكالمات مع CallKit   |
| الجلب               | `fetch`               | محتوى شبكة منتظم     |
| المعالجة            | `processing`          | مهام مجدولة          |
| الإشعارات البعيدة   | `remote-notification` | إشعار بمحتوى جديد    |

يلخّص هذا الجدول صفحة Apple. في حالات الرفض المنشورة على المنتديات، تتكرر `audio` و`location` و`voip` أكثر من غيرها.

## ماذا تعني رسالة الرفض 2.5.4؟

تذكر الرسالة الوضع المعني. مثالان نشرهما مطوّرون على منتديات Apple:

- **الصوت**: «Your app still declares support for audio in the UIBackgroundModes key in your Info.plist but did not include features that require persistent audio.» وتوضح بقية الرسالة أن المفتاح `audio` مخصّص للتطبيقات التي تُسمِع محتوى في الخلفية، مثل مشغّل الموسيقى. وتقترح مخرجين: إضافة هذا المحتوى أو حذف المفتاح ([موضوع المنتدى](https://developer.apple.com/forums/thread/95216)).
- **الموقع**: في [موضوع من ديسمبر 2024](https://developer.apple.com/forums/thread/771202)، لم تجد Apple أي ميزة غير تتبّع الموظفين تتطلب موقعًا دائمًا، وكتبت أن هذا الاستخدام وحده غير مناسب.

قراءتي: **المراجع لا يقرأ الكود، بل يبحث عن ميزة.** يجب أن يستطيع تشغيلها، ونقل التطبيق إلى الخلفية، والتأكد من أنه يستمر في العمل.

الحالة المعاكسة موجودة أيضًا. في [موضوع من مايو 2026](https://developer.apple.com/forums/thread/826849)، رُفض تطبيق للقراءة بصوت عالٍ عدة مرات رغم أنه يستخدم وضع `audio` فعلًا: لم يتمكن المراجع من تشغيل الصوت. ويكتب مطوّر آخر هناك أن فيديو مرفقًا، في رأيه، هو ما حلّ حالته. هذه شهادة، وليست قاعدة من Apple.

## من أين يأتي المفتاح إن لم تضفه أنت؟

مع Expo، إضافات الإعداد (config plugins) هي التي تملأ ملف Info.plist أثناء prebuild. **لذلك قد يدخل وضع خلفية إلى ملفك الثنائي دون أن تقرر ذلك.**

### إضافة expo-audio بإعداداتها الافتراضية

تذكر [وثائق expo-audio](https://docs.expo.dev/versions/latest/sdk/audio/) ذلك: الخيار `enableBackgroundPlayback` قيمته `true` افتراضيًا، وعلى iOS يضيف وضع `audio`. يكفي إذن تعريف الإضافة بصيغتها المختصرة، `"expo-audio"`، لإعلان الوضع.

هذا ما وجدته عند مراجعة TradaZen قبل إرساله الأول: أصوات واجهة قصيرة في المقدّمة، لكن الإضافة مُعرّفة بالصيغة المختصرة. الإصلاح في `app.json`:

```json
{
  "expo": {
    "plugins": [["expo-audio", { "enableBackgroundPlayback": false }]]
  }
}
```

حزم أخرى تضيف وضعًا بطريقتها. الخيار `isIosBackgroundLocationEnabled` في [expo-location](https://docs.expo.dev/versions/latest/sdk/location/) يضيف `location` فقط إذا فعّلته. أما [expo-background-task](https://docs.expo.dev/versions/latest/sdk/background-task/) فيضيف `processing` أثناء prebuild بمجرد تثبيته.

### مجلد ios/ الذي يحتفظ بالمفتاح القديم

الفخ الثاني، عشته مع Solys في يوليو 2026. كنت قد حذفت `audio` من `app.json`، لكن المفتاح بقي في `ios/Solys/Info.plist` الذي وُلّد سابقًا. تشغيل prebuild دون `--clean` يعدّل هذا المشروع بدل إعادة إنشائه، والإضافة تضيف المفتاح ولا تحذفه أبدًا. البناء المحلي كان سيحمله معه. أما بناء EAS في السحابة فيبدأ من prebuild جديد حين يكون `ios/` متجاهَلًا في git، وهذه كانت حالتي.

قبل كل بناء، أتحقق مما سيُرسل فعلًا:

```bash
npx expo config --type introspect --json | grep -o '"UIBackgroundModes":\[[^]]*\]'
npx expo prebuild --clean --platform ios
```

الأمر الأول يعرض الأوضاع التي سيكتبها prebuild في Info.plist. الثاني يعيد إنشاء المشروع الأصلي لبناء محلي، مع حذف المجلد `ios/`. في Solys يعرض الأول `"UIBackgroundModes":["audio"]`، وفي TradaZen لا شيء: وكلاهما مقصود.

إضافة وضع أو حذفه يغيّر Info.plist، وبالتالي الملف الثنائي: **تحتاج إلى بناء جديد، ولا يكفي تحديث عن بُعد.** تصنّف [وثائق EAS Update](https://docs.expo.dev/eas-update/introduction/) هذه التغييرات ضمن ما يتطلب ملفًا ثنائيًا جديدًا، كما في [ITMS-90683](https://devoria.fr/ar/blog/itms-90683-missing-purpose-string-expo).

## Solys: وضع صوت مُعلَن لسبب حقيقي

Solys منبّه، لكن وضع `audio` لا يُستخدم لرنين المنبّه: **الرنين يمرّ عبر AlarmKit**، خدمة المنبّه من Apple المتاحة منذ iOS 26 ([وثائق AlarmKit](https://developer.apple.com/documentation/alarmkit)). النظام هو الذي يرنّ، حتى في الوضع الصامت، وليس التطبيق.

تاريخ المفتاح، لأن طريقة التفكير أهم من السطر نفسه:

1. **نهاية يوليو 2026، حذفته.** لم يكن هناك ما يشغّل صوتًا في الخلفية: مؤثرات الألعاب المصغّرة تبقى في المقدّمة، والمنبّه لا يعتمد على التطبيق.
2. **بعد يومين، أعدته**، مع ميزة الاستماع الليلي. هذا الخيار يسجّل أصوات ليلتك بالميكروفون ويحللها على الـ iPhone. يجب أن يستمر التسجيل والشاشة مقفلة، وتذكر وثائق expo-audio أن خيار التسجيل في الخلفية يضيف هو أيضًا وضع `audio`.

تغيّرت طبيعة المبرّر: **الوضع يُستخدم للتسجيل، لا للتشغيل.** ثلاث ضمانات ظاهرة في التطبيق:

- الاستماع خيار مُطفأ افتراضيًا، يُفعَّل من الإعدادات أو من روتين المساء؛
- له شاشة موافقة خاصة به، كما تشترط [القاعدة 2.5.14](https://developer.apple.com/app-store/review/guidelines/#2.5.14) لأي تسجيل، ولا شيء يغادر الهاتف؛
- يُغلق الميكروفون قبل المنبّه بعشر دقائق، حتى لا يتعارض الاستماع مع الرنين أبدًا.

لا أستطيع أن أضمن أن كل مراجع سيقبل هذا الإعلان دائمًا. لكنني أعرف، لكل عنصر، ما فائدته وأين يُرى.

### المنبّهات التي كانت تُبقي التطبيق يعمل

قبل AlarmKit، لم يكن تطبيق منبّه من طرف ثالث قادرًا على الرنين مثل منبّه Apple. لذلك كانت بعض المكتبات تُبقي التطبيق يعمل: وثائق حزمة Flutter [alarm2](https://pub.dev/packages/alarm2) تصف مشغّل صوت صامتًا يعمل حتى موعد المنبّه. لكن الصوت الصامت لا يُسمِع شيئًا. **منذ iOS 26، يجعل AlarmKit هذا الالتفاف غير ضروري.**

## الإبقاء على الوضع أو حذفه: جدول القرار

| حالتك                   | ماذا تفعل               |
| ----------------------- | ----------------------- |
| أصوات قصيرة في المقدّمة | احذف `audio`            |
| موسيقى أو كتاب صوتي     | أبقِه واعرضه            |
| تسجيل طويل              | أبقِه + موافقة          |
| منبّه أو مؤقّت          | AlarmKit (iOS 26)       |
| موقع من حين لآخر        | التغييرات الجوهرية      |
| مزامنة غير عاجلة        | `fetch` أو `processing` |
| مكالمات صوتية أو فيديو  | `voip` مع CallKit       |

بالنسبة للموقع، تذكر صفحة Apple خدمة التغييرات الجوهرية في الموقع (significant-change) بديلًا عن وضع `location`.

## البنود الأخرى من 2.5: 2.5.1 و2.5.2

### 2.5.1: واجهات برمجة عامة وأُطر في مكانها

«Apps may only use public APIs and must run on the currently shipping OS.» يستخدم التطبيق الواجهات البرمجية العامة فقط، ويعمل على الإصدار الحالي من النظام، ويتخلى عمّا أصبح مهجورًا. وكما في 2.5.4، كل إطار يُستخدم لغرضه المقصود، المذكور في الوصف: HealthKit للصحة، وHomeKit للمنزل الذكي. إذا استدعت مكتبة ما واجهة برمجية خاصة، فتطبيقك هو الذي يتحمّل الرفض.

### 2.5.2: لا كود مُنزَّل يغيّر التطبيق

يبقى التطبيق مستقلًا داخل حزمته. لا يمكنه أن «download, install, or execute code which introduces or changes features or functionality of the app». فقط التطبيقات التعليمية التي تعلّم البرمجة لها استثناء محدود، بشرط أن يكون الكود ظاهرًا بالكامل وقابلًا للتعديل من المستخدم.

مع Expo، يتعلق الأمر بـ EAS Update، الذي تذكّر وثائقه بأن التحديثات يجب أن تحترم قواعد App Store. **استخدم التحديثات عن بُعد للإصلاح، لا لتسليم ميزة لم يرها المراجع.** الإصلاح المرتبط بالمراجعة يمرّ عبر بناء جديد، كما أشرح في دليل [الإرشاد 2.1](https://devoria.fr/ar/blog/guideline-2-1-app-store-rejection-fix).

## كيف ترد على رفض 2.5.4؟

تجري المحادثة في قسم App Review الخاص بتطبيقك، حيث [ترد على رسالة App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/). حالتان:

- **الوضع لا فائدة منه**: احذفه، وأعد البناء، وتحقق من نتيجة الفحص (introspection)، ثم رد بجملتين.
- **الوضع يخدم ميزة حقيقية**: رد بالمسار الدقيق وفيديو قصير، ثم أعد استخدام هذا النص في ملاحظات المراجعة لكل إصدار.

النموذج الذي كنت سأستخدمه، عدّله حسب حالتك (احذف الجملة الخاصة بالمنبّه إن لم يكن في تطبيقك منبّه):

```text
Hello,

The "audio" background mode is used only by [feature], an
optional feature that [records / plays] audio while the
device is locked. It is off by default.

How to test:
1. Open [screen] and turn on [feature].
2. Accept the microphone permission if asked.
3. Tap [button], then lock the device.
   [What the reviewer will hear or see.]

Our alarm does not use this mode: it is scheduled with
AlarmKit and rings through the system.

Attached: a short screen recording of these steps.

Best regards,
```

## قائمة التحقق 2.5.4 قبل الإرسال

- فحص Expo لا يعرض إلا الأوضاع المقصودة، وتعرف كيف تسمّي ميزة كل منها.
- لا توجد إضافة مُعرّفة بالصيغة المختصرة إن كانت تضيف وضعًا افتراضيًا، مثل expo-audio.
- مجلد `ios/` المحلي لا يحتفظ بأي مفتاح قديم، أو أنك تبني من prebuild نظيف.
- الميزة تعمل بسرعة، دون إعداد مخفي، وملاحظات المراجعة تذكر أي وضع يخدم أي غرض وكيف يُختبر.
- كل تسجيل يطلب موافقة صريحة ويعرض مؤشرًا ظاهرًا. قواعد طلبات الأذونات موجودة في دليل [الإرشاد 5.1.1](https://devoria.fr/ar/blog/guideline-5-1-1-app-store-rejection-fix).
- في المنبّه، يمرّ الرنين عبر AlarmKit، لا عبر صوت يشغّله التطبيق.

## راجع ملفك قبل الإرسال

يجمع [Review Kit](https://devoria.fr/ar/kits/app-review) قائمة التحقق التي أستخدمها قبل الإرسال، ونماذج ملاحظات للمراجع، ومهارات (skills) لـ Claude Code تراجع مشروعك. ولنظرة بشرية، [احجز ساعة معي](https://devoria.fr/ar/coaching): نقرأ رسالة Apple وملف Info.plist معًا في مكالمة فيديو. الطريقة الكاملة موجودة في صفحة [تطبيق رفضته Apple](https://devoria.fr/ar/expertise/app-rejected-by-apple).

تحضّر لإطلاقك الأول؟ [أجرِ التشخيص المجاني](https://devoria.fr/ar/diagnostic): يرتّب لك الخطوات ويرسل إليك قائمتي لتجنّب رفض Apple.

لا أحد يستطيع أن يضمن أن Apple ستقبل تطبيقك. لكن وضع خلفية مبرَّرًا جيدًا يمكن الدفاع عنه في ثلاثين ثانية.

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

### ماذا يعني «Guideline 2.5.4 - Performance - Software Requirements»؟

هو عنوان الرفض حين ترى Apple أن وضع خلفية في ملف Info.plist لا يُستخدم لغرضه المقصود. تذكر الرسالة الوضع وتقترح إما عرض الميزة التي تستخدمه أو حذف المفتاح.

### هل أحتاج إلى بناء جديد بعد رفض 2.5.4؟

إن حذفت وضعًا أو عدّلته، نعم: المفتاح موجود في Info.plist، أي في الملف الثنائي. وإن كان الوضع مبرَّرًا، فقد يكفي رد يتضمن المسار الدقيق وفيديو.

### هل يمكن الإبقاء على وضع الصوت من أجل بعض أصوات الواجهة؟

لا. الأصوات القصيرة التي تُشغَّل في المقدّمة لا تحتاج إليه. مع Expo، اضبط `enableBackgroundPlayback` على `false` في إضافة expo-audio.

### هل يحتاج تطبيق المنبّه إلى وضع الصوت؟

ليس من أجل الرنين، إذا اعتمد على AlarmKit المتاح منذ iOS 26: النظام هو الذي يشغّل المنبّه. في Solys، يُستخدم وضع `audio` للاستماع الليلي الذي يسجّل والشاشة مقفلة.

### لماذا تذكر Apple الإرشاد 2.5.4 مع أنني لم أُعلن شيئًا؟

ربما أعلنته إضافة بدلًا منك: expo-audio تضيف وضع `audio` افتراضيًا، ومجلد `ios/` قديم قد يحتفظ بمفتاح حذفته من إعداداتك. تحقق باستخدام `npx expo config --type introspect`.


## مشروعك

[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 مراحل، والكيت المناسب لك.
