App Group: bu nima, umumiy konteyner yaratish va kirishni sozlash

Muallif: IT Sectr Nashr etilgan: 2026-06-17 O'qish vaqti: 8 daq

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 fayl tizimida ilova va uning kengaytmalari uchun mavjud bo'lgan umumiy katalog.
  • Identifier group.* andozasi bo'yicha shakllanadi va Xcode loyihasining Capabilities qismiga qo'shiladi.
  • UserDefaults suite name bilan qo'shimcha kodsiz jarayonlar o'rtasida sozlamalarni sinxronlashtirish imkonini beradi.
  • Core Data App Group orqali kengaytmalarga Store URL to'g'ri sozlangan holda umumiy bazada ma'lumotlarni o'qish va yozish imkonini beradi.
  • Xavfsizlik konteynerga faqat bir xil team ID va entitlement ga ega jarayonlar kirishi bilan kafolatlanadi.

App Group nima?

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.

App Group umumiy konteyneri qanday ishlaydi

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.

Kirish huquqlari va xavfsizlik

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.

Guruh identifikatori

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.

swift
// 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 sozlash

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.

Bosqichma-bosqich sozlash

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.

Entitlements tekshirish

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.

xml
<!-- 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.

UserDefaults dan App Group bilan foydalanish

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.

swift
// 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.

Fayllarga va Core Data ga umumiy kirish

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.

Core Data ni App Group bilan sozlash

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.

swift
// 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.

StsenariyTavsiya etilgan APIMa'lumot hajmi
Sozlamalar va bayroqlarUserDefaults suiteName1 KB gacha
Rasm keshiFileManager + NSCache100 MB gacha
Strukturalashtirilgan ma'lumotlarCore Data store500 MB gacha
Vaqtinchalik fayllarFileManager temporary50 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

iOS da App Group nima?

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 App Group qanday yaratiladi?

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.

Qaysi kengaytmalar App Group dan foydalanishi mumkin?

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.

App Group turli ilovalar o'rtasida ishlatilishi mumkinmi?

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.

Ilova va vidjet o'rtasida App Group orqali ma'lumotlarni qanday sinxronlashtirish mumkin?

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

  • App Group iOS ilovasi va uning kengaytmalari o'rtasida fayl tizimidagi umumiy konteyner orqali ma'lumot almashishni tashkil qilishning yagona usulidir.
  • Guruh identifikatori group.<team-id>.<name> formatiga ega va har bir target uchun majburiy entitlements fayli bilan Xcode Capabilities orqali qo'shiladi.
  • UserDefaults suite name bilan — fayllarni boshqarmasdan jarayonlar o'rtasida sozlamalar va bayroqlarni sinxronlashtirishning eng oddiy usuli.
  • App Group bilan Core Data konteyner ichida ombor URLini ko'rsatishni va ma'lumotlar bazasining buzilishini oldini olish uchun jarayonlar o'rtasida kirish muvofiqlashtirishini talab qiladi.
  • FileManager.containerURL to'g'ri entitlements ga ega barcha jarayonlar uchun bir xil bo'lgan umumiy katalog yo'lini qaytaradi.
  • Ma'lumot xavfsizligi team ID va kod imzosini tekshirish orqali ta'minlanadi — faqat bitta dasturchining ilovalari umumiy konteynerga kirish huquqiga ega.
  • Umumiy fayllarda raqobatli yozish uchun NSFileCoordinator dan, jarayonlar o'rtasida o'zgarishlarni sinxronlashtirish uchun esa Darwin Notifications yoki CFNotificationCenter dan foydalaning.

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.

Loyihani muhokama qilish

Shuningdek o'qing