Sandbox — bu nima, izolyatsiya prinsipi va fayl tizimi

Muallif: IT Sectr Nashr etilgan: 2026-07-09 O'qish vaqti: 10 daq

Sandbox — iOS ilovasining izolyatsiya qilingan bajarish muhiti bo'lib, fayl tizimiga, tarmoqqa, apparat resurslariga va boshqa ilovalarning ma'lumotlariga kirishni cheklaydi. Har bir ilova o'rnatish vaqtida o'zining Sandbox muhitini oladi va uning barcha fayl operatsiyalari avtomatik ravishda ushbu izolyatsiya qilingan hududga yo'naltiriladi. Apple App Sandbox Design Guide (2026) ma'lumotiga ko'ra, sandbox arxitekturasi uch himoya darajasiga asoslangan: fayl tizimi izolyatsiyasi, jarayonlararo aloqa nazorati va entitlements orqali ochiq ruxsat so'rovi bilan apparat resurslarini taqsimlash.

Asosiy ma'lumotlar

  • Sandbox — har bir iOS ilovasi uchun noyob bo'lgan izolyatsiya qilingan fayl tizimi va bajarish muhiti.
  • Har bir ilova Documents, Library, tmp va Bundle pastki papkalari bilan o'zining Sandbox katalogiga ega.
  • Boshqa ilovalarga kirish taqiqlangan: Sandbox tashqarisida o'qish, yozish va kod bajarish tizim tomonidan bloklanadi.
  • Entitlements va Capabilities Sandbox-ni kengaytiradi: App Groups, iCloud, Security-Scoped Bookmarks aniq ruxsat talab qiladi.
  • UIDocumentPicker va Share Extension — izolyatsiya qilingan ilovalar o'rtasida fayl almashishning yagona usullari.

Sandbox nima

Sandbox — iOS yadrosi darajasida (XNU — kernel extension Sandbox.kext) amalga oshirilgan Majburiy Kirish Nazorati (Mandatory Access Control) tizimidir. Har bir ilova ishga tushirilganda noyob UUID Sandbox profilini oladi, bu tizimning qaysi resurslariga kirishga ruxsat berilganligini aniqlaydi.

Sandbox arxitekturasi uchta asosiy komponentni o'z ichiga oladi: File System Isolation (har bir ilova faqat o'z konteynerini ko'radi), Network Access Control (mahalliy tarmoq so'rovlari cheklanishi mumkin) va Inter-Process Communication (boshqa ilovalar bilan to'g'ridan-to'g'ri IPC taqiqlangan). Apple Sandbox-ni iOS 2.0 da joriy qildi va shundan beri har bir asosiy versiyada cheklovlarni sezilarli darajada kuchaytirdi.

Sandbox ixtiyoriy emas — App Store-dagi barcha ilovalar sandboxda ishlaydi. Dasturchi Sandbox-ni o'chira olmaydi yoki uning cheklovlarini chetlab o'ta olmaydi. Taqiqlangan resursga kirish urinishi EPERM kodi (Operation not permitted) bilan xatolik bilan tugaydi va tizim jurnaliga yoziladi.

swift
import Foundation

// Boshqa ilova fayliga kirish urinishi — nil qaytaradi
let otherAppPath = "/var/mobile/Containers/Data/Application/OTHER-UUID/Documents/file.txt"
let data = try? Data(contentsOf: URL(fileURLWithPath: otherAppPath))
// data == nil — Sandbox kirishni bloklaydi

// To'g'ri kirish — o'z Sandbox ichida
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)

Ilova sandboxining tuzilishi

iOS-dagi har bir ilovaning Sandbox-i Foundation API orqali olinadigan bir nechta oldindan belgilangan kataloglardan iborat. Jismoniy tashuvchidagi joylashuvi — /var/mobile/Containers/Data/Application/{UUID}/, lekin dasturchilar bu yo'ldan to'g'ridan-to'g'ri foydalanmasliklari kerak: u har bir qayta ishga tushirishda o'zgaradi va turli iOS versiyalarida farqlanadi.

Sandbox-ning asosiy kataloglari: Bundle (.app — faqat o'qish uchun, bajariladigan kod va resurslarni o'z ichiga oladi), Documents (foydalanuvchi ma'lumotlari, iCloud-ga zaxira qilinadi), Library (Caches, Preferences, Application Support — turli zaxira qilish qoidalari bilan), tmp (vaqtinchalik fayllar, joy yetishmaganda tizim tomonidan o'chiriladi). Har bir katalog o'zining hayot tsikli va saqlash siyosatiga ega.

Sandbox-ga jismoniy yo'lni NSHomeDirectory() yoki FileManager.url(for: .documentDirectory) orqali olish mumkin. Apple URL-based API dan foydalanishni tavsiya qiladi, chunki u fayl tizimining ichki tuzilishini abstraksiyalaydi va macOS Sandbox-dagi o'zgarishlarda barqaror qoladi.

Sandbox katalogiFileManager orqali olishRuxsatlar
Documents.documentDirectoryO'qish va yozish
BundleBundle.main.bundlePathFaqat o'qish
Library.libraryDirectoryO'qish va yozish
tmpNSTemporaryDirectory()O'qish va yozish
App Group.containerURL(forSecurityApplicationGroupIdentifier:)O'qish va yozish

Sandbox tashqarisidagi fayllarga kirish

To'g'ridan-to'g'ri kirish iOS-da boshqa ilovalarning fayl tizimiga butunlay bloklangan. Agar dasturchi boshqa ilovaning konteyner UUID-ni bilsa ham, yadro darajasidagi Sandbox o'qish yoki yozish urinishida xatolik qaytaradi. Bu iOS va Sandbox yanada moslashuvchan bo'lgan macOS o'rtasidagi asosiy farqdir.

Apple ilovalararo ma'lumot almashish uchun uchta qonuniy mexanizmni taqdim etadi: UIDocumentPickerViewController (foydalanuvchi tizim interfeysi orqali fayl tanlaydi, ilova Security-Scoped URL oladi), Share Extension (ma'lumotni boshqa ilovaga uzatish uchun kengaytma) va App Groups (bir dasturchining ilovalari uchun umumiy katalog).

UIDocumentPicker — oldindan sozlashsiz boshqa ilovalardan fayllarga kirishning yagona usuli. Foydalanuvchi standart tizim tanlovchisi orqali faylni aniq tanlaydi va iOS ilovaga vaqtinchalik Security-Scoped URL taqdim etadi. Kirish tanlovchi yopilgunga qadar yoki stopAccessingSecurityScopedResource chaqirilgunga qadar amal qiladi.

Security-Scoped Bookmarks

Security-Scoped Bookmark — ilovani ishga tushirishlar o'rtasida Sandbox tashqarisidagi faylga kirishni saqlashga imkon beruvchi iOS mexanizmidir. Foydalanuvchi UIDocumentPicker orqali fayl tanlaganda, ilova Security-Scoped URL dan bookmark yaratishi va uni UserDefaults yoki boshqa omborda saqlashi mumkin.

Keyingi ishga tushirishda ilova URLByResolvingBookmarkData orqali kirishni tiklaydi, u Security-Scoped URL qaytaradi. Keyin faylni o'qishdan oldin startAccessingSecurityScopedResource va ish tugagandan so'ng stopAccessingSecurityScopedResource chaqirish kerak. Chaqiruvlar muvozanati majburiy — har bir start tegishli stop ga ega bo'lishi kerak, aks holda tizim Security-Scoped resurslar limitini tugatadi.

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

// Bookmark ma'lumotlarini URL ga aylantirish
func resolveBookmark(data: Data) -> URL? {
    var isStale = false
    let url = try? URL.byResolvingBookmarkData(
        data,
        options: .withoutUI,
        relativeTo: nil,
        bookmarkDataIsStale: &isStale
    )
    
    if isStale {
        // Bookmark eskirgan, yangisini yaratish kerak
    }
    
    return url
}

Muhim cheklov: Security-Scoped Bookmarks o'z Sandbox ichidagi fayllar uchun ishlamaydi — faqat UIDocumentPicker yoki iCloud Drive orqali olingan fayllar uchun. Bookmark tizimga qaysi ilova va qaysi fayl uchun kirish so'rayotganini aniqlashga imkon beruvchi Security-Scoped ma'lumotlarni o'z ichiga oladi. Ilova sertifikati muddati tugasa yoki o'zgarsa, bookmark haqiqiy emas bo'ladi.

Sandbox va App Groups

App Groups — bir dasturchining bir nechta ilovalariga (va ularning kengaytmalariga) umumiy Sandbox katalogiga ega bo'lishga imkon beruvchi iOS mexanizmidir. Faollashtirish uchun Xcode da Capability App Groups qo'shish va barcha maqsadli ilovalar uchun bir xil guruh identifikatorini ko'rsatish kerak.

App Groups umumiy katalogi har bir alohida ilovaning Sandbox tashqarisida joylashgan, ammo guruhdagi barcha ilovalar unga to'liq kirish huquqiga ega. Bu asosiy ilova, Today Widget, Watch Extension va Share Extension o'rtasida fayllar, ma'lumotlar bazalari (App Group da Store URL bilan Core Data) va UserDefaults (initWithSuiteName orqali) almashish imkonini beradi.

Apple App Groups dan ilova va uning kengaytmalari o'rtasida holatni sinxronlash uchun foydalanishni tavsiya qiladi. Masalan, Today Widget asosiy ilova dolzarb ma'lumotlarni yozadigan umumiy App Group katalogidan ma'lumotlarni o'qishi mumkin. Shu bilan birga, har bir ilova boshqa App Groups dan izolyatsiya qilingan — faqat bir xil guruh identifikatoriga ega ilovalar kirish huquqiga ega.

iOS-da sandbox cheklovlari

iOS dagi Sandbox ishlab chiqishda hisobga olinishi kerak bo'lgan bir qator qattiq cheklovlarni qo'llaydi. Asosiylari: dinamik kod taqiqi (Sandbox tashqarisida kod yuklash va bajarish), foydalanuvchi ruxsatisiz manzillar kitobiga, taqvimga va fotosuratlarga to'g'ridan-to'g'ri kirish taqiqi (Privacy framework) va bolajon jarayonlarni yaratish cheklovlari (fork, exec taqiqlangan).

Tarmoq: ilovalar TCP/UDP orqali istalgan masofaviy serverlarga ulanishi mumkin, ammo localhost ga kirish cheklangan — boshqa ilovalar sizning ilovangiz ichidagi serverga ulana olmaydi (debug yig'ishlar bundan mustasno). Multicast va broadcast UDP ham App Store ilovalari uchun bloklangan.

Apparat resurslari: kameraga, mikrofonga, geolokatsiyaga, Bluetooth va HealthKit ga kirish tizim dialogi orqali foydalanuvchining aniq ruxsatini talab qiladi. Har bir resurs turi uchun iOS alohida entitlement va sabab tavsifi bilan Info.plist kalitidan (NSPhotoLibraryUsageDescription, NSCameraUsageDescription) foydalanadi. Info.plist da sabab tavsifisiz ruxsat so'rovi ilovaning tugatilishiga olib keladi.

  • Dinamik kod — taqiqlangan: WebView da JS uchun JavaScriptCore, lekin ixtiyoriy mashina kodi emas
  • Bolajon jarayonlar — fork, exec, system Sandbox dan mavjud emas
  • Qurilmalarga kirish — kamera, mikrofon, GPS tizim dialogini talab qiladi
  • Mahalliy tarmoq — multicast va broadcast UDP App Store uchun bloklangan
  • Shifrlash kalitlari — Keychain mavjud, ammo faqat o'z ilovasi uchun (App Group uchun kSecAttrAccessGroup)

Ko'p beriladigan savollar

iOS da Sandbox nima?

Sandbox — fayl tizimiga, tarmoqqa va boshqa ilovalarning ma'lumotlariga kirishni cheklaydigan iOS ilovasining izolyatsiya qilingan bajarish muhiti. Har bir ilova Sandbox.kext orqali iOS yadrosi darajasida boshqariladigan noyob Sandbox konteyneriga ega.

Ilova Sandbox ida qanday fayllar mavjud?

Ilova uchun mavjud: Documents (foydalanuvchi ma'lumotlari), Library (Caches, Preferences, Application Support), tmp (vaqtinchalik fayllar) va Bundle (faqat o'qish). App Group katalogi bir dasturchi guruhidagi ilovalar uchun mavjud.

Boshqa ilovaning fayllariga qanday kirish mumkin?

UIDocumentPickerViewController orqali — foydalanuvchi tizim interfeysi orqali faylni tanlaydi. iOS stopAccessingSecurityScopedResource chaqirilgunga qadar mavjud bo'lgan Security-Scoped URL taqdim etadi. Muqobil — ilovalar o'rtasida ma'lumot uzatish uchun Share Extension.

Security-Scoped Bookmark nima?

Security-Scoped Bookmark — ilovani ishga tushirishlar o'rtasida Sandbox tashqarisidagi faylga kirishni saqlaydigan ma'lumot. UIDocumentPicker dan olingan Security-Scoped URL dan bookmarkData orqali yaratiladi. Keyingi ishga tushirishda bookmark URLByResolvingBookmarkData orqali tiklanadi.

iOS da Sandbox ni o'chirish mumkinmi?

Yo'q, Sandbox ni o'chirish mumkin emas App Store ilovalari uchun. Jailbreak qurilmalarida o'chirish mumkin, ammo bu App Store da nashr etish bilan mos kelmaydi. Dasturchilar simulyatorda Sandboxsiz sinab ko'rishlari mumkin, ammo haqiqiy qurilmalar har doim Sandbox ni qo'llaydi.

Xulosa

  • Sandbox — har bir ilovani yadro darajasida Mandatory Access Control bilan izolyatsiya qiluvchi fundamental iOS xavfsizlik tizimi.
  • Sandbox tuzilishi turli kirish ruxsatlari va zaxiralash siyosatlariga ega Documents, Library, tmp va Bundle kataloglarini o'z ichiga oladi.
  • To'g'ridan-to'g'ri kirish boshqa ilovalarning fayl tizimiga butunlay bloklangan — faqat UIDocumentPicker va App Groups qonuniydir.
  • Security-Scoped Bookmarks tizim interfeyslari orqali olingan Sandbox tashqarisidagi fayllarga doimiy kirishni ta'minlaydi.
  • App Groups bir dasturchining ilovalari va kengaytmalari to'plami uchun umumiy Sandbox maydonini yaratadi.
  • Sandbox cheklovlari dinamik kod, bolajon jarayonlar, multicast tarmoq taqiqini va apparat resurslari uchun majburiy tizim dialoglarini o'z ichiga oladi.
  • Barcha App Store ilovalari Sandbox da ishlaydi — bu ixtiyoriy emas, balki iOS ning majburiy arxitektura xususiyatidir.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing