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 — 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.
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)
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 katalogi | FileManager orqali olish | Ruxsatlar |
|---|---|---|
| Documents | .documentDirectory | O'qish va yozish |
| Bundle | Bundle.main.bundlePath | Faqat o'qish |
| Library | .libraryDirectory | O'qish va yozish |
| tmp | NSTemporaryDirectory() | O'qish va yozish |
| App Group | .containerURL(forSecurityApplicationGroupIdentifier:) | O'qish va yozish |
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 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.
// 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.
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 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.
Ko'p beriladigan savollar
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 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.
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 — 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.
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
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.