يربط ملف التزويد شهادات المطور ومعرّف التطبيق وقائمة الأجهزة المسموح بها لتوقيع كود تطبيقات iOS. وفقاً لوثائق Apple Developer Documentation, 2026، الملف ضروري لأي تشغيل للتطبيق على جهاز فعلي — وبدونه لا يستطيع Xcode تثبيت البناء على iPhone أو iPad. سنشرح في المقال الهيكل والأنواع وعملية إنشاء الملفات.
الرئيسية
ملف التزويد هو ملف تكوين رقمي بتنسيق .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 UDID | 99 دولاراً سنوياً |
| 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 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 من الملف ويحفظه بتنسيق قابل للقراءة:
# فك تشفير .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 يستخدم ملف 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) وتحت أي شهادة وعلى أي أجهزة يمكن تشغيله. يشير الملف دائماً إلى شهادة محددة، لكنه لا يحل محلها.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا