App Group: bu nədir, ümumi konteynerin yaradılması və girişin konfiqurasiyası

Müəllif: IT Sectr Dərc olunub: 2026-06-17 Oxuma vaxtı: 8 dəq

App Group iOS mexanizmidir, tətbiq və onun genişlənmələri arasında məlumat mübadiləsi üçün ümumi konteyner yaradır. Onsuz hər bir proses (əsas tətbiq, vidjet, share extension) təcrid olunmuş sandbox-da işləyir və qonşu komponentin məlumatlarına girişi olmur. Apple Developer Documentation, 2026-ya görə, App Group bu problemi entitlements-də göstərilən vahid qrup identifikatoru vasitəsilə həll edir. Bu, iOS ekosistemində ardıcıl istifadəçi təcrübəsi yaratmaq üçün fundamental alətdir.

Əsas məqamlar

  • App Group — iOS fayl sistemində tətbiq və onun genişlənmələri üçün əlçatan olan ümumi kataloq.
  • Identifier group.* şablonu ilə formalaşır və Xcode layihəsinin Capabilities hissəsində əlavə edilir.
  • UserDefaults suite name ilə proseslər arasında əlavə kod olmadan parametrləri sinxronlaşdırmağa imkan verir.
  • Core Data App Group vasitəsilə genişlənmələrə Store URL-in düzgün konfiqurasiyası ilə ümumi bazaya məlumat oxumaq və yazmaq imkanı verir.
  • Təhlükəsizlik konteynerə yalnız eyni team ID və entitlement-ə malik proseslərin girişi ilə təmin edilir.

App Group nədir?

App Group bir tərtibatçının bir çox prosesi üçün ümumi saxlama sahəsi təmin edən iOS əməliyyat sistemi mexanizmidir. Onsuz hər bir genişlənmə öz sandboxunda işləyir və başqa komponentin yazdığı məlumatları oxuya bilmir. App Group bu izolyasiyanı həll edir, düzgün entitlements-ə malik bütün proseslər üçün əlçatan olan fayl sistemində kataloq yaradır.

Qrup identifikatoru group. prefiksi ilə başlayır və layihənin entitlements faylında göstərilir. Xcode-da bu identifikator Capabilities vasitəsilə əlavə edilir — sistem onu avtomatik olaraq tətbiqin imzasına daxil edir. Konfiqurasiyadan sonra qrupun bütün üzvləri konteyner daxilində Library/Application Support/ yolunda ümumi kataloqa çıxış əldə edirlər.

Apple WWDC 2020 Session 10026-ya görə, App Group üç əsas ssenarini əhatə edir: NSUserDefaults vasitəsilə parametrlərin sinxronlaşdırılması, FileManager vasitəsilə fayllara ümumi giriş və vahid yaddaşla Core Data-nın birgə istifadəsi. Hər bir ssenari üçün müvafiq API-də qrup identifikatorunu göstərmək kifayətdir.

App Group ümumi konteyneri necə işləyir

iOS com.apple.security.application-groups entitlement-ə malik hər hansı bir prosesin ilk işə salınmasında ümumi konteyner yaradır. Fiziki olaraq konteyner sistem kataloqunda yerləşir — onun yolu əsas tətbiqin və genişlənmələrin sandboxundan fərqlənir, lakin bütün səlahiyyətli proseslər oxuma və yazma hüququna malikdir.

Giriş hüquqları və təhlükəsizlik

Apple App Group-un təhlükəsizliyini team ID və kod imzası əlaqəsi vasitəsilə təmin edir. Eyni tərtibatçı sertifikatı ilə imzalanmayan proses qrup konteynerinə daxil ola bilməz. Bu, müxtəlif tərtibatçıların tətbiqləri arasında məlumat sızmasının qarşısını alır.

Qrup identifikatoru

Identifikator formatı: group.<team-id>.<name>. Məsələn, group.ABC123DEFG.widget-data. Bir cihazda hər biri öz üzv dəsti ilə bir neçə qrup yaradıla bilər. Bir tətbiq eyni anda bir neçə App Group-a daxil ola bilər — bu, müxtəlif genişlənmələrin məlumatlarını ayırmaq üçün faydalıdır.

swift
// App Group konteyner URL-ni əldə edin
guard let containerURL = FileManager.default
    .containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.widget")
else { return }

// Ümumi konteynerdə fayl yaradın
let fileURL = containerURL.appendingPathComponent("shared.data")
try "Hello from main app".write(to: fileURL, atomically: true, encoding: .utf8)

FileManager containerURL(forSecurityApplicationGroupIdentifier:) metodunu təqdim edir, ümumi kataloqun URL-ni qaytarır. Bu metodu hər bir prosesdə ayrıca çağırmaq vacibdir — yol fiziki olaraq eynidir, lakin hər bir proses onu öz təhlükəsizlik prizmasından görür.

Xcode-da App Group-un qurulması

Xcode-da App Group-un aktivləşdirilməsi Capabilities-dən başlayır — App Groups açarı layihəyə entitlement əlavə edir. Apple Developer Portal həmçinin tətbiq identifikatorunun bu capability-ni ehtiva etməsini tələb edir. Olmadan kod imzası real cihazda işləməyəcək.

Addım-addım qurulma

Layihəni Xcode-da açın, tətbiq targetini seçin və Signing & Capabilities sekmesine keçin. + düyməsini basın və App Groups seçin. Yeni qrup yaradın və ya mövcud olanı seçin. Ümumi konteynerə girişi olmalı olan hər bir genişlənmə üçün eyni addımları təkrarlayın. Bütün iştirakçılar eyni qrup identifikatorundan istifadə etməlidir.

Entitlements yoxlanması

Capabilities aktivləşdirildikdən sonra Xcode avtomatik olaraq com.apple.security.application-groups açarı və identifikatorlar massivi ilə .entitlements faylı yaradır. Bütün lazımi genişlənmələrin qrup identifikatorunda düzgün team ID ilə bu fayla malik olduğundan əmin olun.

xml
<!-- Example entitlements file -->
<key>com.apple.security.application-groups</key>
<array>
    <string>group.com.example.shared</string>
</array>

Layihənizdə bir neçə genişlənmə varsa (Today Widget, Share Extension, Notification Service), hər biri eyni qrup ilə öz entitlements faylına malik olmalıdır. Hər hansı bir targetdə entitlements-in olmaması genişlənmənin ümumi məlumatları görməməsinin ümumi səbəbidir.

UserDefaults-dan App Group ilə istifadə

Tətbiq və genişlənmələr arasında məlumat sinxronizasiyasının ən sadə yolu — suite name göstərilməklə UserDefaults-dur. Standart UserDefaults.standard əvəzinə App Group identifikatoru ilə nümunə yaradırsınız və bütün proseslər eyni parametrləri oxuyur.

Apple Human Interface Guidelines-ə görə, bu mexanizm vəziyyətin sinxronlaşdırılması üçün uyğundur: seçilmiş mövzu, seçilmiş elementlər, onbordinq bayraqları. Lakin böyük həcmli məlumatlar və ya rəqabətli yazma əməliyyatları üçün nəzərdə tutulmayıb — bunun üçün fayllar və ya Core Data istifadə edin.

swift
// UserDefaults App Group-a yazın (əsas tətbiq)
let defaults = UserDefaults(suiteName: "group.com.example.shared")
defaults?.set(true, forKey: "isDarkMode")
defaults?.synchronize()

// UserDefaults App Group-dan oxuyun (vidjet genişlənməsi)
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
let isDark = sharedDefaults?.bool(forKey: "isDarkMode") ?? false

Diqqət edin: suiteName ilə UserDefaults nümunəsi hər bir prosesdə ayrıca yaradılır, lakin ümumi konteynerdəki bir plist-fayldan oxuyur. synchronize() metodu dərhal diskə yazmağı təmin edir — iOS 13+-da onu buraxmaq olar, çünki sistem məlumatları dövri olaraq sinxronlaşdırır.

Fayllara və Core Data-ya ümumi giriş

Daha mürəkkəb ssenarilər üçün App Group ümumi fayl sisteminə giriş təmin edir. Konteyner kataloqunda yaradılan hər hansı bir fayl qrupun bütün prosesləri üçün əlçatandır. Bu, ümumi Core Data bazası, şəkil keşi və ya müvəqqəti fayllar yaratmağa imkan verir.

Core Data-nın App Group ilə konfiqurasiyası

Ümumi Core Data yaddaşından istifadə etmək üçün App Group kataloqunda yerləşən .sqlite faylının URL-i ilə NSPersistentContainer yaradın. Eyni anda yalnız bir prosesin bazaya yazdığından əmin olun — rəqabətli yazma məlumatları zədələyə bilər. Tipik arxitektura: əsas tətbiq yazır, genişlənmələr oxuyur.

swift
// Core Data-nı App Group konteyneri ilə qurun
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
}()

Alternativ yanaşma — şəkil keşi. NSCache yalnız yaddaşda yaşayır, lakin App Group vasitəsilə keşləşdirilmiş şəkilləri ümumi kataloqda diskə yadda saxlamaq olar. Vidjet genişlənməsi eyni fayllara çıxış əldə edir və şəbəkədən əlavə yükləmə olmadan aktual məlumatları göstərir.

SsenariTövsiyə olunan APIMəlumat həcmi
Parametrlər və bayraqlarUserDefaults suiteName1 KB-a qədər
Şəkil keşiFileManager + NSCache100 MB-a qədər
Strukturlaşdırılmış məlumatlarCore Data store500 MB-a qədər
Müvəqqəti fayllarFileManager temporary50 MB-a qədər

Ümumi fayllarla işləyərkən nəzərə alın ki, sistem istənilən vaxt genişlənməni boşalda bilər. Müxtəlif proseslər tərəfindən eyni vaxtda yazma zamanı məlumatların zədələnməsinin qarşısını almaq üçün girişi koordinasiya etmək üçün NSFileCoordinator-dan istifadə edin.

Tez-tez verilən suallar

iOS-da App Group nədir?

App Group tətbiq və onun genişlənmələri arasında məlumat saxlamaq üçün ümumi konteyner yaradan iOS mexanizmidir. Eyni qrup identifikatoruna malik proseslərə fayl sistemi üzərində ümumi kataloq vasitəsilə faylları, UserDefaults parametrlərini və Core Data məlumatlarını mübadilə etməyə imkan verir.

Xcode-da App Group necə yaradılır?

Xcode-da targetin Capabilities hissəsini açın, App Groups-u aktivləşdirin və group.* formatında identifikator əlavə edin. Sonra ümumi konteynerə girişi olmalı olan hər bir genişlənmə üçün eyni addımları təkrarlayın. Bütün iştirakçıların eyni qrup identifikatorundan istifadə etdiyinə əmin olun.

Hansı genişlənmələr App Group-dan istifadə edə bilər?

Bütün iOS genişlənmə növləri App Group-u dəstəkləyir: Today Widget (widget extension), Share Extension, Notification Service Extension, Custom Keyboard və digərləri. Hər bir genişlənmə əsas tətbiq ilə eyni qrup identifikatoru ilə ayrıca entitlements faylına malik olmalıdır.

App Group müxtəlif tətbiqlər arasında istifadə edilə bilərmi?

Bəli, ancaq tətbiqlər eyni tərtibatçı sertifikatı ilə imzalanıbsa və eyni team ID-yə malikdirsə. Apple təhlükəsizliyi kod imzası vasitəsilə təmin edir: müxtəlif tərtibatçıların iki tətbiqi eyni qrup identifikatoru olsa belə, bir konteynerə daxil ola bilməz.

Tətbiq və vidjet arasında App Group vasitəsilə məlumatları necə sinxronlaşdırmaq olar?

Kiçik parametrlər üçün suite name ilə UserDefaults, fayllar üçün FileManager və strukturlaşdırılmış məlumatlar üçün Core Data istifadə edin. Bütün bu API-lər App Group kataloqu ilə işləyir — inisializasiya zamanı qrup identifikatorunu göstərmək kifayətdir. Core Data üçün yaddaş URL-nin ümumi kataloqu göstərdiyinə əmin olun.

Nəticə

  • App Group iOS tətbiqi və onun genişlənmələri arasında fayl sistemində ümumi konteyner vasitəsilə məlumat mübadiləsini təşkil etməyin yeganə yoludur.
  • Qrup identifikatoru group.<team-id>.<name> formatına malikdir və hər bir target üçün məcburi entitlements faylı ilə Xcode Capabilities vasitəsilə əlavə edilir.
  • UserDefaults suite name ilə — faylları idarə etmədən proseslər arasında parametrləri və bayraqları sinxronlaşdırmağın ən sadə üsuludur.
  • App Group ilə Core Data konteyner daxilində yaddaş URL-nin göstərilməsini və məlumat bazasının zədələnməsinin qarşısını almaq üçün proseslər arasında giriş koordinasiyasını tələb edir.
  • FileManager.containerURL düzgün entitlements-ə malik bütün proseslər üçün eyni olan ümumi kataloqun yolunu qaytarır.
  • Məlumat təhlükəsizliyi team ID və kod imzasının yoxlanması ilə təmin edilir — yalnız bir tərtibatçının tətbiqləri ümumi konteynerə giriş əldə edir.
  • Ümumi fayllarda rəqabətli yazma üçün NSFileCoordinator-dan, proseslər arasında dəyişikliklərin sinxronlaşdırılması üçün isə Darwin Notifications və ya CFNotificationCenter-dən istifadə edin.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun