Ang App Group ay isang mekanismo ng iOS na lumilikha ng shared container para sa pagpapalitan ng data sa pagitan ng app at ng mga extension nito. Kung wala ito, ang bawat proseso (pangunahing app, widget, share extension) ay gumagana sa isang isolated na sandbox at walang access sa data ng kalapit na component. Ayon sa Apple Developer Documentation, 2026, nilulutas ng App Group ang problemang ito sa pamamagitan ng isang natatanging identifier ng grupo na tinukoy sa entitlements. Ito ay isang pangunahing kasangkapan para sa paglikha ng isang consistent na karanasan ng user sa iOS ecosystem.
Mga Pangunahing Punto
App Group ay isang mekanismo ng operating system ng iOS na nagbibigay ng shared storage area para sa maraming proseso ng isang developer. Kung wala ito, ang bawat extension ay gumagana sa sarili nitong sandbox at hindi mababasa ang data na isinulat ng ibang component. Nilulutas ng App Group ang isolation na ito sa pamamagitan ng paggawa ng directory sa file system na naa-access ng lahat ng prosesong may tamang entitlements.
Ang identifier ng grupo ay nagsisimula sa prefix na group. at tinukoy sa entitlements file ng proyekto. Sa Xcode, ang identifier na ito ay idinadagdag sa pamamagitan ng Capabilities — awtomatikong isinasama ito ng system sa lagda ng app. Pagkatapos ng configuration, ang lahat ng miyembro ng grupo ay nakakakuha ng access sa shared directory sa path na Library/Application Support/ sa loob ng container.
Ayon sa Apple WWDC 2020 Session 10026, sinasaklaw ng App Group ang tatlong pangunahing scenario: pag-sync ng mga setting sa pamamagitan ng NSUserDefaults, shared access sa mga file sa pamamagitan ng FileManager, at shared na paggamit ng Core Data na may iisang storage. Para sa bawat scenario, sapat na upang tukuyin ang identifier ng grupo sa kaukulang API.
Lumilikha ang iOS ng shared container sa unang pagtakbo ng anumang proseso na may entitlement na com.apple.security.application-groups. Pisikal, ang container ay nasa system directory — ang path nito ay naiiba sa sandbox ng pangunahing app at mga extension, ngunit ang lahat ng awtorisadong proseso ay may karapatang magbasa at magsulat.
Ginagarantiya ng Apple ang seguridad ng App Group sa pamamagitan ng ugnayan ng team ID at lagda ng code. Ang isang proseso na hindi nilagdaan ng parehong developer certificate ay hindi maaaring ma-access ang container ng grupo. Pinipigilan nito ang pagtagas ng data sa pagitan ng mga app ng iba't ibang developer.
Format ng identifier: group.<team-id>.<name>. Halimbawa, group.ABC123DEFG.widget-data. Sa isang device, maraming grupo ang maaaring gawin, bawat isa ay may sariling set ng mga kalahok. Ang isang app ay maaaring kabilang sa maraming App Group nang sabay-sabay — ito ay kapaki-pakinabang para sa paghihiwalay ng data ng iba't ibang extension.
// Kunin ang URL ng App Group container
guard let containerURL = FileManager.default
.containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.widget")
else { return }
// Gumawa ng file sa shared container
let fileURL = containerURL.appendingPathComponent("shared.data")
try "Hello from main app".write(to: fileURL, atomically: true, encoding: .utf8)
Ang FileManager ay nagbibigay ng method na containerURL(forSecurityApplicationGroupIdentifier:) na nagbabalik ng URL ng shared directory. Mahalagang tawagan ang method na ito sa bawat proseso nang hiwalay — ang path ay pisikal na pareho, ngunit nakikita ito ng bawat proseso sa pamamagitan ng sarili nitong prisma ng seguridad.
Ang pag-activate ng App Group sa Xcode ay nagsisimula sa Capabilities — ang switch na App Groups ay nagdaragdag ng entitlement sa proyekto. Ang Apple Developer Portal ay nangangailangan din na ang identifier ng app ay may kasamang capability na ito. Kung wala ito, ang lagda ng code ay hindi gagana sa isang tunay na device.
Buksan ang proyekto sa Xcode, piliin ang target ng app at pumunta sa tab na Signing & Capabilities. Pindutin ang + at piliin ang App Groups. Gumawa ng bagong grupo o pumili ng umiiral na. Ulitin ang parehong mga hakbang para sa bawat extension na dapat may access sa shared container. Ang lahat ng kalahok ay dapat gumamit ng parehong identifier ng grupo.
Pagkatapos i-activate ang Capabilities, awtomatikong gumagawa ang Xcode ng .entitlements file na may key na com.apple.security.application-groups at array ng mga identifier. Tiyakin na ang lahat ng kinakailangang extension ay may file na ito na may tamang team ID sa identifier ng grupo.
<!-- Example entitlements file -->
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.example.shared</string>
</array>
Kung ang iyong proyekto ay may maraming extension (Today Widget, Share Extension, Notification Service), ang bawat isa ay dapat may sariling entitlements file na may parehong grupo. Ang kawalan ng entitlements sa anumang target ay isang karaniwang dahilan kung bakit hindi nakikita ng extension ang shared data.
Ang pinakasimpleng paraan upang i-sync ang data sa pagitan ng app at mga extension — UserDefaults na may pagtukoy ng suite name. Sa halip na karaniwang UserDefaults.standard, gumawa ka ng instance na may identifier ng App Group at lahat ng proseso ay nagbabasa ng parehong mga setting.
Ayon sa Apple Human Interface Guidelines, ang mekanismong ito ay angkop para sa pag-sync ng estado: napiling theme, paboritong item, onbording flag. Gayunpaman, hindi ito dinisenyo para sa malalaking volume ng data o concurrent write operations — para dito gumamit ng mga file o Core Data.
// Sumulat sa UserDefaults App Group (pangunahing app)
let defaults = UserDefaults(suiteName: "group.com.example.shared")
defaults?.set(true, forKey: "isDarkMode")
defaults?.synchronize()
// Magbasa mula sa UserDefaults App Group (widget extension)
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
let isDark = sharedDefaults?.bool(forKey: "isDarkMode") ?? false
Tandaan: ang instance ng UserDefaults na may suiteName ay ginagawa sa bawat proseso nang hiwalay, ngunit nagbabasa mula sa isang plist file sa shared container. Ang method na synchronize() ay ginagarantiya ang agarang pagsulat sa disk — sa iOS 13+ maaari itong alisin dahil ang system ay pana-panahong nagsi-sync ng data.
Para sa mas kumplikadong mga scenario, ang App Group ay nagbibigay ng access sa shared file system. Anumang file na ginawa sa container directory ay naa-access ng lahat ng proseso ng grupo. Ito ay nagpapahintulot ng pagpapatupad ng shared Core Data database, image cache, o temporary file.
Upang gumamit ng shared Core Data storage, gumawa ng NSPersistentContainer na may URL ng .sqlite file na nasa App Group directory. Tiyakin na isang proseso lamang ang nagsusulat sa database sa isang pagkakataon — concurrent writing ay maaaring makasira ng data. Karaniwang arkitektura: ang pangunahing app ay nagsusulat, ang mga extension ay nagbabasa.
// I-configure ang Core Data gamit ang 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
}()
Alternatibong approach — file cache para sa mga larawan. Ang NSCache ay nabubuhay lamang sa memory, ngunit sa pamamagitan ng App Group maaari mong i-save ang naka-cache na mga larawan sa disk sa shared directory. Ang widget extension ay nakakakuha ng access sa parehong mga file at nagpapakita ng napapanahong data nang walang karagdagang pag-load mula sa network.
| Scenario | Inirerekomendang API | Sukat ng Data |
|---|---|---|
| Mga setting at flag | UserDefaults suiteName | hanggang 1 KB |
| Image cache | FileManager + NSCache | hanggang 100 MB |
| Structured data | Core Data store | hanggang 500 MB |
| Temporary file | FileManager temporary | hanggang 50 MB |
Kapag nagtatrabaho sa shared files, isaalang-alang na maaaring i-unload ng system ang extension anumang oras. Gamitin ang NSFileCoordinator para sa koordinasyon ng access upang maiwasan ang pagkasira ng data sa concurrent writing ng iba't ibang proseso.
Mga Madalas Itanong
App Group ay isang mekanismo ng iOS na lumilikha ng shared container para sa pag-iimbak ng data sa pagitan ng app at mga extension nito. Pinapayagan nito ang mga prosesong may parehong identifier ng grupo na magpalitan ng mga file, UserDefaults setting, at Core Data data sa pamamagitan ng iisang directory sa file system.
Buksan ang Capabilities ng target sa Xcode, i-activate ang App Groups at magdagdag ng identifier sa format na group.*. Pagkatapos ay ulitin ang parehong mga hakbang para sa bawat extension na dapat may access sa shared container. Tiyakin na lahat ng kalahok ay gumagamit ng parehong identifier ng grupo.
Lahat ng uri ng iOS extension ay sumusuporta sa App Group: Today Widget (widget extension), Share Extension, Notification Service Extension, Custom Keyboard at iba pa. Ang bawat extension ay dapat may hiwalay na entitlements file na may parehong identifier ng grupo gaya ng pangunahing app.
Oo, ngunit kung ang mga app ay nilagdaan ng parehong developer certificate at may parehong team ID. Ginagarantiya ng Apple ang seguridad sa pamamagitan ng lagda ng code: dalawang app mula sa iba't ibang developer ay hindi maaaring ma-access ang parehong container kahit na may parehong identifier ng grupo.
Gamitin ang UserDefaults na may suite name para sa maliliit na setting, FileManager para sa mga file, at Core Data para sa structured data. Lahat ng API na ito ay gumagana sa App Group directory — sapat na upang tukuyin ang identifier ng grupo sa initialization. Para sa Core Data, tiyakin na ang URL ng storage ay tumuturo sa shared directory.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din