Sandbox — nedir, izolasyon ilkesi ve dosya sistemi

Yazar: IT Sectr Yayınlanma: 2026-07-09 Okuma süresi: 10 dk

Sandbox, dosya sistemine, ağa, donanım kaynaklarına ve diğer uygulamaların verilerine erişimi kısıtlayan, iOS uygulamaları için izole bir çalışma ortamıdır. Her uygulama kurulum sırasında kendi Sandbox ortamını alır ve tüm dosya işlemleri otomatik olarak bu izole alana yönlendirilir. Apple App Sandbox Design Guide (2026)'a göre sanal alan mimarisi üç koruma düzeyine dayanır: dosya sistemi izolasyonu, süreçler arası iletişim kontrolü ve entitlements aracılığıyla açık izin isteğiyle birlikte donanım kaynaklarının ayrıştırılması.

Ana noktalar

  • Sandbox — her iOS uygulamasına özgü izole dosya sistemi ve çalışma ortamı.
  • Her uygulamanın Documents, Library, tmp ve Bundle alt klasörlerine sahip kendi Sandbox dizini vardır.
  • Diğer uygulamalara erişim yasaktır: Sandbox dışında okuma, yazma ve kod çalıştırma sistem tarafından engellenir.
  • Entitlements ve Capabilities Sandbox'ı genişletir: App Groups, iCloud ve Security-Scoped Bookmarks açık izin gerektirir.
  • UIDocumentPicker ve Share Extension — izole uygulamalar arasında dosya alışverişinin tek yolu.

Sandbox nedir

Sandbox, iOS çekirdek düzeyinde (XNU — Sandbox.kext çekirdek eklentisi) uygulanan zorunlu erişim kontrolü (Mandatory Access Control) sistemidir. Her uygulama başlatıldığında, hangi kaynaklara erişim izni verildiğini belirleyen benzersiz bir UUID Sandbox profili alır.

Sandbox mimarisi üç temel bileşen içerir: File System Isolation (her uygulama yalnızca kendi konteynerini görür), Network Access Control (yerel ağa yapılan istekler kısıtlanabilir) ve Inter-Process Communication (diğer uygulamalarla doğrudan IPC yasağı). Apple, Sandbox'ı iOS 2.0'da tanıttı ve o zamandan beri her ana sürümde kısıtlamaları önemli ölçüde güçlendirdi.

Sandbox isteğe bağlı değildir — App Store'daki tüm uygulamalar sanal alanda çalışır. Geliştirici Sandbox'ı devre dışı bırakamaz veya kısıtlamalarını aşamaz. Yasaklanmış bir kaynağa erişme girişimi EPERM (Operation not permitted) hata kodu ve sistem günlüğüne kayıtla sona erer.

swift
import Foundation

// Başka bir uygulamanın dosyasına erişim girişimi — nil döndürür
let otherAppPath = "/var/mobile/Containers/Data/Application/OTHER-UUID/Documents/file.txt"
let data = try? Data(contentsOf: URL(fileURLWithPath: otherAppPath))
// data == nil — Sandbox erişimi engelliyor

// Doğru erişim — kendi Sandbox'ı içinde
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)

Uygulama sanal alanının yapısı

iOS'ta her uygulamanın Sandbox'ı, Foundation API üzerinden erişilebilen birkaç önceden tanımlı dizin içerir. Fiziksel ortamdaki konum /var/mobile/Containers/Data/Application/{UUID}/ şeklindedir, ancak geliştiriciler bu yolu doğrudan kullanmamalıdır: farklı iOS sürümlerinde cihazın her yeniden başlatılmasında değişir.

Sandbox'ın ana dizinleri: Bundle (.app — salt okunur, yürütülebilir kodu ve kaynakları içerir), Documents (kullanıcı verileri, iCloud'a yedeklenir), Library (Caches, Preferences, Application Support — farklı yedekleme kurallarıyla), tmp (geçici dosyalar, yer olmadığında sistem tarafından silinir). Her dizinin kendi yaşam döngüsü ve depolama politikası vardır.

Sandbox'ın fiziksel yolu NSHomeDirectory() veya FileManager.url(for: .documentDirectory) ile alınabilir. Apple, URL tabanlı API kullanılmasını önerir; çünkü bu API dosya sisteminin iç yapısını soyutlar ve masaüstünde macOS Sandbox değişse bile kararlı kalır.

Sandbox diziniFileManager ile almaİzinler
Documents.documentDirectoryOkuma ve yazma
BundleBundle.main.bundlePathYalnızca okuma
Library.libraryDirectoryOkuma ve yazma
tmpNSTemporaryDirectory()Okuma ve yazma
App Group.containerURL(forSecurityApplicationGroupIdentifier:)Okuma ve yazma

Sanal alan dışındaki dosyalara erişim

iOS'ta diğer uygulamaların dosya sistemine doğrudan erişim tamamen engellenmiştir. Geliştirici başka bir uygulamanın konteyner UUID'sini bilse bile, çekirdek düzeyindeki Sandbox okuma veya yazma girişiminde hata döndürür. Bu, Sandbox'ın daha esnek olduğu macOS ile iOS arasındaki temel bir farktır.

Apple, uygulamalar arası veri alışverişi için üç meşru mekanizma sunar: UIDocumentPickerViewController (kullanıcı sistem arayüzü üzerinden bir dosya seçer ve uygulama Security-Scoped URL alır), Share Extension (başka bir uygulamaya veri aktarmak için uzantı) ve App Groups (aynı geliştiricinin uygulamaları için paylaşılan dizin).

UIDocumentPicker, önceden yapılandırma olmadan diğer uygulamaların dosyalarına erişmenin tek yoludur. Kullanıcı standart sistem seçici aracılığıyla açıkça bir dosya seçer ve iOS, uygulamaya geçici bir Security-Scoped URL sağlar. Erişim, seçici kapatılana veya stopAccessingSecurityScopedResource çağrılana kadar sürer.

Security-Scoped Bookmarks

Security-Scoped Bookmark, uygulama başlatmaları arasında Sandbox dışındaki bir dosyaya erişimin korunmasını sağlayan bir iOS mekanizmasıdır. Kullanıcı UIDocumentPicker üzerinden bir dosya seçtiğinde, uygulama Security-Scoped URL'den bir yer imi oluşturabilir ve bunu UserDefaults'a veya başka bir depolama alanına kaydedebilir.

Bir sonraki başlatmada uygulama, Security-Scoped URL döndüren URLByResolvingBookmarkData aracılığıyla erişimi geri yükler. Ardından dosyayı okumadan önce startAccessingSecurityScopedResource, iş bittikten sonra stopAccessingSecurityScopedResource çağrılmalıdır. Çağrı dengesi zorunludur — her start'ın karşılık gelen bir stop'u olmalıdır, aksi takdirde sistem Security-Scoped kaynak limitini tüketir.

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

// Yer imi verilerini URL'ye çözümle
func resolveBookmark(data: Data) -> URL? {
    var isStale = false
    let url = try? URL.byResolvingBookmarkData(
        data,
        options: .withoutUI,
        relativeTo: nil,
        bookmarkDataIsStale: &isStale
    )
    
    if isStale {
        // Yer imi eski, yenisi oluşturulmalı
    }
    
    return url
}

Önemli sınırlama: Security-Scoped Bookmarks, kendi Sandbox'ınız içindeki dosyalar için çalışmaz — yalnızca UIDocumentPicker veya iCloud Drive üzerinden alınan dosyalar için geçerlidir. Yer imi, sistemin hangi uygulamanın hangi dosyaya erişim talep ettiğini belirlemesini sağlayan Security-Scoped verileri içerir. Uygulamanın sertifikası sona ererse veya değişirse yer imi geçersiz hale gelir.

Sandbox ve App Groups

App Groups, aynı geliştiricinin birden fazla uygulamasının (ve uzantılarının) ortak bir Sandbox dizinini paylaşmasını sağlayan bir iOS mekanizmasıdır. Etkinleştirmek için Xcode'da App Groups Capability'yi eklemek ve tüm hedef uygulamalar için aynı grup tanımlayıcısını belirtmek gerekir.

Paylaşılan App Groups dizini her bir uygulamanın Sandbox'ının dışındadır, ancak gruptaki tüm uygulamalar buna tam okuma ve yazma erişimine sahiptir. Bu, ana uygulama, Today Widget, Watch Extension ve Share Extension arasında dosya, veritabanı (App Group içinde Store URL'li Core Data) ve UserDefaults (initWithSuiteName aracılığıyla) alışverişi yapılmasına olanak tanır.

Apple, bir uygulama ile uzantıları arasında durum senkronizasyonu için App Groups kullanılmasını önerir. Örneğin, Today Widget, ana uygulamanın güncel verileri yazdığı paylaşılan App Groups dizininden veri okuyabilir. Aynı zamanda her uygulama diğer App Groups'lardan hâlâ izoledir — yalnızca aynı grup tanımlayıcısına sahip uygulamalar erişim kazanır.

iOS'ta sanal alanın sınırlamaları

iOS'taki Sandbox, geliştirme sırasında dikkate alınması gereken bir dizi katı kısıtlama getirir. Başlıcaları: dinamik kod yasağı (Sandbox dışında kod yükleme ve çalıştırma), kullanıcı izni olmadan adres defterine, takvime ve fotoğraflara doğrudan erişim yasağı (Privacy framework) ve alt süreç oluşturma kısıtlamaları (fork ve exec yasaktır).

Ağ: uygulamalar TCP/UDP üzerinden herhangi bir uzak sunucuya bağlanabilir, ancak localhost'a erişim kısıtlıdır — diğer uygulamalar uygulamanızın içindeki bir sunucuya bağlanamaz (hata ayıklama derlemeleri hariç). App Store uygulamaları için multicast ve broadcast UDP de engellenir.

Donanım kaynakları: kameraya, mikrofona, konum bilgisine, Bluetooth'a ve HealthKit'e erişim, sistem iletişim kutusu aracılığıyla kullanıcının açık iznini gerektirir. iOS, her kaynak türü için ayrı bir entitlement ve gerekçe açıklaması içeren bir Info.plist anahtarı (NSPhotoLibraryUsageDescription, NSCameraUsageDescription) kullanır. Info.plist'te gerekçe açıklaması olmadan izin istemek uygulamanın kapanmasına neden olur.

  • Dinamik kod — yasak: WebView'da JS için JavaScriptCore, ancak keyfi makine kodu değil
  • Alt süreçler — fork, exec ve system Sandbox'tan kullanılamaz
  • Cihazlara erişim — kamera, mikrofon ve GPS sistem iletişim kutusu gerektirir
  • Yerel ağ — App Store için multicast ve broadcast UDP engellenir
  • Şifreleme anahtarları — Keychain kullanılabilir, ancak yalnızca kendi uygulamanız için (App Group için kSecAttrAccessGroup)

Sık sorulan sorular

iOS'ta Sandbox nedir?

Sandbox, dosya sistemine, ağa ve diğer uygulamaların verilerine erişimi kısıtlayan, iOS uygulamaları için izole bir çalışma ortamıdır. Her uygulamanın benzersiz bir Sandbox konteyneri vardır ve erişimi Sandbox.kext aracılığıyla iOS çekirdek düzeyinde kontrol edilir.

Uygulamanın Sandbox'ında hangi dosyalar kullanılabilir?

Uygulama için kullanılabilir: Documents (kullanıcı verileri), Library (Caches, Preferences, Application Support), tmp (geçici dosyalar) ve Bundle (yalnızca okuma). App Group dizini aynı geliştirici grubunun uygulamaları için kullanılabilir.

Başka bir uygulamanın dosyalarına nasıl erişilir?

UIDocumentPickerViewController aracılığıyla — kullanıcı sistem arayüzü üzerinden bir dosya seçer. iOS, stopAccessingSecurityScopedResource çağrılana kadar geçerli bir Security-Scoped URL sağlar. Alternatif — uygulamalar arasında veri aktarmak için Share Extension.

Security-Scoped Bookmark nedir?

Security-Scoped Bookmark, uygulama başlatmaları arasında Sandbox dışındaki bir dosyaya erişimi koruyan Data'dır. bookmarkData aracılığıyla Security-Scoped URL'den (UIDocumentPicker'dan alınan) oluşturulur. Bir sonraki başlatmada yer imi URLByResolvingBookmarkData ile geri yüklenir.

iOS'ta Sandbox devre dışı bırakılabilir mi?

Hayır, App Store uygulamaları için Sandbox devre dışı bırakılamaz. Jailbreak'li cihazlarda devre dışı bırakmak mümkündür, ancak bu App Store'da yayınlamayla uyumsuzdur. Geliştiriciler simülatörde Sandbox olmadan test edebilir, ancak gerçek cihazlar her zaman Sandbox'ı uygular.

Özet

  • Sandbox — Mandatory Access Control ile her uygulamayı çekirdek düzeyinde izole eden iOS'un temel güvenlik sistemi.
  • Sandbox yapısı farklı erişim hakları ve yedekleme politikalarına sahip Documents, Library, tmp ve Bundle dizinlerini içerir.
  • Doğrudan erişim diğer uygulamaların dosya sistemine tamamen engellenmiştir — yalnızca UIDocumentPicker ve App Groups meşrudur.
  • Security-Scoped Bookmarks, sistem arayüzleri aracılığıyla alınan Sandbox dışındaki dosyalara kalıcı erişim sağlar.
  • App Groups, aynı geliştiricinin uygulama ve uzantı seti için paylaşılan bir Sandbox alanı oluşturur.
  • Sandbox sınırlamaları dinamik kod, alt süreç, multicast ağ yasağını ve donanım kaynakları için zorunlu sistem iletişim kutularını içerir.
  • App Store'daki tüm uygulamalar Sandbox'ta çalışır — bu iOS'un isteğe bağlı değil zorunlu bir mimari özelliğidir.

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