Sandbox — apa itu, prinsip isolasi dan sistem file

Penulis: IT Sectr Diterbitkan: 2026-07-09 Waktu membaca: 10 mnt

Sandbox — adalah lingkungan eksekusi terisolasi dari aplikasi iOS yang membatasi akses ke sistem file, jaringan, sumber daya perangkat keras, dan data aplikasi lainnya. Setiap aplikasi menerima lingkungan Sandbox sendiri saat instalasi, dan semua operasi filenya secara otomatis dialihkan ke area terisolasi ini. Menurut Apple App Sandbox Design Guide (2026), arsitektur sandbox didasarkan pada tiga tingkat perlindungan: isolasi sistem file, kontrol komunikasi antar-proses, dan pembagian sumber daya perangkat keras dengan permintaan izin eksplisit melalui entitlements.

Poin Utama

  • Sandbox — sistem file terisolasi dan lingkungan eksekusi, unik untuk setiap aplikasi iOS.
  • Setiap aplikasi memiliki direktori Sandbox sendiri dengan subfolder Documents, Library, tmp, dan Bundle.
  • Akses ke aplikasi lain dilarang: membaca, menulis, dan mengeksekusi kode di luar Sandbox diblokir oleh sistem.
  • Entitlements dan Capabilities memperluas Sandbox: App Groups, iCloud, Security-Scoped Bookmarks memerlukan izin eksplisit.
  • UIDocumentPicker dan Share Extension — satu-satunya cara pertukaran file antar aplikasi terisolasi.

Apa itu Sandbox

Sandbox — adalah sistem kontrol akses wajib (Mandatory Access Control), yang diimplementasikan pada level kernel iOS (XNU — kernel extension Sandbox.kext). Setiap aplikasi saat dijalankan menerima profil UUID Sandbox unik yang menentukan sumber daya sistem mana yang diizinkan untuk diakses.

Arsitektur Sandbox mencakup tiga komponen utama: File System Isolation (setiap aplikasi hanya melihat containernya sendiri), Network Access Control (permintaan ke jaringan lokal dapat dibatasi), dan Inter-Process Communication (larangan IPC langsung dengan aplikasi lain). Apple memperkenalkan Sandbox di iOS 2.0 dan sejak itu secara signifikan memperketat pembatasan di setiap versi utama.

Sandbox tidak bersifat opsional — semua aplikasi dari App Store berjalan di sandbox. Pengembang tidak dapat menonaktifkan Sandbox atau menghindari batasannya. Upaya mengakses sumber daya yang dilarang berakhir dengan kesalahan kode EPERM (Operation not permitted) dan pencatatan di log sistem.

swift
import Foundation

// Upaya akses ke file aplikasi lain — mengembalikan nil
let otherAppPath = "/var/mobile/Containers/Data/Application/OTHER-UUID/Documents/file.txt"
let data = try? Data(contentsOf: URL(fileURLWithPath: otherAppPath))
// data == nil — Sandbox memblokir akses

// Akses yang benar — dalam Sandbox sendiri
let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first else { return }

let myFileURL = documentsURL.appendingPathComponent("notes.txt")
try "Hello, Sandbox!".write(to: myFileURL, atomically: true, encoding: .utf8)

Struktur sandbox aplikasi

Sandbox setiap aplikasi di iOS berisi beberapa direktori yang telah ditentukan, dapat diakses melalui Foundation API. Lokasi pada media fisik — /var/mobile/Containers/Data/Application/{UUID}/, tetapi pengembang tidak boleh menggunakan jalur ini secara langsung: jalur ini berubah setiap kali perangkat di-restart di berbagai versi iOS.

Direktori utama Sandbox: Bundle (.app — hanya baca, berisi kode yang dapat dieksekusi dan sumber daya), Documents (data pengguna, dicadangkan ke iCloud), Library (Caches, Preferences, Application Support — dengan aturan pencadangan berbeda), tmp (file sementara, dihapus oleh sistem saat kekurangan ruang). Setiap direktori memiliki siklus hidup dan kebijakan penyimpanannya sendiri.

Jalur fisik ke Sandbox dapat diperoleh melalui NSHomeDirectory() atau FileManager.url(for: .documentDirectory). Apple merekomendasikan penggunaan URL-based API karena mengabstraksi struktur internal sistem file dan tetap stabil saat ada perubahan di macOS Sandbox pada desktop.

Direktori SandboxPerolehan melalui FileManagerIzin
Documents.documentDirectoryBaca dan tulis
BundleBundle.main.bundlePathHanya baca
Library.libraryDirectoryBaca dan tulis
tmpNSTemporaryDirectory()Baca dan tulis
App Group.containerURL(forSecurityApplicationGroupIdentifier:)Baca dan tulis

