App Group: co to je, vytvoření sdíleného kontejneru a nastavení přístupu

Autor: IT Sectr Publikováno: 2026-06-17 Doba čtení: 8 min

App Group je mechanismus iOS, který vytváří sdílený kontejner pro výměnu dat mezi aplikací a jejími rozšířeními. Bez něj každý proces (hlavní aplikace, widget, share extension) pracuje v izolovaném sandboxu a nemá přístup k datům sousední komponenty. Podle Apple Developer Documentation, 2026 řeší App Group tento problém pomocí jedinečného identifikátoru skupiny uvedeného v entitlements. Je to zásadní nástroj pro vytvoření konzistentního uživatelského zážitku v ekosystému iOS.

Hlavní body

  • App Group — sdílený adresář v souborovém systému iOS, přístupný aplikaci a jejím rozšířením.
  • Identifier se tvoří podle vzoru group.* a přidává se v Capabilities projektu Xcode.
  • UserDefaults s názvem sady (suite name) umožňuje synchronizaci nastavení mezi procesy bez dalšího kódu.
  • Core Data přes App Group umožňuje rozšířením číst a zapisovat data do sdílené databáze při správném nastavení Store URL.
  • Bezpečnost je zaručena tím, že ke kontejneru mají přístup pouze procesy se stejným team ID a entitlementem.

Co je App Group?

App Group je mechanismus operačního systému iOS, který poskytuje sdílené úložiště pro několik procesů jednoho vývojáře. Bez něj každé rozšíření pracuje ve svém vlastním sandboxu a nemůže číst data zapsaná jinou komponentou. App Group řeší tuto izolaci vytvořením adresáře v souborovém systému přístupného všem procesům se správnými entitlements.

Identifikátor skupiny začíná předponou group. a je uveden v souboru entitlements projektu. V Xcode se tento identifikátor přidává přes Capabilities — systém jej automaticky zahrne do podpisu aplikace. Po nastavení získají všichni členové skupiny přístup ke sdílenému adresáři v cestě Library/Application Support/ uvnitř kontejneru.

Podle Apple WWDC 2020 Session 10026 pokrývá App Group tři klíčové scénáře: synchronizaci nastavení přes NSUserDefaults, sdílený přístup k souborům přes FileManager a sdílené použití Core Data s jedním úložištěm. Pro každý scénář stačí uvést identifikátor skupiny v příslušném API.

Jak funguje sdílený kontejner App Group

iOS vytvoří sdílený kontejner při prvním spuštění jakéhokoli procesu, který má entitlement com.apple.security.application-groups. Fyzicky se kontejner nachází v systémovém adresáři — jeho cesta se liší od sandboxu hlavní aplikace a rozšíření, ale všechny autorizované procesy mají práva pro čtení a zápis.

Přístupová práva a bezpečnost

Apple zaručuje bezpečnost App Group prostřednictvím propojení team ID a podpisu kódu. Proces, který není podepsán stejným vývojářským certifikátem, nemůže získat přístup ke kontejneru skupiny. Tím se zabraňuje úniku dat mezi aplikacemi různých vývojářů.

Identifikátor skupiny

Formát identifikátoru: group.<team-id>.<name>. Například group.ABC123DEFG.widget-data. Na jednom zařízení lze vytvořit více skupin, každou s vlastní sadou účastníků. Jedna aplikace může patřit do několika App Group současně — to je užitečné pro oddělení dat různých rozšíření.

swift
// Získejte URL kontejneru App Group
guard let containerURL = FileManager.default
    .containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.widget")
else { return }

// Vytvořte soubor ve sdíleném kontejneru
let fileURL = containerURL.appendingPathComponent("shared.data")
try "Hello from main app".write(to: fileURL, atomically: true, encoding: .utf8)

FileManager poskytuje metodu containerURL(forSecurityApplicationGroupIdentifier:), která vrací URL sdíleného adresáře. Je důležité volat tuto metodu v každém procesu zvlášť — cesta je fyzicky stejná, ale každý proces ji vidí skrze vlastní prizma bezpečnosti.

Nastavení App Group v Xcode

Zapnutí App Group v Xcode začíná u Capabilities — přepínač App Groups přidá entitlement do projektu. Apple Developer Portal také vyžaduje, aby identifikátor aplikace obsahoval tuto capability. Bez ní nebude podpis kódu fungovat na skutečném zařízení.

Nastavení krok za krokem

Otevřete projekt v Xcode, vyberte target aplikace a přejděte na kartu Signing & Capabilities. Stiskněte + a vyberte App Groups. Vytvořte novou skupinu nebo vyberte existující. Opakujte stejné kroky pro každé rozšíření, které by mělo mít přístup ke sdílenému kontejneru. Všichni účastníci musí používat stejný identifikátor skupiny.

Kontrola entitlements

Po zapnutí Capabilities Xcode automaticky vytvoří soubor .entitlements s klíčem com.apple.security.application-groups a polem identifikátorů. Ujistěte se, že všechna potřebná rozšíření mají tento soubor se správným team ID v identifikátoru skupiny.

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

Pokud má váš projekt několik rozšíření (Today Widget, Share Extension, Notification Service), každé by mělo mít vlastní soubor entitlements se stejnou skupinou. Chybějící entitlements u jakéhokoli targetu je častou příčinou, proč rozšíření nevidí sdílená data.

Použití UserDefaults s App Group

Nejjednodušší způsob synchronizace dat mezi aplikací a rozšířeními — UserDefaults s uvedením názvu sady (suite name). Místo standardního UserDefaults.standard vytvoříte instanci s identifikátorem App Group a všechny procesy čtou stejná nastavení.

Podle Apple Human Interface Guidelines je tento mechanismus vhodný pro synchronizaci stavu: vybraného motivu, oblíbených položek, onbordingových příznaků. Není však určen pro velké objemy dat nebo konkurenční operace zápisu — k tomu použijte soubory nebo Core Data.

swift
// Zapsat do UserDefaults App Group (hlavní aplikace)
let defaults = UserDefaults(suiteName: "group.com.example.shared")
defaults?.set(true, forKey: "isDarkMode")
defaults?.synchronize()

// Číst z UserDefaults App Group (rozšíření widgetu)
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
let isDark = sharedDefaults?.bool(forKey: "isDarkMode") ?? false

Upozornění: instance UserDefaults s suiteName se vytváří v každém procesu zvlášť, ale čte z jednoho souboru plist ve sdíleném kontejneru. Metoda synchronize() zaručuje okamžitý zápis na disk — v iOS 13+ ji lze vynechat, protože systém data periodicky synchronizuje.

Sdílený přístup k souborům a Core Data

Pro složitější scénáře poskytuje App Group přístup ke sdílenému souborovému systému. Jakýkoli soubor vytvořený v adresáři kontejneru je přístupný všem procesům skupiny. To umožňuje implementaci sdílené databáze Core Data, mezipaměti obrázků nebo dočasných souborů.

Nastavení Core Data s App Group

Pro použití sdíleného úložiště Core Data vytvořte NSPersistentContainer s URL souboru .sqlite umístěného v adresáři App Group. Ujistěte se, že do databáze zapisuje vždy jen jeden proces — konkurenční zápis může poškodit data. Typická architektura: hlavní aplikace zapisuje, rozšíření čtou.

swift
// Nastavit Core Data s kontejnerem App Group
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
}()

Alternativní přístup — mezipaměť obrázků na disku. NSCache žije pouze v paměti, ale přes App Group můžete ukládat obrázky z mezipaměti na disk do sdíleného adresáře. Rozšíření widgetu získá přístup ke stejným souborům a zobrazuje aktuální data bez dalšího načítání ze sítě.

ScénářDoporučené APIVelikost dat
Nastavení a příznakyUserDefaults suiteNamedo 1 KB
Mezipaměť obrázkůFileManager + NSCachedo 100 MB
Strukturovaná dataCore Data storedo 500 MB
Dočasné souboryFileManager temporarydo 50 MB

Při práci se sdílenými soubory mějte na paměti, že systém může rozšíření kdykoli uvolnit z paměti. Použijte NSFileCoordinator pro koordinaci přístupu, abyste předešli poškození dat při současném zápisu různými procesy.

Často kladené otázky

Co je App Group v iOS?

App Group je mechanismus iOS, který vytváří sdílený kontejner pro ukládání dat mezi aplikací a jejími rozšířeními. Umožňuje procesům se stejným identifikátorem skupiny vyměňovat si soubory, nastavení UserDefaults a data Core Data prostřednictvím jediného adresáře v souborovém systému.

Jak vytvořit App Group v Xcode?

Otevřete Capabilities targetu v Xcode, zapněte App Groups a přidejte identifikátor ve formátu group.*. Poté opakujte stejné kroky pro každé rozšíření, které by mělo mít přístup ke sdílenému kontejneru. Ujistěte se, že všichni účastníci používají stejný identifikátor skupiny.

Která rozšíření mohou používat App Group?

Všechny typy iOS rozšíření podporují App Group: Today Widget (widget extension), Share Extension, Notification Service Extension, Custom Keyboard a další. Každé rozšíření by mělo mít vlastní soubor entitlements se stejným identifikátorem skupiny jako hlavní aplikace.

Lze App Group použít mezi různými aplikacemi?

Ano, ale pouze pokud jsou aplikace podepsány stejným vývojářským certifikátem a mají stejné team ID. Apple zaručuje bezpečnost prostřednictvím podpisu kódu: dvě aplikace od různých vývojářů nemohou získat přístup ke stejnému kontejneru, ani se stejným identifikátorem skupiny.

Jak synchronizovat data přes App Group mezi aplikací a widgetem?

Použijte UserDefaults s názvem sady pro malá nastavení, FileManager pro soubory a Core Data pro strukturovaná data. Všechna tato API pracují s adresářem App Group — stačí uvést identifikátor skupiny při inicializaci. Pro Core Data se ujistěte, že URL úložiště ukazuje na sdílený adresář.

Shrnutí

  • App Group je jediný způsob, jak organizovat výměnu dat mezi iOS aplikací a jejími rozšířeními prostřednictvím sdíleného kontejneru v souborovém systému.
  • Identifikátor skupiny má formát group.<team-id>.<name> a přidává se přes Capabilities Xcode s povinným souborem entitlements pro každý target.
  • UserDefaults s názvem sady je nejjednodušší metoda synchronizace nastavení a příznaků mezi procesy bez správy souborů.
  • Core Data s App Group vyžaduje uvedení URL úložiště uvnitř kontejneru a koordinaci přístupu mezi procesy, aby se předešlo poškození databáze.
  • FileManager.containerURL vrací cestu ke sdílenému adresáři, která je stejná pro všechny procesy se správnými entitlements.
  • Bezpečnost dat je zajištěna kontrolou team ID a podpisu kódu — pouze aplikace stejného vývojáře mají přístup ke sdílenému kontejneru.
  • Pro konkurenční zápis do sdílených souborů použijte NSFileCoordinator a pro synchronizaci změn mezi procesy — Darwin Notifications nebo CFNotificationCenter.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také