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, 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.
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.
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.
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.
// 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'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.
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.
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.
<!-- 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.
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.
// 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.
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.
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.
// 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 API | Veri Boyutu |
|---|---|---|
| Ayarlar ve İşaretler | UserDefaults suiteName | 1 KB'a kadar |
| Resim Önbelleği | FileManager + NSCache | 100 MB'a kadar |
| Yapılandırılmış Veri | Core Data deposu | 500 MB'a kadar |
| Geçici Dosyalar | FileManager geçici | 50 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
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 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.
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.
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.
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
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.
Ayrıca okuyun