App Group: nedir, paylaşımlı kapsayıcı oluşturma ve erişim yapılandırması

Yazar: IT Sectr Yayınlanma: 2026-06-17 Okuma süresi: 8 dk

App Group, bir uygulama ve uzantıları arasında veri alışverişi için paylaşımlı bir kapsayıcı oluşturan bir iOS mekanizmasıdır. Olmadan, her süreç (ana uygulama, widget, paylaşım uzantısı) izole edilmiş bir sanal alanda çalışır ve komşu bir bileşenin verilerine erişemez. Apple Developer Documentation, 2026'ya göre, App Group bu sorunu yetkilendirmelerde belirtilen tek bir grup tanımlayıcısı aracılığıyla çözer. iOS ekosisteminde tutarlı bir kullanıcı deneyimi oluşturmak için temel bir araçtır.

Önemli Noktalar

  • App Group — iOS dosya sisteminde uygulama ve uzantılarının erişebileceği paylaşımlı bir dizindir.
  • Tanımlayıcı group.* modelini izler ve Xcode projesinin Capabilities bölümüne eklenir.
  • UserDefaults suite adı ile ek kod olmadan süreçler arasında ayarları senkronize etmeye olanak tanır.
  • Core Data App Group aracılığıyla, doğru Store URL yapılandırması ile uzantıların paylaşımlı veritabanında veri okumasına ve yazmasına izin verir.
  • Güvenlik, yalnızca aynı takım kimliği ve yetkilendirmeye sahip süreçlerin kapsayıcıya erişebilmesiyle sağlanır.

App Group Nedir?

App Group, aynı geliştiricinin birden çok süreci için paylaşımlı bir depolama alanı sağlayan bir iOS işletim sistemi mekanizmasıdır. Olmadan, her uzantı kendi sanal alanında çalışır ve başka bir bileşen tarafından yazılan verileri okuyamaz. App Group, doğru yetkilendirmelere sahip tüm süreçlerin erişebileceği dosya sisteminde bir dizin oluşturarak bu izolasyonu çözer.

Grup tanımlayıcısı group. öneki ile başlar ve projenin yetkilendirme dosyasında belirtilir. Xcode'da bu tanımlayıcı Capabilities aracılığıyla eklenir — sistem bunu otomatik olarak uygulamanın imzasına dahil eder. Yapılandırmadan sonra, tüm grup üyeleri kapsayıcı içindeki Library/Application Support/ adresindeki paylaşımlı dizine erişebilir.

Apple WWDC 2020 Session 10026'ya göre App Group üç temel senaryoyu kapsar: NSUserDefaults aracılığıyla ayarların senkronize edilmesi, FileManager aracılığıyla dosya paylaşımı ve tek bir depolama ile paylaşımlı Core Data. Her senaryo yalnızca ilgili API'de grup tanımlayıcısının belirtilmesini gerektirir.

App Group Paylaşımlı Kapsayıcısı Nasıl Çalışır

iOS, com.apple.security.application-groups yetkilendirmesine sahip herhangi bir süreç ilk kez çalıştırıldığında paylaşımlı kapsayıcıyı oluşturur. Fiziksel olarak kapsayıcı bir sistem dizininde bulunur — yolu ana uygulama ve uzantıların sanal alanından farklıdır, ancak tüm yetkili süreçler okuma ve yazma izinlerine sahiptir.

Erişim Hakları ve Güvenlik

Apple, takım kimliği ve kod imzası kombinasyonu aracılığıyla App Group'un güvenliğini sağlar. Aynı geliştirici sertifikası ile imzalanmamış bir süreç, grup kapsayıcısına erişemez. Bu, farklı geliştiricilerin uygulamaları arasında veri sızıntısını önler.

Grup Tanımlayıcısı

Tanımlayıcı formatı: group.<team-id>.<name>. Örneğin, group.ABC123DEFG.widget-data. Bir cihazda her biri kendi üye kümesine sahip birden çok grup oluşturulabilir. Tek bir uygulama aynı anda birden çok App Group'a ait olabilir — bu, farklı uzantıların verilerini ayırmak için kullanışlıdır.

swift
// Get the App Group container URL
guard let containerURL = FileManager.default
    .containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.widget")
else { return }

// Create a file in the shared container
let fileURL = containerURL.appendingPathComponent("shared.data")
try "Hello from main app".write(to: fileURL, atomically: true, encoding: .utf8)

FileManager, containerURL(forSecurityApplicationGroupIdentifier:) yöntemini sağlar ve paylaşımlı dizinin URL'sini döndürür. Bu yöntemi her süreçte ayrı ayrı çağırmak önemlidir — yol fiziksel olarak aynıdır, ancak her süreç onu kendi güvenlik perspektifinden görür.

Xcode'da App Group Kurulumu

Xcode'da App Group'u etkinleştirmek Capabilities ile başlar — App Groups anahtarı projeye yetkilendirmeyi ekler. Apple Developer Portal ayrıca uygulama tanımlayıcısının bu yeteneği içermesini gerektirir. Olmadan, kod imzası gerçek bir cihazda çalışmaz.

Adım Adım Kurulum

Xcode'da projenizi açın, uygulama hedefini seçin ve Signing & Capabilities sekmesine gidin. +'ya tıklayın ve App Groups'u seçin. Yeni bir grup oluşturun veya mevcut bir grubu seçin. Paylaşımlı kapsayıcıya erişmesi gereken her uzantı için aynı adımları tekrarlayın. Tüm katılımcılar aynı grup tanımlayıcısını kullanmalıdır.

Yetkilendirmeleri Kontrol Etme

Capabilities etkinleştirildikten sonra Xcode, com.apple.security.application-groups anahtarı ve tanımlayıcı dizisi ile otomatik olarak bir .entitlements dosyası oluşturur. Gerekli tüm uzantıların, grup tanımlayıcısında doğru takım kimliği ile bu dosyaya sahip olduğundan emin olun.

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

Projenizde birden çok uzantı varsa (Today Widget, Share Extension, Notification Service), her biri aynı grup ile kendi yetkilendirme dosyasına sahip olmalıdır. Herhangi bir hedefte yetkilendirmelerin olmaması, bir uzantının paylaşımlı verileri görememesinin yaygın bir nedenidir.

App Group ile UserDefaults Kullanımı

Bir uygulama ve uzantıları arasında veri senkronize etmenin en basit yolu, bir suite adı ile UserDefaults kullanmaktır. Standart UserDefaults.standard yerine, App Group tanımlayıcısı ile bir örnek oluşturursunuz ve tüm süreçler aynı ayarları okur.

Apple Human Interface Guidelines'a göre, bu mekanizma durumu senkronize etmek için uygundur: seçilen tema, favoriler, onboarding işaretleri. Ancak, büyük veri hacimleri veya eşzamanlı yazma işlemleri için tasarlanmamıştır — bunun için dosyaları veya Core Data'yı kullanın.

swift
// Write to UserDefaults App Group (main app)
let defaults = UserDefaults(suiteName: "group.com.example.shared")
defaults?.set(true, forKey: "isDarkMode")
defaults?.synchronize()

// Read from UserDefaults App Group (widget extension)
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
let isDark = sharedDefaults?.bool(forKey: "isDarkMode") ?? false

Not: suiteName ile UserDefaults örneği her süreçte ayrı ayrı oluşturulur ancak paylaşımlı kapsayıcıdaki aynı plist dosyasından okur. synchronize() yöntemi anında disk yazmayı garanti eder — iOS 13+'da, sistem verileri periyodik olarak senkronize ettiği için atlanabilir.

Dosyalara ve Core Data'ya Paylaşımlı Erişim

Daha karmaşık senaryolar için App Group, paylaşımlı bir dosya sistemine erişim sağlar. Kapsayıcı dizininde oluşturulan herhangi bir dosya, gruptaki tüm süreçler tarafından erişilebilir. Bu, paylaşımlı bir Core Data veritabanı, resim önbelleği veya geçici dosyalara olanak tanır.

App Group ile Core Data Yapılandırma

Paylaşımlı bir Core Data deposu kullanmak için, App Group dizininde bulunan .sqlite dosyasının URL'si ile bir NSPersistentContainer oluşturun. Bir seferde yalnızca bir sürecin veritabanına yazdığından emin olun — eşzamanlı yazma verileri bozabilir. Tipik bir mimari: ana uygulama yazar, uzantılar okur.

swift
// Setup Core Data with App Group container
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
}()

