App Group adalah mekanisme iOS yang membuat container bersama untuk pertukaran data antara aplikasi dan ekstensinya. Tanpanya, setiap proses (aplikasi utama, widget, share extension) berjalan di sandbox terisolasi dan tidak memiliki akses ke data komponen tetangga. Menurut Apple Developer Documentation, 2026, App Group memecahkan masalah ini melalui pengidentifikasi grup tunggal yang ditentukan di entitlements. Ini adalah alat fundamental untuk menciptakan pengalaman pengguna yang konsisten di ekosistem iOS.
Poin Utama
App Group adalah mekanisme sistem operasi iOS yang menyediakan area penyimpanan bersama untuk beberapa proses dari satu pengembang. Tanpanya, setiap ekstensi bekerja di sandbox-nya sendiri dan tidak dapat membaca data yang ditulis oleh komponen lain. App Group memecahkan isolasi ini dengan membuat direktori di sistem file yang dapat diakses oleh semua proses dengan entitlements yang benar.
Pengidentifikasi grup dimulai dengan awalan group. dan ditentukan dalam file entitlements proyek. Di Xcode, pengidentifikasi ini ditambahkan melalui Capabilities — sistem secara otomatis memasukkannya ke dalam tanda tangan aplikasi. Setelah konfigurasi, semua anggota grup mendapatkan akses ke direktori bersama di jalur Library/Application Support/ di dalam container.
Menurut Apple WWDC 2020 Session 10026, App Group mencakup tiga skenario utama: sinkronisasi pengaturan melalui NSUserDefaults, akses bersama ke file melalui FileManager, dan penggunaan bersama Core Data dengan satu penyimpanan. Untuk setiap skenario, cukup menentukan pengidentifikasi grup di API yang sesuai.
iOS membuat container bersama saat pertama kali menjalankan proses apa pun yang memiliki entitlement com.apple.security.application-groups. Secara fisik, container berada di direktori sistem — jalurnya berbeda dari sandbox aplikasi utama dan ekstensi, tetapi semua proses yang berwenang memiliki hak baca dan tulis.
Apple menjamin keamanan App Group melalui hubungan antara team ID dan tanda tangan kode. Proses yang tidak ditandatangani dengan sertifikat pengembang yang sama tidak dapat mengakses container grup. Ini mencegah kebocoran data antara aplikasi dari pengembang yang berbeda.
Format pengidentifikasi: group.<team-id>.<name>. Misalnya, group.ABC123DEFG.widget-data. Pada satu perangkat, beberapa grup dapat dibuat, masing-masing dengan kumpulan peserta sendiri. Satu aplikasi dapat menjadi anggota beberapa App Group secara bersamaan — ini berguna untuk memisahkan data dari ekstensi yang berbeda.
// Dapatkan URL container App Group
guard let containerURL = FileManager.default
.containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.widget")
else { return }
// Buat file di container bersama
let fileURL = containerURL.appendingPathComponent("shared.data")
try "Hello from main app".write(to: fileURL, atomically: true, encoding: .utf8)
FileManager menyediakan metode containerURL(forSecurityApplicationGroupIdentifier:) yang mengembalikan URL direktori bersama. Penting untuk memanggil metode ini di setiap proses secara terpisah — jalurnya secara fisik sama, tetapi setiap proses melihatnya melalui prisma keamanannya sendiri.
Mengaktifkan App Group di Xcode dimulai dari Capabilities — saklar App Groups menambahkan entitlement ke proyek. Apple Developer Portal juga mensyaratkan bahwa pengidentifikasi aplikasi menyertakan capability ini. Tanpanya, tanda tangan kode tidak akan berfungsi di perangkat nyata.
Buka proyek di Xcode, pilih target aplikasi dan buka tab Signing & Capabilities. Tekan + dan pilih App Groups. Buat atau pilih grup yang sudah ada. Ulangi langkah yang sama untuk setiap ekstensi yang harus memiliki akses ke container bersama. Semua peserta harus menggunakan pengidentifikasi grup yang sama.
Setelah mengaktifkan Capabilities, Xcode secara otomatis membuat file .entitlements dengan kunci com.apple.security.application-groups dan array pengidentifikasi. Pastikan semua ekstensi yang diperlukan memiliki file ini dengan team ID yang benar di pengidentifikasi grup.
<!-- Example entitlements file -->
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.example.shared</string>
</array>
Jika proyek Anda memiliki beberapa ekstensi (Today Widget, Share Extension, Notification Service), masing-masing harus memiliki file entitlements sendiri dengan grup yang sama. Ketiadaan entitlements di target mana pun adalah penyebab umum mengapa ekstensi tidak melihat data bersama.
Cara paling sederhana untuk menyinkronkan data antara aplikasi dan ekstensi — UserDefaults dengan menentukan suite name. Alih-alih UserDefaults.standard standar, Anda membuat instance dengan pengidentifikasi App Group dan semua proses membaca pengaturan yang sama.
Menurut Apple Human Interface Guidelines, mekanisme ini cocok untuk menyinkronkan status: tema yang dipilih, item favorit, flag onbording. Namun, ini tidak dirancang untuk volume data besar atau operasi tulis bersamaan — untuk itu gunakan file atau Core Data.
// Tulis ke UserDefaults App Group (aplikasi utama)
let defaults = UserDefaults(suiteName: "group.com.example.shared")
defaults?.set(true, forKey: "isDarkMode")
defaults?.synchronize()
// Baca dari UserDefaults App Group (ekstensi widget)
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
let isDark = sharedDefaults?.bool(forKey: "isDarkMode") ?? false
Perhatikan: instance UserDefaults dengan suiteName dibuat di setiap proses secara terpisah, tetapi membaca dari satu file plist di container bersama. Metode synchronize() menjamin penulisan segera ke disk — di iOS 13+ dapat dihilangkan karena sistem menyinkronkan data secara periodik.
Untuk skenario yang lebih kompleks, App Group menyediakan akses ke sistem file bersama. File apa pun yang dibuat di direktori container dapat diakses oleh semua proses dalam grup. Ini memungkinkan implementasi database Core Data bersama, cache gambar, atau file sementara.
Untuk menggunakan penyimpanan Core Data bersama, buat NSPersistentContainer dengan URL file .sqlite yang terletak di direktori App Group. Pastikan hanya satu proses yang menulis ke database pada satu waktu — penulisan bersamaan dapat merusak data. Arsitektur tipikal: aplikasi utama menulis, ekstensi membaca.
// Siapkan Core Data dengan container 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
}()
Pendekatan alternatif — cache file gambar. NSCache hanya hidup di memori, tetapi melalui App Group Anda dapat menyimpan gambar yang di-cache ke disk di direktori bersama. Ekstensi widget mendapatkan akses ke file yang sama dan menampilkan data terkini tanpa pemuatan tambahan dari jaringan.
| Skenario | API yang Direkomendasikan | Ukuran Data |
|---|---|---|
| Pengaturan dan flag | UserDefaults suiteName | hingga 1 KB |
| Cache gambar | FileManager + NSCache | hingga 100 MB |
| Data terstruktur | Core Data store | hingga 500 MB |
| File sementara | FileManager temporary | hingga 50 MB |
Saat bekerja dengan file bersama, pertimbangkan bahwa sistem dapat membongkar ekstensi kapan saja. Gunakan NSFileCoordinator untuk koordinasi akses guna menghindari kerusakan data saat penulisan bersamaan oleh proses yang berbeda.
Pertanyaan yang Sering Diajukan
App Group adalah mekanisme iOS yang membuat container bersama untuk penyimpanan data antara aplikasi dan ekstensinya. Ini memungkinkan proses dengan pengidentifikasi grup yang sama untuk bertukar file, pengaturan UserDefaults, dan data Core Data melalui direktori tunggal di sistem file.
Buka Capabilities target di Xcode, aktifkan App Groups dan tambahkan pengidentifikasi dalam format group.*. Kemudian ulangi langkah yang sama untuk setiap ekstensi yang harus memiliki akses ke container bersama. Pastikan semua peserta menggunakan pengidentifikasi grup yang sama.
Semua jenis ekstensi iOS mendukung App Group: Today Widget (widget extension), Share Extension, Notification Service Extension, Custom Keyboard dan lainnya. Setiap ekstensi harus memiliki file entitlements terpisah dengan pengidentifikasi grup yang sama dengan aplikasi utama.
Ya, tetapi hanya jika aplikasi ditandatangani dengan sertifikat pengembang yang sama dan memiliki team ID yang sama. Apple menjamin keamanan melalui tanda tangan kode: dua aplikasi dari pengembang yang berbeda tidak dapat mengakses container yang sama bahkan dengan pengidentifikasi grup yang sama.
Gunakan UserDefaults dengan suite name untuk pengaturan kecil, FileManager untuk file, dan Core Data untuk data terstruktur. Semua API ini bekerja dengan direktori App Group — cukup tentukan pengidentifikasi grup saat inisialisasi. Untuk Core Data, pastikan URL penyimpanan menunjuk ke direktori bersama.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga