App Group iOS mexanizmi bo'lib, ilova va uning kengaytmalari o'rtasida ma'lumot almashish uchun umumiy konteyner yaratadi. Busiz har bir jarayon (asosiy ilova, vidjet, share extension) izolyatsiyalangan sandboxda ishlaydi va qo'shni komponent ma'lumotlariga kira olmaydi. Apple Developer Documentation, 2026-ga ko'ra, App Group bu muammoni entitlements da ko'rsatilgan yagona guruh identifikatori orqali hal qiladi. Bu iOS ekotizimida izchil foydalanuvchi tajribasini yaratish uchun fundamental vositadir.
Asosiy ma'lumotlar
App Group iOS operatsion tizimining mexanizmi bo'lib, bitta dasturchining bir nechta jarayonlari uchun umumiy saqlash maydonini ta'minlaydi. Busiz har bir kengaytma o'z sandboxida ishlaydi va boshqa komponent yozgan ma'lumotlarni o'qiy olmaydi. App Group bu izolyatsiyani to'g'ri entitlements ga ega barcha jarayonlar uchun mavjud bo'lgan fayl tizimida katalog yaratish orqali hal qiladi.
Guruh identifikatori group. prefiksi bilan boshlanadi va loyihaning entitlements faylida ko'rsatiladi. Xcode da bu identifikator Capabilities orqali qo'shiladi — tizim uni avtomatik ravishda ilova imzosiga kiritadi. Sozlashdan so'ng, guruhning barcha a'zolari konteyner ichidagi Library/Application Support/ yo'lidagi umumiy katalogga kirishadi.
Apple WWDC 2020 Session 10026 ga ko'ra, App Group uchta asosiy stsenariyni qamrab oladi: NSUserDefaults orqali sozlamalarni sinxronlashtirish, FileManager orqali fayllarga umumiy kirish va yagona ombor bilan Core Data dan birgalikda foydalanish. Har bir stsenariy uchun tegishli API da guruh identifikatorini ko'rsatish kifoya.
iOS com.apple.security.application-groups entitlement ga ega bo'lgan har qanday jarayonning birinchi ishga tushirilishida umumiy konteyner yaratadi. Jismoniy jihatdan konteyner tizim katalogida joylashgan — uning yo'li asosiy ilova va kengaytmalarning sandboxidan farq qiladi, ammo barcha vakolatli jarayonlar o'qish va yozish huquqiga ega.
Apple App Group xavfsizligini team ID va kod imzosi bog'liqligi orqali kafolatlaydi. Xuddi shu dasturchi sertifikati bilan imzolanmagan jarayon guruh konteyneriga kira olmaydi. Bu turli dasturchilarning ilovalari o'rtasida ma'lumot sizib chiqishining oldini oladi.
Identifikator formati: group.<team-id>.<name>. Masalan, group.ABC123DEFG.widget-data. Bitta qurilmada har biri o'z ishtirokchilar to'plamiga ega bo'lgan bir nechta guruh yaratilishi mumkin. Bitta ilova bir vaqtning o'zida bir nechta App Group ga tegishli bo'lishi mumkin — bu turli kengaytmalar ma'lumotlarini ajratish uchun foydali.
// App Group konteyner URLini oling
guard let containerURL = FileManager.default
.containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.widget")
else { return }
// Umumiy konteynerda fayl yarating
let fileURL = containerURL.appendingPathComponent("shared.data")
try "Hello from main app".write(to: fileURL, atomically: true, encoding: .utf8)
FileManager containerURL(forSecurityApplicationGroupIdentifier:) metodini taqdim etadi, umumiy katalogning URLini qaytaradi. Bu metodni har bir jarayonda alohida chaqirish muhim — yo'l jismoniy jihatdan bir xil, ammo har bir jarayon uni o'z xavfsizlik prizmasidan ko'radi.
Xcode da App Group ni yoqish Capabilities dan boshlanadi — App Groups kaliti loyihaga entitlement qo'shadi. Apple Developer Portal shuningdek ilova identifikatorining ushbu capability ni o'z ichiga olishini talab qiladi. Busiz kod imzosi haqiqiy qurilmada ishlamaydi.
Loyihani Xcode da oching, ilova targetini tanlang va Signing & Capabilities yorlig'iga o'ting. + tugmasini bosing va App Groups ni tanlang. Yangi guruh yarating yoki mavjudini tanlang. Umumiy konteynerga kirishi kerak bo'lgan har bir kengaytma uchun xuddi shu qadamlarni takrorlang. Barcha ishtirokchilar bir xil guruh identifikatoridan foydalanishi kerak.
Capabilities yoqilgandan so'ng, Xcode avtomatik ravishda com.apple.security.application-groups kaliti va identifikatorlar massivi bilan .entitlements faylini yaratadi. Barcha kerakli kengaytmalar guruh identifikatorida to'g'ri team ID bilan ushbu faylga ega ekanligiga ishonch hosil qiling.
<!-- Example entitlements file -->
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.example.shared</string>
</array>
Agar loyihangizda bir nechta kengaytma bo'lsa (Today Widget, Share Extension, Notification Service), har biri bir xil guruh bilan o'z entitlements fayliga ega bo'lishi kerak. Har qanday targetda entitlements yo'qligi kengaytmaning umumiy ma'lumotlarni ko'rmasligining keng tarqalgan sababidir.
Ilova va kengaytmalar o'rtasida ma'lumot sinxronlashtirishning eng oddiy usuli — suite name ko'rsatilgan holda UserDefaults. Standart UserDefaults.standard o'rniga App Group identifikatori bilan namuna yaratasiz va barcha jarayonlar bir xil sozlamalarni o'qiydi.
Apple Human Interface Guidelines ga ko'ra, bu mexanizm holatni sinxronlashtirish uchun mos keladi: tanlangan mavzu, sevimli elementlar, onbording bayroqlari. Biroq katta hajmdagi ma'lumotlar yoki raqobatli yozish operatsiyalari uchun mo'ljallanmagan — buning uchun fayllar yoki Core Data dan foydalaning.
// UserDefaults App Group ga yozing (asosiy ilova)
let defaults = UserDefaults(suiteName: "group.com.example.shared")
defaults?.set(true, forKey: "isDarkMode")
defaults?.synchronize()
// UserDefaults App Group dan o'qing (vidjet kengaytmasi)
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
let isDark = sharedDefaults?.bool(forKey: "isDarkMode") ?? false
E'tibor bering: suiteName bilan UserDefaults namunasi har bir jarayonda alohida yaratiladi, ammo umumiy konteynerdagi bitta plist-fayldan o'qiydi. synchronize() metodi darhol diskka yozishni kafolatlaydi — iOS 13+ da uni qoldirib ketish mumkin, chunki tizim ma'lumotlarni davriy ravishda sinxronlashtiradi.
Murakkabroq stsenariylar uchun App Group umumiy fayl tizimiga kirishni ta'minlaydi. Konteyner katalogida yaratilgan har qanday fayl guruhning barcha jarayonlari uchun mavjud. Bu umumiy Core Data bazasi, rasm keshi yoki vaqtinchalik fayllarni yaratish imkonini beradi.
Umumiy Core Data omboridan foydalanish uchun App Group katalogida joylashgan .sqlite faylining URLi bilan NSPersistentContainer yarating. Bir vaqtning o'zida faqat bitta jarayon bazaga yozayotganiga ishonch hosil qiling — raqobatli yozish ma'lumotlarni buzishi mumkin. Oddiy arxitektura: asosiy ilova yozadi, kengaytmalar o'qiydi.
// Core Data ni App Group konteyneri bilan sozlang
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
}()
Muqobil yondashuv — rasm keshi. NSCache faqat xotirada yashaydi, ammo App Group orqali keshlangan rasmlarni umumiy katalogda diskka saqlash mumkin. Vidjet kengaytmasi xuddi shu fayllarga kirishadi va tarmoqdan qo'shimcha yuklamasdan dolzarb ma'lumotlarni ko'rsatadi.
| Stsenariy | Tavsiya etilgan API | Ma'lumot hajmi |
|---|---|---|
| Sozlamalar va bayroqlar | UserDefaults suiteName | 1 KB gacha |
| Rasm keshi | FileManager + NSCache | 100 MB gacha |
| Strukturalashtirilgan ma'lumotlar | Core Data store | 500 MB gacha |
| Vaqtinchalik fayllar | FileManager temporary | 50 MB gacha |
Umumiy fayllar bilan ishlashda tizim istalgan vaqtda kengaytmani tushirishi mumkinligini yodda tuting. Turli jarayonlar tomonidan bir vaqtda yozishda ma'lumotlarning buzilishini oldini olish uchun kirishni muvofiqlashtirish uchun NSFileCoordinator dan foydalaning.
Tez-tez beriladigan savollar
App Group ilova va uning kengaytmalari o'rtasida ma'lumot saqlash uchun umumiy konteyner yaratadigan iOS mexanizmidir. Bir xil guruh identifikatoriga ega jarayonlarga fayl tizimidagi yagona katalog orqali fayllar, UserDefaults sozlamalari va Core Data ma'lumotlarini almashish imkonini beradi.
Xcode da targetning Capabilities qismini oching, App Groups ni yoqing va group.* formatida identifikator qo'shing. Keyin umumiy konteynerga kirishi kerak bo'lgan har bir kengaytma uchun xuddi shu qadamlarni takrorlang. Barcha ishtirokchilar bir xil guruh identifikatoridan foydalanishiga ishonch hosil qiling.
Barcha iOS kengaytma turlari App Group ni qo'llab-quvvatlaydi: Today Widget (widget extension), Share Extension, Notification Service Extension, Custom Keyboard va boshqalar. Har bir kengaytma asosiy ilova bilan bir xil guruh identifikatoriga ega bo'lgan alohida entitlements fayliga ega bo'lishi kerak.
Ha, faqat ilovalar bir xil dasturchi sertifikati bilan imzolangan va bir xil team ID ga ega bo'lsa. Apple xavfsizlikni kod imzosi orqali kafolatlaydi: turli dasturchilarning ikkita ilovasi bir xil guruh identifikatoriga ega bo'lsa ham, bitta konteynerga kira olmaydi.
Kichik sozlamalar uchun suite name bilan UserDefaults, fayllar uchun FileManager va strukturalashtirilgan ma'lumotlar uchun Core Data dan foydalaning. Bu APIlarning barchasi App Group katalogi bilan ishlaydi — inisializatsiya vaqtida guruh identifikatorini ko'rsatish kifoya. Core Data uchun ombor URLi umumiy katalogga ishora qilishiga ishonch hosil qiling.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.