Alternatif bir yaklaşım, dosya tabanlı bir resim önbelleğidir. NSCache yalnızca bellekte yaşar, ancak App Group aracılığıyla önbelleğe alınmış resimleri paylaşımlı dizinde diske kaydedebilirsiniz. Widget uzantısı aynı dosyalara erişebilir ve ek ağ indirmesi olmadan güncel verileri görüntüleyebilir.

SenaryoÖnerilen APIVeri Boyutu
Ayarlar ve İşaretlerUserDefaults suiteName1 KB'a kadar
Resim ÖnbelleğiFileManager + NSCache100 MB'a kadar
Yapılandırılmış VeriCore Data deposu500 MB'a kadar
Geçici DosyalarFileManager geçici50 MB'a kadar

Paylaşımlı dosyalarla çalışırken, sistemin uzantıyı herhangi bir zamanda sonlandırabileceğini unutmayın. Birden çok süreç aynı anda yazarken veri bozulmasını önlemek için erişimi koordine etmek üzere NSFileCoordinator kullanın.

Sıkça Sorulan Sorular

iOS'ta App Group nedir?

App Group, bir uygulama ve uzantıları arasında veri depolamak için paylaşımlı bir kapsayıcı oluşturan bir iOS mekanizmasıdır. Aynı grup tanımlayıcısına sahip süreçlerin, dosya sistemindeki tek bir dizin aracılığıyla dosyaları, UserDefaults ayarlarını ve Core Data verilerini değiş tokuş etmesine olanak tanır.

Xcode'da App Group nasıl oluşturulur?

Xcode'da hedefin Capabilities bölümünü açın, App Groups'u etkinleştirin ve group.* formatında bir tanımlayıcı ekleyin. Ardından, paylaşımlı kapsayıcıya erişmesi gereken her uzantı için aynı adımları tekrarlayın. Tüm katılımcıların aynı grup tanımlayıcısını kullandığından emin olun.

Hangi uzantılar App Group kullanabilir?

Tüm iOS uzantı türleri App Group'u destekler: Today Widget (widget uzantısı), Share Extension, Notification Service Extension, Custom Keyboard ve diğerleri. Her uzantı, ana uygulama ile aynı grup tanımlayıcısına sahip ayrı bir yetkilendirme dosyasına sahip olmalıdır.

Farklı uygulamalar arasında App Group kullanılabilir mi?

Evet, ancak yalnızca uygulamalar aynı geliştirici sertifikası ile imzalanmışsa ve aynı takım kimliğine sahipse. Apple, kod imzası aracılığıyla güvenliği garanti eder: farklı geliştiricilerin iki uygulaması, aynı grup tanımlayıcısıyla bile aynı kapsayıcıya erişemez.

Bir uygulama ve widget arasında App Group aracılığıyla veri nasıl senkronize edilir?

Küçük ayarlar için suite adı ile UserDefaults, dosyalar için FileManager ve yapılandırılmış veriler için Core Data kullanın. Tüm bu API'ler App Group dizini ile çalışır — başlatma sırasında grup tanımlayıcısını belirtmeniz yeterlidir. Core Data için depo URL'sinin paylaşımlı dizini işaret ettiğinden emin olun.

Özet

  • App Group, bir iOS uygulaması ve uzantıları arasında dosya sistemindeki paylaşımlı bir kapsayıcı aracılığıyla veri alışverişini düzenlemenin tek yoludur.
  • Grup tanımlayıcısı group.<team-id>.<name> formatını izler ve her hedef için zorunlu bir yetkilendirme dosyası ile Xcode Capabilities aracılığıyla eklenir.
  • UserDefaults suite adı ile, dosyaları yönetmek zorunda kalmadan süreçler arasında ayarları ve işaretleri senkronize etmenin en basit yöntemidir.
  • App Group ile Core Data, kapsayıcı içinde depo URL'sinin belirtilmesini ve veritabanı bozulmasını önlemek için süreçler arasında erişim koordinasyonu gerektirir.
  • FileManager.containerURL, doğru yetkilendirmelere sahip tüm süreçler için aynı olan paylaşımlı dizinin yolunu döndürür.
  • Veri güvenliği takım kimliği ve kod imzası doğrulaması ile sağlanır — yalnızca aynı geliştiricinin uygulamaları paylaşımlı kapsayıcıya erişebilir.
  • Paylaşımlı dosyalara eşzamanlı yazma için NSFileCoordinator ve süreçler arasında değişiklikleri senkronize etmek için Darwin Notifications veya CFNotificationCenter kullanın.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun