App Group ایک iOS میکانزم ہے جو ایپ اور اس کی توسیعات کے درمیان ڈیٹا کے تبادلے کے لیے مشترکہ کنٹینر بناتا ہے۔ اس کے بغیر، ہر عمل (مین ایپ، ویجٹ، شیئر ایکسٹینشن) الگ تھلگ سینڈ باکس میں چلتا ہے اور پڑوسی جزو کے ڈیٹا تک رسائی حاصل نہیں کر سکتا۔ Apple Developer Documentation, 2026 کے مطابق، App Group entitlements میں متعین ایک ہی گروپ شناخت کنندہ کے ذریعے اس مسئلے کو حل کرتا ہے۔ یہ iOS ماحولیاتی نظام میں مستقل صارف کا تجربہ بنانے کے لیے ایک بنیادی آلہ ہے۔
اہم نکات
App Group iOS آپریٹنگ سسٹم کا ایک میکانزم ہے جو ایک ہی ڈویلپر کے متعدد عملوں کے لیے مشترکہ ذخیرہ کرنے کی جگہ فراہم کرتا ہے۔ اس کے بغیر، ہر توسیع اپنے سینڈ باکس میں کام کرتی ہے اور دوسرے جزو کے لکھے ہوئے ڈیٹا کو نہیں پڑھ سکتی۔ App Group صحیح entitlements والے تمام عملوں کے لیے قابل رسائی ڈائریکٹری بنا کر اس تنہائی کو حل کرتا ہے۔
گروپ شناخت کنندہ group. کے سابقہ سے شروع ہوتا ہے اور پروجیکٹ کی entitlements فائل میں متعین کیا جاتا ہے۔ Xcode میں، یہ شناخت کنندہ Capabilities کے ذریعے شامل کیا جاتا ہے — سسٹم اسے خود بخود ایپ کے دستخط میں شامل کرتا ہے۔ ترتیب دینے کے بعد، تمام گروپ اراکین کنٹینر کے اندر Library/Application Support/ میں مشترکہ ڈائریکٹری تک رسائی حاصل کر سکتے ہیں۔
Apple WWDC 2020 Session 10026 کے مطابق، App Group تین اہم منظرناموں کا احاطہ کرتا ہے: NSUserDefaults کے ذریعے ترتیبات کی مطابقت پذیری، FileManager کے ذریعے فائل شیئرنگ، اور ایک ہی ذخیرہ کے ساتھ مشترکہ Core Data۔ ہر منظر نامے میں صرف متعلقہ API میں گروپ شناخت کنندہ متعین کرنے کی ضرورت ہوتی ہے۔
iOS com.apple.security.application-groups entitlement رکھنے والے کسی بھی عمل کے پہلی بار چلنے پر مشترکہ کنٹینر بناتا ہے۔ جسمانی طور پر، کنٹینر سسٹم ڈائریکٹری میں واقع ہوتا ہے — اس کا راستہ مین ایپ اور توسیعات کے سینڈ باکس سے مختلف ہوتا ہے، لیکن تمام مجاز عملوں کے پاس پڑھنے اور لکھنے کی اجازت ہوتی ہے۔
Apple team ID اور کوڈ دستخط کے امتزاج کے ذریعے App Group کی سیکورٹی کو یقینی بناتا ہے۔ وہ عمل جو ایک ہی ڈویلپر سرٹیفکیٹ سے دستخط شدہ نہیں ہے گروپ کنٹینر تک رسائی حاصل نہیں کر سکتا۔ یہ مختلف ڈویلپرز کی ایپس کے درمیان ڈیٹا لیک ہونے سے روکتا ہے۔
شناخت کنندہ کا فارمیٹ: group.<team-id>.<name> ہے۔ مثال کے طور پر، group.ABC123DEFG.widget-data۔ ایک ڈیوائس پر متعدد گروپ بنائے جا سکتے ہیں، ہر ایک کے اپنے اراکین کا سیٹ ہوتا ہے۔ ایک ایپ بیک وقت متعدد App Groups سے تعلق رکھ سکتی ہے — یہ مختلف توسیعات کے ڈیٹا کو الگ کرنے کے لیے مفید ہے۔
// 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 لوٹاتا ہے۔ ہر عمل میں اس طریقہ کو الگ سے کال کرنا ضروری ہے — راستہ جسمانی طور پر ایک جیسا ہے، لیکن ہر عمل اسے اپنے سیکورٹی نقطہ نظر سے دیکھتا ہے۔
Xcode میں App Group کو فعال کرنا Capabilities سے شروع ہوتا ہے — App Groups سوئچ پروجیکٹ میں entitlement شامل کرتا ہے۔ Apple Developer Portal بھی ضروری ہے کہ ایپ شناخت کنندہ میں یہ صلاحیت شامل ہو۔ اس کے بغیر، کوڈ دستخط حقیقی ڈیوائس پر کام نہیں کرے گا۔
Xcode میں اپنا پروجیکٹ کھولیں، ایپ کے ہدف کو منتخب کریں اور Signing & Capabilities ٹیب پر جائیں۔ + پر کلک کریں اور App Groups منتخب کریں۔ نیا گروپ بنائیں یا موجودہ گروپ منتخب کریں۔ ہر اس توسیع کے لیے ایک جیسے مراحل دہرائیں جسے مشترکہ کنٹینر تک رسائی کی ضرورت ہے۔ تمام شرکاء کو ایک ہی گروپ شناخت کنندہ استعمال کرنا چاہیے۔
Capabilities کو فعال کرنے کے بعد، Xcode خود بخود com.apple.security.application-groups کلید اور شناخت کنندگان کی ایک صف کے ساتھ ایک .entitlements فائل بناتا ہے۔ یقینی بنائیں کہ تمام ضروری توسیعات کے پاس گروپ شناخت کنندہ میں درست team ID کے ساتھ یہ فائل موجود ہے۔
<!-- Example entitlements file -->
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.example.shared</string>
</array>
اگر آپ کے پروجیکٹ میں متعدد توسیعات ہیں (Today Widget، Share Extension، Notification Service)، ہر ایک کے پاس ایک ہی گروپ کے ساتھ اپنی entitlements فائل ہونی چاہیے۔ کسی بھی ہدف میں entitlements کی عدم موجودگی ایک عام وجہ ہے جس کی وجہ سے توسیع مشترکہ ڈیٹا نہیں دیکھ پاتی۔
ایپ اور اس کی توسیعات کے درمیان ڈیٹا کو مطابقت پذیر بنانے کا سب سے آسان طریقہ suite name کے ساتھ UserDefaults ہے۔ معیاری UserDefaults.standard کے بجائے، آپ App Group شناخت کنندہ کے ساتھ ایک مثال بناتے ہیں، اور تمام عمل ایک ہی ترتیبات پڑھتے ہیں۔
Apple Human Interface Guidelines کے مطابق، یہ میکانزم حالت کو مطابقت پذیر بنانے کے لیے موزوں ہے: منتخب تھیم، پسندیدہ، آن بورڈنگ فلیگ۔ تاہم، یہ بڑے ڈیٹا والیوم یا بیک وقت لکھنے کے عمل کے لیے ڈیزائن نہیں کیا گیا ہے — اس کے لیے فائلیں یا Core Data استعمال کریں۔
// 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
نوٹ: suiteName کے ساتھ UserDefaults مثال ہر عمل میں الگ بنائی جاتی ہے لیکن مشترکہ کنٹینر میں ایک ہی plist فائل سے پڑھتی ہے۔ synchronize() طریقہ فوری ڈسک تحریر کی ضمانت دیتا ہے — iOS 13+ میں اسے چھوڑا جا سکتا ہے کیونکہ سسٹم وقتاً فوقتاً ڈیٹا کو مطابقت پذیر بناتا ہے۔
مزید پیچیدہ منظرناموں کے لیے، App Group مشترکہ فائل سسٹم تک رسائی فراہم کرتا ہے۔ کنٹینر ڈائریکٹری میں بنائی گئی کوئی بھی فائل گروپ کے تمام عملوں کے لیے قابل رسائی ہوتی ہے۔ یہ ایک مشترکہ Core Data ڈیٹا بیس، تصویری کیش یا عارضی فائلوں کی اجازت دیتا ہے۔
مشترکہ Core Data ذخیرہ استعمال کرنے کے لیے، App Group ڈائریکٹری میں واقع .sqlite فائل URL کے ساتھ ایک NSPersistentContainer بنائیں۔ یقینی بنائیں کہ ایک وقت میں صرف ایک عمل ڈیٹا بیس میں لکھتا ہے — بیک وقت لکھنا ڈیٹا کو خراب کر سکتا ہے۔ ایک عام فن تعمیر: مین ایپ لکھتی ہے، توسیعات پڑھتی ہیں۔
// 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 KB تک |
| تصویری کیش | FileManager + NSCache | 100 MB تک |
| ساختی ڈیٹا | Core Data ذخیرہ | 500 MB تک |
| عارضی فائلیں | FileManager عارضی | 50 MB تک |
مشترکہ فائلوں کے ساتھ کام کرتے وقت، یاد رکھیں کہ سسٹم کسی بھی وقت توسیع کو ختم کر سکتا ہے۔ بیک وقت متعدد عملوں کے لکھنے پر ڈیٹا کی خرابی سے بچنے کے لیے رسائی کو مربوط کرنے کے لیے NSFileCoordinator استعمال کریں۔
اکثر پوچھے گئے سوالات
App Group ایک iOS میکانزم ہے جو ایپ اور اس کی توسیعات کے درمیان ڈیٹا ذخیرہ کرنے کے لیے مشترکہ کنٹینر بناتا ہے۔ یہ ایک ہی گروپ شناخت کنندہ والے عملوں کو فائل سسٹم پر ایک ہی ڈائریکٹری کے ذریعے فائلوں، UserDefaults ترتیبات اور Core Data ڈیٹا کا تبادلہ کرنے کی اجازت دیتا ہے۔
Xcode میں ہدف کی Capabilities کھولیں، App Groups کو فعال کریں اور group.* فارمیٹ میں شناخت کنندہ شامل کریں۔ پھر ہر اس توسیع کے لیے ایک جیسے مراحل دہرائیں جسے مشترکہ کنٹینر تک رسائی کی ضرورت ہے۔ یقینی بنائیں کہ تمام شرکاء ایک ہی گروپ شناخت کنندہ استعمال کرتے ہیں۔
iOS توسیعات کی تمام اقسام App Group کو سپورٹ کرتی ہیں: Today Widget (ویجٹ توسیع)، Share Extension، Notification Service Extension، Custom Keyboard اور دیگر۔ ہر توسیع کے پاس مین ایپ کی طرح ایک ہی گروپ شناخت کنندہ کے ساتھ ایک علیحدہ entitlements فائل ہونی چاہیے۔
ہاں، لیکن صرف اس صورت میں جب ایپس ایک ہی ڈویلپر سرٹیفکیٹ سے دستخط شدہ ہوں اور ان کا team ID ایک جیسا ہو۔ Apple کوڈ دستخط کے ذریعے سیکورٹی کو یقینی بناتا ہے: مختلف ڈویلپرز کی دو ایپس ایک جیسے گروپ شناخت کنندہ کے باوجود ایک ہی کنٹینر تک رسائی حاصل نہیں کر سکتیں۔
چھوٹی ترتیبات کے لیے suite name کے ساتھ UserDefaults، فائلوں کے لیے FileManager اور ساختی ڈیٹا کے لیے Core Data استعمال کریں۔ یہ تمام APIs App Group ڈائریکٹری کے ساتھ کام کرتے ہیں — شروع کرتے وقت صرف گروپ شناخت کنندہ متعین کریں۔ Core Data کے لیے، یقینی بنائیں کہ ذخیرہ کا URL مشترکہ ڈائریکٹری کی طرف اشارہ کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں