ملف التزويد: ما هو، أنواعه وكيف يعمل

المؤلف: IT Sectr نُشر: 2026-04-16 وقت القراءة: 10 دق

يربط ملف التزويد شهادات المطور ومعرّف التطبيق وقائمة الأجهزة المسموح بها لتوقيع كود تطبيقات iOS. وفقاً لوثائق Apple Developer Documentation, 2026، الملف ضروري لأي تشغيل للتطبيق على جهاز فعلي — وبدونه لا يستطيع Xcode تثبيت البناء على iPhone أو iPad. سنشرح في المقال الهيكل والأنواع وعملية إنشاء الملفات.

الرئيسية

  • ملف التزويد — ملف تكوين من Apple يجمع الشهادة ومعرّف التطبيق والأجهزة لتوقيع الكود
  • Development يُستخدم للاختبار على الأجهزة الفعلية أثناء التطوير
  • Distribution ينقسم إلى App Store وAd Hoc وEnterprise لسيناريوهات نشر مختلفة
  • App ID يحدد التطبيق بشكل فريد في نظام Apple البيئي ويرتبط بمعرّف الحزمة
  • Entitlements تحدّد وصول التطبيق إلى وظائف النظام: الإشعارات الفورية وiCloud ومجموعات التطبيقات

ما هو ملف التزويد

ملف التزويد هو ملف تكوين رقمي بتنسيق .mobileprovision (لـ iOS) أو .provisionprofile (لـ macOS) تستخدمه Apple للتحكم في تثبيت التطبيقات وتشغيلها على الأجهزة. يحتوي الملف على بيانات وصفية لتوقيع الكود، والتي بدونها لا يمكن تشغيل التطبيق على iPhone أو iPad أو Apple Watch فعلي — لا يتطلب المحاكي ملفاً لأن الكود لا يُوقّع للتنفيذ على معالج حقيقي.

يُصدر الملف عبر Apple Developer Portal وله تاريخ انتهاء صلاحية — عادة عام واحد لملفات Development وDistribution. وفقاً لسياسة Apple، يرتبط الملف تلقائياً بشهادة Apple Developer Program التي تم توقيعه تحتها: إذا تم إلغاء الشهادة أو انتهاء صلاحيتها، يتوقف الملف عن العمل.

يحتوي كل ملف على UUID فريد يستخدمه Xcode لتحديد الملف في سلسلة المفاتيح. Xcode يختار تلقائياً الملف المناسب أثناء البناء، لكن يمكن للمطور تجاوز الاختيار في إعدادات Signing & Capabilities. يمكن تثبيت عدد غير محدود من الملفات على جهاز واحد — يستخدم نظام إدارة الأجهزة المحمولة (MDM) من Apple هذا للتوزيع المؤسسي.

لماذا نحتاج ملف التزويد

توقيع الكود هو السبب الرئيسي لوجود الملفات. تطلب Apple من كل تطبيق يُشغّل على جهاز iOS أن يكون موقّعاً بشهادة صادرة عن Apple. يعمل ملف التزويد كحلقة وصل: يؤكد أن المطور لديه الحق في تشغيل التطبيق على هذا الجهاز. وفقاً لدليل أمان Apple (2025)، تمنع آلية الملفات تثبيت البرامج الضارة على أجهزة المستخدمين حتى في حالة اختراق شهادة المطور.

يحدد الملف أيضاً الخدمات النظامية المتاحة للتطبيق. إذا كان التطبيق يستخدم الإشعارات الفورية، فإن Apple Push Notification service (APNs) يتطلب entitlements صحيحة داخل الملف. بدون ذلك، لن يتم تسليم إشعارات الخادم إلى الجهاز. تنطبق نفس القاعدة على iCloud وApp Groups وWallet وHealthKit وأطر Apple الأخرى.

الفرق عن الشهادة

غالباً ما يخلط المطورون بين ملف التزويد وشهادة Apple. الشهادة هي مستند رقمي يؤكد الهوية (من يوقّع)، بينما الملف هو تكوين (أي تطبيق، على أي أجهزة، وبأي صلاحيات). يمكن استخدام شهادة واحدة في عدة ملفات، وملف واحد مرتبط بشهادة واحدة بالضبط. توصي Apple بإنشاء ملف منفصل لكل تطبيق وكل سيناريو — Development وAd Hoc وApp Store.

كيف يعمل ملف التزويد

تتكون عملية توقيع التطبيق من عدة خطوات متسلسلة. Xcode يأخذ الملف الثنائي للتطبيق (App Bundle)، يوقعه بالمفتاح الخاص للمطور، يدمج ملف التزويد فيه ويرسله إلى الجهاز. يتحقق الجهاز من التوقيع بالمفتاح العام لـ Apple، ويقارن UUID الملف بقائمة الملفات الموثوقة في النظام ويشغّل التطبيق فقط في حالة نجاح جميع الفحوصات.

عندما يقوم المستخدم بتنزيل تطبيق من App Store، تختلف الآلية. App Store Connect يعيد توقيع التطبيق بشهادة Distribution الخاصة بـ Apple، مستبدلاً ملف المطور بملف Store. هذا يعني أن التطبيق المنشور عبر App Store موقّع تقنياً بواسطة Apple، وليس المطور — على الرغم من أن التوقيع الأصلي للمطور يُتحقق منه عند رفع البناء إلى App Store Connect.

لتوزيع Ad Hoc، يسجل الملف UDIDs أجهزة محددة يُسمح بتشغيل التطبيق عليها. حساب Apple Developer Program المجاني يحدد الاختبار بـ 100 جهاز في السنة. ملفات Enterprise (للتوزيع الداخلي في المؤسسة) ليس لها حد للأجهزة ولكنها تتطلب اشتراكاً نشطاً في Apple Developer Enterprise Program بتكلفة 299 دولاراً سنوياً.

دورة حياة الملف

فترة الصلاحية لملف التزويد هي عام واحد من تاريخ الإنشاء. قبل 30 يوماً من انتهاء الصلاحية، تبدأ Apple في إرسال إشعارات دفع للمطور عبر Xcode وDeveloper Portal. إذا انتهت صلاحية الملف، يستمر التطبيق المثبت بالفعل في العمل، لكن لا يمكن تثبيت بناء جديد بهذا الملف. Xcode يظهر خطأ توقيع الكود بالرمز -402620394 عند محاولة البناء بملف منتهي الصلاحية. توصي Apple بتجديد الملفات تلقائياً عبر Xcode Accounts Preferences — ثم يجدد Xcode الملف قبل 24 ساعة من انتهاء الصلاحية.

أنواع ملفات التزويد

توفر Apple أربعة أنواع رئيسية من ملفات التزويد، كل منها مخصص لمرحلة محددة من دورة حياة التطبيق. ملف Development يسمح بتشغيل التطبيق على الأجهزة الفعلية المضافة إلى Apple Developer Portal ويُستخدم في مرحلة التطوير واختبار QA. يكفي حساب مطور Apple مجاني لإنشاء ملف Development.

ملف Ad Hoc مخصص لتوزيع التطبيق على مجموعة محدودة من المختبرين دون استخدام App Store. يسجل الملف ما يصل إلى 100 جهاز بواسطة UDID، ويمكن تثبيت التطبيق مباشرة عبر iTunes أو Apple Configurator أو حلول MDM. Ad Hoc لها فترة صلاحية 12 شهراً ولا تتطلب مراجعة Apple.

ملف App Store يُستخدم حصرياً لنشر التطبيق في App Store ولا يحتوي على قائمة أجهزة — Apple نفسها تدير التوزيع بعد الموافقة على البناء. عند رفع أرشيف إلى App Store Connect، يستخدم Xcode تلقائياً ملف App Store إذا كان مثبتاً في النظام. ملف Enterprise مخصص للمؤسسات مع Apple Developer Enterprise Program ويسمح بالتوزيع الداخلي للتطبيقات دون حد للأجهزة أو مراجعة Apple.

نوع الملفالغرضالأجهزةتكلفة الاشتراك
Developmentالتطوير والاختبارحتى 100 UDIDمجاني / 99 دولاراً سنوياً
Ad Hocالتوزيع على المختبرينحتى 100 UDID99 دولاراً سنوياً
App Storeالنشر في App Storeأي (عبر Apple)99 دولاراً سنوياً
Enterpriseالتوزيع الداخليغير محدود299 دولاراً سنوياً

هيكل ملف التزويد

ملف التزويد هو ملف بتنسيق DER موقّع من Apple، يمكن عرض محتوياته عبر سطر الأوامر. Security framework في macOS يسمح بفك تشفير .mobileprovision إلى plist XML قابل للقراءة. داخل الملف يوجد: UUID الملف ومعرّف التطبيق (بادئة الفريق + معرّف الحزمة) وقائمة الشهادات وقائمة الأجهزة المسموح بها (فقط لـ Development وAd Hoc) والصلاحيات وتاريخ انتهاء الصلاحية.

App ID هو معرّف فريد للتطبيق يتكون من Team ID (10 أحرف تُعيّنها Apple) ومعرّف الحزمة (مثل com.example.myapp). يمكن أن يكون App ID صريحاً (تطابق تام مع معرّف الحزمة) أو wildcard (نمط *.example.com لتطبيقات متعددة). لا توصي Apple باستخدام wildcard للتطبيقات التي تستخدم الإشعارات الفورية أو iCloud — هذه الخدمات تتطلب App ID صريحاً.

Entitlements هي كتلة XML داخل الملف تحدد حقوق وصول التطبيق إلى موارد النظام. تشمل Entitlements النموذجية: aps-environment (الإشعارات الفورية)، com.apple.developer.icloud-services (iCloud)، com.apple.security.application-groups (مجموعات التطبيقات للـ Widget وShare Extension). تضيف Apple تلقائياً entitlements إلى الملف بناءً على الإمكانات المفعلة في Xcode. أي عدم تطابق بين entitlements في الملف وتلك المطلوبة في الكود يؤدي إلى خطأ في التوقيع.

إنشاء ملف التزويد في Apple Developer

يمكن إنشاء الملف بطريقتين: عبر واجهة الويب في Apple Developer Portal أو تلقائياً عبر Xcode. للمشروع النموذجي، يدير Xcode الملفات تلقائياً عند تفعيل خيار Automatically manage signing. ينشئ Xcode الشهادة والملف ومعرّف التطبيق في ثوانٍ، متزامناً مع Apple Developer Portal. لكن خطوط CI/CD تتطلب إدارة يدوية.

لإنشاء ملف يدوياً في Apple Developer Portal: انتقل إلى Certificates, Identifiers & Profiles، اختر Profiles واضغط "+". ثم اختر نوع الملف (Development أو Ad Hoc أو App Store أو Enterprise)، اختر App ID من القائمة المسجلة، اختر شهادة مطور و(لـ Development وAd Hoc) اختر الأجهزة. بعد الإنشاء، يُنزّل الملف بتنسيق .mobileprovision ويُثبّت بنقرة مزدوجة في Xcode.

خوادم CI/CD تتطلب نهجاً خاصاً: يجب تخزين الملف والشهادة في مستودع آمن (مثل أسرار GitHub Actions). أثناء البناء، يُحمّل الملف على الوكيل، ويُوضع في مجلد ~/Library/MobileDevice/Provisioning Profiles، وتُستورد الشهادة إلى سلسلة المفاتيح. Fastlane — أداة شائعة لأتمتة التوقيع — توفر الأمر match الذي يزامن الملفات والشهادات بين المطورين عبر مستودع git مشفر.

مثال: التحقق من الملف عبر سطر الأوامر

لتشخيص مشاكل توقيع الكود، يمكن فك تشفير .mobileprovision والتحقق من محتوياته. الأمر أدناه يستخرج plist XML من الملف ويحفظه بتنسيق قابل للقراءة:

bash
# فك تشفير .mobileprovision إلى XML
security cms -D -i "path/to/embedded.mobileprovision" \
  -o "profile.plist"

# التحقق من تاريخ انتهاء صلاحية الملف
plist -convert xml1 profile.plist -o -
grep -A 1 "ExpirationDate" profile.plist

أداة Security من macOS Command Line Tools تفك تشفير ملف الملف الموقّع بـ CMS. العلامة -D تعني فك التشفير، -i تحدد ملف الإدخال. بعد فك التشفير، تقوم أداة plist بتحويل plist الثنائي إلى XML، ويستخرج grep تاريخ انتهاء الصلاحية. هذه الطريقة مفيدة في CI/CD للتحقق من أن الملف لم تنته صلاحيته قبل بناء الإصدار.

الأخطاء الشائعة مع ملفات التزويد

الخطأ الأكثر شيوعاً هو "No matching provisioning profiles found" عند البناء في Xcode. يحدث عندما لا يستطيع Xcode العثور على ملف يطابق تكوين البناء: معرّف الحزمة لا يتطابق مع App ID في الملف، أو الشهادة غير مثبتة في سلسلة المفاتيح، أو انتهت صلاحية الملف. الحل — التحقق من إعدادات Signing & Capabilities في الهدف والتحويل إلى Automatically manage signing إذا لزم الأمر.

يظهر خطأ "Provisioning profile doesn't include the selected device" عند محاولة تشغيل بناء Development أو Ad Hoc على جهاز لم يُضف UDID الخاص به إلى الملف. يتيح Apple Developer Portal إضافة جهاز إلى ملف موجود — بعد ذلك يجب تنزيل الملف وتثبيته من جديد. Xcode مع الإدارة التلقائية للتوقيع يضيف الجهاز المتصل إلى الملف تلقائياً.

تظهر مشكلة entitlements كخطأ "The executable was signed with invalid entitlements" عند الرفع إلى App Store Connect. السبب — عدم تطابق entitlements في الملف مع تلك الموجودة في ملف .entitlements للمشروع. تطلب Apple أن تكون مجموعة الحقوق في الملف مجموعة شاملة للحقوق التي يطلبها التطبيق. الحل — التحقق من الإمكانات في هدف Xcode والتأكد من أن جميع الخدمات المفعلة لها entitlements مقابلة في الملف. Fastlane يتضمن الأمر produce الذي يزامن معرّفات التطبيق والملفات مع entitlements الحالية.

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

هل يمكن استخدام ملف تزويد واحد لتطبيقات متعددة؟

نعم، إذا كان App ID في الملف يستخدم معرّف wildcard من النوع com.example.*. لكن ملفات wildcard لا تدعم الإشعارات الفورية وiCloud وGame Center وApp Groups. توصي Apple بإنشاء ملف صريح منفصل لكل تطبيق يستخدم إمكانات متقدمة.

ماذا يحدث إذا انتهت صلاحية ملف التزويد والتطبيق موجود بالفعل في App Store؟

التطبيق الذي تم رفعه عبر App Store يستخدم ملف Store من Apple، والذي لا يعتمد على ملف المطور. يمكن للمستخدمين الاستمرار في تنزيل التطبيق وتشغيله. انتهاء صلاحية الملف يمنع فقط رفع بناء جديد إلى App Store Connect — تطلب Apple أن يكون ملف Distribution ساري المفعول وقت الإرسال.

كيف أنقل ملف التزويد إلى كمبيوتر آخر؟

يمكن نسخ الملف إلى مجلد ~/Library/MobileDevice/Provisioning Profiles على الكمبيوتر الجديد. لكن الملف مرتبط بشهادة مفتاحها الخاص موجود في سلسلة المفاتيح. يجب أيضاً تصدير الشهادة مع مفتاحها الخاص عبر Keychain Access واستيرادها على الجهاز الجديد.

كم ملف تزويد يمكن أن يكون على كمبيوتر واحد؟

لا يوجد حد لعدد الملفات على الكمبيوتر. تُخزّن الملفات في مجلد ~/Library/MobileDevice/Provisioning Profiles وتُرقّم حسب UUID. Xcode يختار تلقائياً الملف المناسب حسب App ID ونوع البناء. لتبسيط الإدارة، يُوصى بإزالة الملفات غير المستخدمة عبر Xcode Accounts Preferences.

ما الفرق بين ملف التزويد وشهادة التوقيع؟

شهادة التوقيع تؤكد هوية المطور — وهي مفتاح تشفير صادر عن Apple. ملف التزويد هو ملف تكوين يحدد أي تطبيق (App ID) وتحت أي شهادة وعلى أي أجهزة يمكن تشغيله. يشير الملف دائماً إلى شهادة محددة، لكنه لا يحل محلها.

الخلاصة

  • ملف التزويد — مكون إلزامي لتوقيع تطبيقات iOS، يربط الشهادة ومعرّف التطبيق والأجهزة
  • Development يُستخدم للاختبار على الأجهزة الفعلية مع تسجيل UDID
  • App Store يُستخدم للنشر ولا يحتوي على قائمة أجهزة — Apple تدير التوزيع
  • Ad Hoc يسمح بتوزيع التطبيق على 100 مختبر دون App Store
  • Enterprise مخصص للتوزيع المؤسسي دون حد للأجهزة
  • Entitlements داخل الملف تحدد وصول التطبيق إلى خدمات Apple النظامية
  • CI/CD يتطلب تخزين الملفات في مستودع آمن باستخدام Fastlane أو أدوات مشابهة

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا