App Group: ما هو، إنشاء حاوية مشتركة وإعداد الوصول

المؤلف: IT Sectr نُشر: 2026-06-17 وقت القراءة: 8 دق

App Group هي آلية في iOS تنشئ حاوية مشتركة لتبادل البيانات بين التطبيق وإضافاته. بدونها، يعمل كل عملية (التطبيق الرئيسي، القطعة، إضافة المشاركة) في بيئة معزولة ولا يمكنها الوصول إلى بيانات المكون المجاور. وفقاً لـ Apple Developer Documentation, 2026، App Group يحل هذه المشكلة من خلال معرف مجموعة واحد محدد في التصريحات. إنها أداة أساسية لإنشاء تجربة مستخدم متسقة في نظام iOS البيئي.

الخلاصة

  • App Group — دليل مشترك على نظام ملفات iOS يمكن الوصول إليه من قبل التطبيق وإضافاته.
  • المعرف يتبع النمط group.* ويضاف في Capabilities لمشروع Xcode.
  • UserDefaults مع suite name يسمح بمزامنة الإعدادات بين العمليات دون كود إضافي.
  • Core Data عبر App Group يتيح للإضافات قراءة وكتابة البيانات في قاعدة بيانات مشتركة مع تكوين Store URL الصحيح.
  • الأمان مضمون لأن العمليات التي لها نفس team ID والتصريح فقط يمكنها الوصول إلى الحاوية.

ما هو App Group؟

App Group هي آلية في نظام التشغيل iOS توفر مساحة تخزين مشتركة لعمليات متعددة لنفس المطور. بدونها، تعمل كل إضافة في بيئة معزولة ولا يمكنها قراءة البيانات التي كتبها مكون آخر. يحل App Group هذه العزلة عن طريق إنشاء دليل على نظام الملفات يمكن الوصول إليه من قبل جميع العمليات التي لديها التصريحات الصحيحة.

يبدأ معرف المجموعة بالبادئة group. ويتم تحديده في ملف التصريحات للمشروع. في Xcode، يضاف هذا المعرف عبر Capabilities — يقوم النظام بتضمينه تلقائياً في توقيع التطبيق. بعد التهيئة، يحصل جميع أعضاء المجموعة على إمكانية الوصول إلى الدليل المشترك في Library/Application Support/ داخل الحاوية.

وفقاً لـ Apple WWDC 2020 Session 10026، يغطي App Group ثلاثة سيناريوهات رئيسية: مزامنة الإعدادات عبر NSUserDefaults، المشاركة في الملفات عبر FileManager، وقاعدة بيانات Core Data مشتركة مع مخزن واحد. كل سيناريو يتطلب فقط تحديد معرف المجموعة في API المقابلة.

كيف تعمل الحاوية المشتركة لـ App Group

يقوم iOS بإنشاء الحاوية المشتركة عند أول تشغيل لأي عملية لديها تصريح com.apple.security.application-groups. فيزيائياً، توجد الحاوية في دليل النظام — مسارها يختلف عن البيئة المعزولة للتطبيق الرئيسي والإضافات، لكن جميع العمليات المصرح لها تملك صلاحيات القراءة والكتابة.

صلاحيات الوصول والأمان

تضمن Apple الأمان لـ App Group من خلال الجمع بين team ID وتوقيع الكود. العملية التي لم يتم توقيعها بنفس شهادة المطور لا يمكنها الوصول إلى حاوية المجموعة. هذا يمنع تسرب البيانات بين تطبيقات المطورين المختلفين.

معرف المجموعة

صيغة المعرف: group.<team-id>.<name>. على سبيل المثال، group.ABC123DEFG.widget-data. يمكن إنشاء مجموعات متعددة على جهاز واحد، كل منها بمجموعة أعضائها الخاصة. يمكن لتطبيق واحد أن ينتمي إلى عدة App Groups في نفس الوقت — وهذا مفيد لفصل بيانات الإضافات المختلفة.

swift
// Get the App Group container URL
guard let containerURL = FileManager.default
    .containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.widget")
else { return }

// Create a file in the shared container
let fileURL = containerURL.appendingPathComponent("shared.data")
try "Hello from main app".write(to: fileURL, atomically: true, encoding: .utf8)

يوفر FileManager طريقة containerURL(forSecurityApplicationGroupIdentifier:) التي ترجع URL الدليل المشترك. من المهم استدعاء هذه الطريقة بشكل منفصل في كل عملية — المسار متطابق فيزيائياً، لكن كل عملية تراه من خلال منظورها الأمني الخاص.

إعداد App Group في Xcode

يبدأ تمكين App Group في Xcode من Capabilities — مفتاح App Groups يضيف التصريح إلى المشروع. يتطلب Apple Developer Portal أيضاً أن يتضمن معرف التطبيق هذه الإمكانية. بدونها، لن يعمل توقيع الكود على جهاز حقيقي.

الإعداد خطوة بخطوة

افتح مشروعك في Xcode، حدد target التطبيق وانتقل إلى علامة التبويب Signing & Capabilities. انقر على + واختر App Groups. أنشئ أو اختر مجموعة موجودة. كرر نفس الخطوات لكل إضافة تحتاج إلى الوصول إلى الحاوية المشتركة. يجب على جميع المشاركين استخدام نفس معرف المجموعة.

التحقق من التصريحات

بعد تمكين Capabilities، يقوم Xcode تلقائياً بإنشاء ملف .entitlements بمفتاح com.apple.security.application-groups ومصفوفة من المعرفات. تأكد من أن جميع الإضافات الضرورية لديها هذا الملف مع team ID الصحيح في معرف المجموعة.

xml
<!-- Example entitlements file -->
<key>com.apple.security.application-groups</key>
<array>
    <string>group.com.example.shared</string>
</array>

إذا كان مشروعك يحتوي على إضافات متعددة (Today Widget، Share Extension، Notification Service)، يجب أن يكون لكل منها ملف تصريحات خاص بها مع نفس المجموعة. غياب التصريحات في أي target هو سبب شائع لعدم رؤية الإضافة للبيانات المشتركة.

استخدام UserDefaults مع App Group

أبسط طريقة لمزامنة البيانات بين التطبيق وإضافاته هي UserDefaults مع suite name. بدلاً من UserDefaults.standard القياسي، تقوم بإنشاء مثيل مع معرف App Group، وتقرأ جميع العمليات نفس الإعدادات.

وفقاً لـ Apple Human Interface Guidelines، هذه الآلية مناسبة لمزامنة الحالة: السمة المحددة، المفضلة، علامات الإعداد. ومع ذلك، فهي ليست مخصصة لأحجام البيانات الكبيرة أو عمليات الكتابة المتزامنة — لهذا استخدم الملفات أو Core Data.

swift
// Write to UserDefaults App Group (main app)
let defaults = UserDefaults(suiteName: "group.com.example.shared")
defaults?.set(true, forKey: "isDarkMode")
defaults?.synchronize()

// Read from UserDefaults App Group (widget extension)
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
let isDark = sharedDefaults?.bool(forKey: "isDarkMode") ?? false

لاحظ: يتم إنشاء مثيل UserDefaults مع suiteName بشكل منفصل في كل عملية ولكنه يقرأ من نفس ملف plist في الحاوية المشتركة. طريقة synchronize() تضمن الكتابة الفورية على القرص — في iOS 13+ يمكن حذفها لأن النظام يقوم بمزامنة البيانات بشكل دوري.

الوصول المشترك إلى الملفات و Core Data

للسيناريوهات الأكثر تعقيداً، يوفر App Group الوصول إلى نظام ملفات مشترك. أي ملف يتم إنشاؤه في دليل الحاوية يمكن الوصول إليه من قبل جميع عمليات المجموعة. هذا يسمح بقاعدة بيانات Core Data مشتركة، أو تخزين مؤقت للصور، أو ملفات مؤقتة.

إعداد Core Data مع App Group

لاستخدام مخزن Core Data مشترك، قم بإنشاء NSPersistentContainer مع URL ملف .sqlite الموجود في دليل App Group. تأكد من أن عملية واحدة فقط تكتب في قاعدة البيانات في كل مرة — الكتابة المتزامنة قد تتلف البيانات. الهندسة النموذجية: التطبيق الرئيسي يكتب، الإضافات تقرأ.

swift
// Setup Core Data with App Group container
lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "SharedModel")
    guard let appGroupURL = FileManager.default
        .containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.shared")
    else { return container }

    let storeURL = appGroupURL.appendingPathComponent("SharedModel.sqlite")
    container.persistentStoreDescriptions = [NSPersistentStoreDescription(url: storeURL)]
    container.loadPersistentStores { _, error in
        if let error = error { fatalError(error.localizedDescription) }
    }
    return container
}()

نهج بديل هو التخزين المؤقت للصور على أساس الملفات. NSCache يعيش فقط في الذاكرة، ولكن عبر App Group يمكن حفظ الصور المخزنة مؤقتاً على القرص في الدليل المشترك. إضافة القطعة يمكنها الوصول إلى نفس الملفات وعرض البيانات المحدثة دون تحميل إضافي من الشبكة.

السيناريوAPI الموصى بهحجم البيانات
الإعدادات والعلاماتUserDefaults suiteNameحتى 1 كيلوبايت
التخزين المؤقت للصورFileManager + NSCacheحتى 100 ميجابايت
البيانات المنظمةCore Data storeحتى 500 ميجابايت
الملفات المؤقتةFileManager مؤقتحتى 50 ميجابايت

عند العمل مع الملفات المشتركة، ضع في اعتبارك أن النظام قد ينهي الإضافة في أي وقت. استخدم NSFileCoordinator لتنسيق الوصول وتجنب تلف البيانات عند الكتابة المتزامنة من قبل عمليات متعددة.

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

ما هو App Group في iOS؟

App Group هي آلية في iOS تنشئ حاوية مشتركة لتخزين البيانات بين التطبيق وإضافاته. تسمح للعمليات التي لها نفس معرف المجموعة بتبادل الملفات وإعدادات UserDefaults وبيانات Core Data من خلال دليل واحد على نظام الملفات.

كيفية إنشاء App Group في Xcode؟

افتح Capabilities الهدف في Xcode، فعّل App Groups وأضف معرفاً بالصيغة group.*. ثم كرر نفس الخطوات لكل إضافة تحتاج إلى الوصول إلى الحاوية المشتركة. تأكد من أن جميع المشاركين يستخدمون نفس معرف المجموعة.

ما هي الإضافات التي يمكنها استخدام App Group؟

جميع أنواع إضافات iOS تدعم App Group: Today Widget (إضافة القطعة)، Share Extension، Notification Service Extension، Custom Keyboard وغيرها. يجب أن تحتوي كل إضافة على ملف تصريحات منفصل مع نفس معرف المجموعة المستخدم في التطبيق الرئيسي.

هل يمكن استخدام App Group بين تطبيقات مختلفة؟

نعم، ولكن فقط إذا كانت التطبيقات موقعة بنفس شهادة المطور ولديها نفس team ID. تضمن Apple الأمان من خلال توقيع الكود: تطبيقان من مطورين مختلفين لا يمكنهما الوصول إلى نفس الحاوية حتى مع معرف مجموعة متطابق.

كيفية مزامنة البيانات عبر App Group بين التطبيق والقطعة؟

استخدم UserDefaults مع suite name للإعدادات الصغيرة، FileManager للملفات، و Core Data للبيانات المنظمة. جميع هذه الـ APIs تعمل مع دليل App Group — فقط حدد معرف المجموعة أثناء التهيئة. لـ Core Data، تأكد من أن URL المخزن يشير إلى الدليل المشترك.

الملخص

  • App Group هي الطريقة الوحيدة لتنظيم تبادل البيانات بين تطبيق iOS وإضافاته من خلال حاوية مشتركة على نظام الملفات.
  • معرف المجموعة يتبع الصيغة group.<team-id>.<name> ويضاف عبر Capabilities Xcode مع ملف تصريحات إلزامي لكل target.
  • UserDefaults مع suite name هو أبسط طريقة لمزامنة الإعدادات والعلامات بين العمليات دون الحاجة لإدارة الملفات.
  • Core Data مع App Group يتطلب تحديد URL المخزن داخل الحاوية وتنسيق الوصول بين العمليات لتجنب تلف قاعدة البيانات.
  • FileManager.containerURL يعيد المسار إلى الدليل المشترك، وهو نفسه لجميع العمليات التي لديها التصريحات الصحيحة.
  • أمان البيانات مضمون من خلال التحقق من team ID وتوقيع الكود — فقط تطبيقات نفس المطور يمكنها الوصول إلى الحاوية المشتركة.
  • للكتابة المتزامنة في الملفات المشتركة، استخدم NSFileCoordinator، ولمزامنة التغييرات بين العمليات استخدم Darwin Notifications أو CFNotificationCenter.

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

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

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

اقرأ أيضًا