Akses ke file di luar sandbox

Akses langsung ke sistem file aplikasi lain di iOS sepenuhnya diblokir. Bahkan jika pengembang mengetahui UUID container aplikasi lain, Sandbox di level kernel akan mengembalikan error saat mencoba membaca atau menulis. Ini adalah perbedaan mendasar antara iOS dan macOS, di mana Sandbox lebih fleksibel.

Apple menyediakan tiga mekanisme sah untuk pertukaran data antar aplikasi: UIDocumentPickerViewController (pengguna memilih file melalui antarmuka sistem, aplikasi menerima Security-Scoped URL), Share Extension (ekstensi untuk mentransfer data ke aplikasi lain), dan App Groups (direktori bersama untuk aplikasi dari pengembang yang sama).

UIDocumentPicker — satu-satunya cara mendapatkan akses ke file dari aplikasi lain tanpa konfigurasi awal. Pengguna secara eksplisit memilih file melalui pemilih sistem standar, dan iOS memberikan aplikasi Security-Scoped URL sementara. Akses berlaku sampai pemilih ditutup atau sampai stopAccessingSecurityScopedResource dipanggil.

Security-Scoped Bookmarks

Security-Scoped Bookmark — adalah mekanisme iOS yang memungkinkan mempertahankan akses ke file di luar Sandbox antar sesi peluncuran aplikasi. Saat pengguna memilih file melalui UIDocumentPicker, aplikasi dapat membuat bookmark dari Security-Scoped URL dan menyimpannya di UserDefaults atau penyimpanan lainnya.

Pada peluncuran berikutnya, aplikasi memulihkan akses melalui URLByResolvingBookmarkData, yang mengembalikan Security-Scoped URL. Kemudian startAccessingSecurityScopedResource harus dipanggil sebelum membaca file dan stopAccessingSecurityScopedResource setelah selesai bekerja. Keseimbangan panggilan wajib — setiap start harus memiliki stop yang sesuai, jika tidak sistem akan menghabiskan batas sumber daya Security-Scoped.

swift
// Buat Security-Scoped Bookmark
func createBookmark(for url: URL) -> Data? {
    return try? url.bookmarkData(
        options: .minimalBookmark,
        includingResourceValuesForKeys: nil,
        relativeTo: nil
    )
}

// Selesaikan data bookmark ke URL
func resolveBookmark(data: Data) -> URL? {
    var isStale = false
    let url = try? URL.byResolvingBookmarkData(
        data,
        options: .withoutUI,
        relativeTo: nil,
        bookmarkDataIsStale: &isStale
    )
    
    if isStale {
        // Bookmark sudah kedaluwarsa, perlu dibuat yang baru
    }
    
    return url
}

Batasan penting: Security-Scoped Bookmarks tidak berfungsi untuk file di dalam Sandbox sendiri — hanya untuk file yang diperoleh melalui UIDocumentPicker atau iCloud Drive. Bookmark berisi data Security-Scoped yang memungkinkan sistem mengidentifikasi aplikasi mana dan untuk file mana yang meminta akses. Jika sertifikat aplikasi kedaluwarsa atau berubah, bookmark menjadi tidak valid.

Sandbox dan App Groups

App Groups — mekanisme iOS yang memungkinkan beberapa aplikasi (dan ekstensinya) dari pengembang yang sama memiliki direktori Sandbox bersama. Untuk mengaktifkannya, tambahkan Capability App Groups di Xcode dan tentukan identifier grup yang sama untuk semua aplikasi target.

Direktori bersama App Groups berada di luar Sandbox setiap aplikasi individu, tetapi semua aplikasi dalam grup memiliki akses penuh baca dan tulis ke direktori tersebut. Ini memungkinkan pertukaran file, database (Core Data dengan Store URL di App Group), dan UserDefaults (melalui initWithSuiteName) antara aplikasi utama, Today Widget, Watch Extension, dan Share Extension.

Apple merekomendasikan penggunaan App Groups untuk sinkronisasi status antara aplikasi dan ekstensinya. Misalnya, Today Widget dapat membaca data dari direktori App Group bersama tempat aplikasi utama menulis data terkini. Namun, setiap aplikasi tetap terisolasi dari App Groups lain — hanya aplikasi dengan identifier grup yang sama yang memiliki akses.

Batasan sandbox di iOS

Sandbox di iOS memberlakukan sejumlah batasan ketat yang harus dipertimbangkan dalam pengembangan. Yang utama: larangan kode dinamis (memuat dan mengeksekusi kode di luar Sandbox), larangan akses langsung ke buku alamat, kalender, dan foto tanpa izin pengguna (Privacy framework), dan batasan pada pembuatan proses anak (fork, exec dilarang).

Jaringan: aplikasi dapat terhubung ke server jarak jauh mana pun melalui TCP/UDP, tetapi akses ke localhost dibatasi — aplikasi lain tidak dapat terhubung ke server di dalam aplikasi Anda (kecuali build debug). Multicast dan broadcast UDP juga diblokir untuk aplikasi App Store.

Sumber daya perangkat keras: akses ke kamera, mikrofon, geolokasi, Bluetooth, dan HealthKit memerlukan izin eksplisit pengguna melalui dialog sistem. Untuk setiap jenis sumber daya, iOS menggunakan entitlement terpisah dan kunci Info.plist dengan deskripsi alasan (NSPhotoLibraryUsageDescription, NSCameraUsageDescription). Permintaan izin tanpa deskripsi alasan di Info.plist menyebabkan aplikasi berakhir.

  • Kode dinamis — dilarang: JavaScriptCore untuk JS di WebView, tetapi bukan kode mesin sembarangan
  • Proses anak — fork, exec, system tidak tersedia dari Sandbox
  • Akses perangkat — kamera, mikrofon, GPS memerlukan dialog sistem
  • Jaringan lokal — multicast dan broadcast UDP diblokir untuk App Store
  • Kunci enkripsi — Keychain tersedia, tetapi hanya untuk aplikasi sendiri (kSecAttrAccessGroup untuk App Group)

Pertanyaan Umum

Apa itu Sandbox di iOS?

Sandbox — lingkungan eksekusi terisolasi dari aplikasi iOS yang membatasi akses ke sistem file, jaringan, dan data aplikasi lain. Setiap aplikasi memiliki container Sandbox unik yang aksesnya dikendalikan di level kernel iOS melalui Sandbox.kext.

File apa saja yang tersedia di Sandbox aplikasi?

Aplikasi memiliki akses ke: Documents (data pengguna), Library (Caches, Preferences, Application Support), tmp (file sementara), dan Bundle (hanya baca). Direktori App Group tersedia untuk aplikasi dari grup pengembang yang sama.

Bagaimana cara mengakses file aplikasi lain?

Melalui UIDocumentPickerViewController — pengguna memilih file melalui antarmuka sistem. iOS menyediakan Security-Scoped URL yang dapat diakses hingga stopAccessingSecurityScopedResource dipanggil. Alternatif — Share Extension untuk mentransfer data antar aplikasi.

Apa itu Security-Scoped Bookmark?

Security-Scoped Bookmark — adalah Data yang mempertahankan akses ke file di luar Sandbox antar sesi peluncuran aplikasi. Dibuat dari Security-Scoped URL (diperoleh dari UIDocumentPicker) melalui bookmarkData. Pada peluncuran berikutnya, bookmark dipulihkan melalui URLByResolvingBookmarkData.

Bisakah Sandbox dinonaktifkan di iOS?

Tidak, Sandbox tidak dapat dinonaktifkan untuk aplikasi dari App Store. Pada perangkat jailbreak, penonaktifan dimungkinkan, tetapi ini tidak kompatibel dengan publikasi di App Store. Pengembang dapat menguji tanpa Sandbox di simulator, tetapi perangkat nyata selalu menerapkan Sandbox.

Kesimpulan

  • Sandbox — sistem keamanan fundamental iOS yang mengisolasi setiap aplikasi di level kernel dengan Mandatory Access Control.
  • Struktur Sandbox mencakup direktori Documents, Library, tmp, dan Bundle dengan berbagai izin akses dan kebijakan pencadangan.
  • Akses langsung ke sistem file aplikasi lain sepenuhnya diblokir — hanya UIDocumentPicker dan App Groups yang sah.
  • Security-Scoped Bookmarks menyediakan akses persisten ke file di luar Sandbox yang diperoleh melalui antarmuka sistem.
  • App Groups menciptakan ruang Sandbox bersama untuk sekumpulan aplikasi dan ekstensi dari pengembang yang sama.
  • Batasan Sandbox mencakup larangan kode dinamis, proses anak, jaringan multicast, dan dialog sistem wajib untuk sumber daya perangkat keras.
  • Semua aplikasi App Store berjalan di Sandbox — ini bukan fitur opsional, melainkan fitur arsitektur wajib iOS.

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.

Diskusikan proyek

Baca juga