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 में अपना प्रोजेक्ट खोलें, ऐप target चुनें और 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 फ़ाइल होनी चाहिए। किसी भी target पर entitlements की अनुपस्थिति एक सामान्य कारण है कि एक्सटेंशन साझा डेटा नहीं देख पाता।
ऐप और उसके एक्सटेंशन के बीच डेटा सिंक करने का सबसे सरल तरीका UserDefaults को suite name के साथ उपयोग करना है। मानक 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 store | 500 MB तक |
| अस्थायी फ़ाइलें | FileManager अस्थायी | 50 MB तक |
साझा फ़ाइलों के साथ काम करते समय, ध्यान रखें कि सिस्टम किसी भी समय एक्सटेंशन को समाप्त कर सकता है। एक साथ कई प्रक्रियाओं द्वारा लिखने पर डेटा भ्रष्टाचार से बचने के लिए पहुँच को समन्वयित करने हेतु NSFileCoordinator का उपयोग करें।
अक्सर पूछे जाने वाले प्रश्न
App Group एक iOS तंत्र है जो ऐप और उसके एक्सटेंशन के बीच डेटा संग्रहण के लिए एक साझा कंटेनर बनाता है। यह समान समूह पहचानकर्ता वाली प्रक्रियाओं को फ़ाइलों, UserDefaults सेटिंग्स और Core Data डेटा का आदान-प्रदान करने की अनुमति देता है।
Xcode में target की 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 का उपयोग करें। ये सभी API App Group निर्देशिका के साथ काम करते हैं — बस आरंभीकरण के दौरान समूह पहचानकर्ता निर्दिष्ट करें। Core Data के लिए, सुनिश्चित करें कि स्टोर URL साझा निर्देशिका की ओर इंगित करता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें