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 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.
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.
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.
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.
// 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 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.
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.
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.
<!-- 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.
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.
// 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.
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.
Ü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.
// 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.
| Ssenari | Tövsiyə olunan API | Məlumat həcmi |
|---|---|---|
| Parametrlər və bayraqlar | UserDefaults suiteName | 1 KB-a qədər |
| Şəkil keşi | FileManager + NSCache | 100 MB-a qədər |
| Strukturlaşdırılmış məlumatlar | Core Data store | 500 MB-a qədər |
| Müvəqqəti fayllar | FileManager temporary | 50 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
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 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.
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.
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.
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ə
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.
Həm də oxuyun