Sandbox iOS ایپس کے لیے ایک الگ تھلگ رن ٹائم ماحول ہے جو فائل سسٹم، نیٹ ورک، ہارڈویئر وسائل اور دیگر ایپس کے ڈیٹا تک رسائی کو محدود کرتا ہے۔ ہر ایپ کو انسٹالیشن کے وقت اپنا Sandbox ماحول ملتا ہے، اور اس کے تمام فائل آپریشن خود بخود اس الگ تھلگ علاقے میں منتقل ہو جاتے ہیں۔ Apple App Sandbox Design Guide (2026) کے مطابق، سینڈ باکس آرکیٹیکچر تحفظ کی تین سطحوں پر مبنی ہے: فائل سسٹم کی تنہائی، بین العمل مواصلات کا کنٹرول، اور entitlements کے ذریعے واضح اجازت کی درخواست کے ساتھ ہارڈویئر وسائل کی علیحدگی۔
اہم نکات
Sandbox ایک لازمی رسائی کنٹرول (Mandatory Access Control) نظام ہے جو iOS کرنل کی سطح پر نافذ کیا جاتا ہے (XNU — Sandbox.kext کرنل ایکسٹینشن)۔ ہر ایپ کو لانچ کے وقت ایک منفرد UUID Sandbox پروفائل ملتا ہے، جو طے کرتا ہے کہ ایپ کو کن وسائل تک رسائی کی اجازت ہے۔
Sandbox آرکیٹیکچر میں تین اہم اجزاء شامل ہیں: File System Isolation (ہر ایپ صرف اپنا کنٹینر دیکھتی ہے)، Network Access Control (لوکل نیٹ ورک کی درخواستیں محدود ہو سکتی ہیں) اور Inter-Process Communication (دیگر ایپس کے ساتھ براہ راست IPC پر پابندی)۔ Apple نے iOS 2.0 میں Sandbox متعارف کرایا اور تب سے ہر بڑے ورژن میں پابندیوں کو نمایاں طور پر مضبوط کیا۔
Sandbox اختیاری نہیں ہے — App Store کی تمام ایپس سینڈ باکس میں چلتی ہیں۔ ڈویلپر Sandbox کو غیر فعال نہیں کر سکتا اور نہ ہی اس کی پابندیوں کو نظرانداز کر سکتا ہے۔ ممنوعہ وسیلہ تک رسائی کی کوشش EPERM (Operation not permitted) ایرر کوڈ اور سسٹم لاگ میں اندراج کے ساتھ ختم ہوتی ہے۔
import Foundation
// کسی دوسری ایپ کی فائل تک رسائی کی کوشش — nil واپس کرتا ہے
let otherAppPath = "/var/mobile/Containers/Data/Application/OTHER-UUID/Documents/file.txt"
let data = try? Data(contentsOf: URL(fileURLWithPath: otherAppPath))
// data == nil — Sandbox رسائی روکتا ہے
// درست رسائی — اپنے Sandbox کے اندر
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 میں ہر ایپ کے Sandbox میں کئی پہلے سے طے شدہ ڈائریکٹریاں ہوتی ہیں جو Foundation API کے ذریعے قابل رسائی ہیں۔ فزیکل میڈیم پر مقام /var/mobile/Containers/Data/Application/{UUID}/ ہے، لیکن ڈویلپرز کو یہ راستہ براہ راست استعمال نہیں کرنا چاہیے: یہ مختلف iOS ورژنز میں ڈیوائس کے ہر ری اسٹارٹ پر تبدیل ہو جاتا ہے۔
Sandbox کی اہم ڈائریکٹریاں: Bundle (.app — صرف پڑھنے کے لیے، قابل عمل کوڈ اور وسائل پر مشتمل)، Documents (صارف کا ڈیٹا، iCloud میں بیک اپ ہوتا ہے)، Library (Caches، Preferences، Application Support — مختلف بیک اپ قواعد کے ساتھ)، tmp (عارضی فائلیں، جگہ کم ہونے پر سسٹم حذف کر دیتا ہے)۔ ہر ڈائریکٹری کا اپنا لائف سائیکل اور ذخیرہ کاری پالیسی ہوتی ہے۔
Sandbox کا فزیکل راستہ NSHomeDirectory() یا FileManager.url(for: .documentDirectory) کے ذریعے حاصل کیا جا سکتا ہے۔ Apple URL پر مبنی API استعمال کرنے کی تجویز دیتا ہے، کیونکہ یہ فائل سسٹم کی اندرونی ساخت کو تجریدی بناتا ہے اور ڈیسک ٹاپ پر macOS Sandbox میں تبدیلی کے باوجود مستحکم رہتا ہے۔
| Sandbox ڈائریکٹری | FileManager سے حصول | اجازتیں |
|---|---|---|
| Documents | .documentDirectory | پڑھنا اور لکھنا |
| Bundle | Bundle.main.bundlePath | صرف پڑھنا |
| Library | .libraryDirectory | پڑھنا اور لکھنا |
| tmp | NSTemporaryDirectory() | پڑھنا اور لکھنا |
| App Group | .containerURL(forSecurityApplicationGroupIdentifier:) | پڑھنا اور لکھنا |
iOS میں دیگر ایپس کے فائل سسٹم تک براہ راست رسائی مکمل طور پر بند ہے۔ چاہے ڈویلپر کسی دوسری ایپ کے کنٹینر کا UUID جانتا ہو، کرنل کی سطح پر Sandbox پڑھنے یا لکھنے کی کوشش پر ایرر واپس کرتا ہے۔ یہ iOS اور macOS کے درمیان بنیادی فرق ہے، جہاں Sandbox زیادہ لچکدار ہے۔
Apple ایپس کے درمیان ڈیٹا کے تبادلے کے لیے تین جائز طریقہ کار فراہم کرتا ہے: UIDocumentPickerViewController (صارف سسٹم انٹرفیس کے ذریعے فائل منتخب کرتا ہے اور ایپ کو Security-Scoped URL ملتا ہے)، Share Extension (دوسری ایپ میں ڈیٹا منتقل کرنے کے لیے ایکسٹینشن) اور App Groups (ایک ہی ڈویلپر کی ایپس کے لیے مشترکہ ڈائریکٹری)۔
UIDocumentPicker بغیر پہلے سے ترتیب کے دیگر ایپس کی فائلوں تک رسائی کا واحد طریقہ ہے۔ صارف معیاری سسٹم پکر کے ذریعے واضح طور پر فائل منتخب کرتا ہے، اور iOS ایپ کو عارضی Security-Scoped URL فراہم کرتا ہے۔ رسائی پکر کے بند ہونے تک یا stopAccessingSecurityScopedResource کو کال کرنے تک جاری رہتی ہے۔
Security-Scoped Bookmark ایک iOS طریقہ کار ہے جو ایپ لانچ کے درمیان Sandbox سے باہر کی فائل تک رسائی برقرار رکھنے کی اجازت دیتا ہے۔ جب صارف UIDocumentPicker کے ذریعے فائل منتخب کرتا ہے، تو ایپ Security-Scoped URL سے بک مارک بنا سکتی ہے اور اسے UserDefaults یا کسی اور اسٹوریج میں محفوظ کر سکتی ہے۔
اگلی لانچ پر، ایپ URLByResolvingBookmarkData کے ذریعے رسائی بحال کرتی ہے، جو Security-Scoped URL واپس کرتا ہے۔ پھر فائل پڑھنے سے پہلے startAccessingSecurityScopedResource اور کام مکمل ہونے کے بعد stopAccessingSecurityScopedResource کو کال کرنا ضروری ہے۔ کالز کا توازن لازمی ہے — ہر start کے لیے ایک منسلک stop ہونا چاہیے، ورنہ سسٹم Security-Scoped وسائل کی حد ختم کر دے گا۔
// Security-Scoped Bookmark بنائیں
func createBookmark(for url: URL) -> Data? {
return try? url.bookmarkData(
options: .minimalBookmark,
includingResourceValuesForKeys: nil,
relativeTo: nil
)
}
// بک مارک ڈیٹا کو URL میں حل کریں
func resolveBookmark(data: Data) -> URL? {
var isStale = false
let url = try? URL.byResolvingBookmarkData(
data,
options: .withoutUI,
relativeTo: nil,
bookmarkDataIsStale: &isStale
)
if isStale {
// بک مارک پرانا ہے، نیا بنانے کی ضرورت ہے
}
return url
}
اہم حد: Security-Scoped Bookmarks آپ کے اپنے Sandbox کے اندر کی فائلوں کے لیے کام نہیں کرتے — صرف UIDocumentPicker یا iCloud Drive کے ذریعے حاصل کردہ فائلوں کے لیے۔ بک مارک میں Security-Scoped ڈیٹا ہوتا ہے جو سسٹم کو یہ شناخت کرنے دیتا ہے کہ کون سی ایپ کس فائل کے لیے رسائی کی درخواست کر رہی ہے۔ اگر ایپ کا سرٹیفکیٹ ختم یا تبدیل ہو جائے تو بک مارک ناکارہ ہو جاتا ہے۔
App Groups ایک iOS طریقہ کار ہے جو ایک ہی ڈویلپر کی متعدد ایپس (اور ان کے ایکسٹینشنز) کو مشترکہ Sandbox ڈائریکٹری بانٹنے کی اجازت دیتا ہے۔ فعال کرنے کے لیے Xcode میں App Groups Capability شامل کرنا اور تمام ہدف ایپس کے لیے ایک جیسا گروپ شناخت کنندہ متعین کرنا ضروری ہے۔
مشترکہ App Groups ڈائریکٹری ہر انفرادی ایپ کے Sandbox سے باہر ہوتی ہے، لیکن گروپ کی تمام ایپس کو اس پر مکمل پڑھنے اور لکھنے کی رسائی ہوتی ہے۔ یہ مرکزی ایپ، Today Widget، Watch Extension اور Share Extension کے درمیان فائلوں، ڈیٹا بیسز (App Group میں Store URL کے ساتھ Core Data) اور UserDefaults (initWithSuiteName کے ذریعے) کے تبادلے کی اجازت دیتا ہے۔
Apple ایپ اور اس کے ایکسٹینشنز کے درمیان حالت کی ہم آہنگی کے لیے App Groups استعمال کرنے کی تجویز دیتا ہے۔ مثال کے طور پر، Today Widget مشترکہ App Groups ڈائریکٹری سے ڈیٹا پڑھ سکتا ہے، جہاں مرکزی ایپ تازہ ترین ڈیٹا لکھتی ہے۔ ساتھ ہی، ہر ایپ اب بھی دیگر App Groups سے الگ تھلگ ہے — صرف ایک ہی گروپ شناخت کنندہ والی ایپس کو رسائی ملتی ہے۔
iOS میں Sandbox کئی سخت پابندیاں عائد کرتا ہے جنہیں ترقی کے دوران مدنظر رکھنا ضروری ہے۔ اہم: متحرک کوڈ پر پابندی (Sandbox سے باہر کوڈ لوڈ اور چلانا)، صارف کی اجازت کے بغیر ایڈریس بک، کیلنڈر اور تصاویر تک براہ راست رسائی پر پابندی (Privacy framework)، اور چائلڈ پروسیس بنانے پر پابندیاں (fork اور exec ممنوع ہیں)۔
نیٹ ورک: ایپس TCP/UDP کے ذریعے کسی بھی ریموٹ سرور سے جڑ سکتی ہیں، لیکن localhost تک رسائی محدود ہے — دیگر ایپس آپ کی ایپ کے اندر کسی سرور سے منسلک نہیں ہو سکتیں (ڈیبگ بلڈز کے علاوہ)۔ App Store ایپس کے لیے multicast اور broadcast UDP بھی بند ہے۔
ہارڈویئر وسائل: کیمرہ، مائیکروفون، جیو لوکیشن، Bluetooth اور HealthKit تک رسائی کے لیے سسٹم ڈائیلاگ کے ذریعے صارف کی واضح اجازت درکار ہے۔ ہر قسم کے وسیلے کے لیے iOS الگ entitlement اور وجہ کی وضاحت والی Info.plist کلید (NSPhotoLibraryUsageDescription، NSCameraUsageDescription) استعمال کرتا ہے۔ Info.plist میں وجہ کی وضاحت کے بغیر اجازت مانگنے سے ایپ بند ہو جاتی ہے۔
اکثر پوچھے جانے والے سوالات
Sandbox iOS ایپس کے لیے ایک الگ تھلگ رن ٹائم ماحول ہے جو فائل سسٹم، نیٹ ورک اور دیگر ایپس کے ڈیٹا تک رسائی کو محدود کرتا ہے۔ ہر ایپ کا ایک منفرد Sandbox کنٹینر ہوتا ہے، جس کی رسائی Sandbox.kext کے ذریعے iOS کرنل کی سطح پر کنٹرول ہوتی ہے۔
ایپ کے لیے دستیاب: Documents (صارف کا ڈیٹا)، Library (Caches، Preferences، Application Support)، tmp (عارضی فائلیں) اور Bundle (صرف پڑھنے کے لیے)۔ App Group ڈائریکٹری ایک ہی ڈویلپر گروپ کی ایپس کے لیے دستیاب ہے۔
UIDocumentPickerViewController کے ذریعے — صارف سسٹم انٹرفیس کے ذریعے فائل منتخب کرتا ہے۔ iOS ایک Security-Scoped URL فراہم کرتا ہے، جو stopAccessingSecurityScopedResource کو کال کرنے تک دستیاب رہتا ہے۔ متبادل — ایپس کے درمیان ڈیٹا منتقل کرنے کے لیے Share Extension۔
Security-Scoped Bookmark ایک Data ہے جو ایپ لانچ کے درمیان Sandbox سے باہر کی فائل تک رسائی برقرار رکھتا ہے۔ یہ bookmarkData کے ذریعے Security-Scoped URL (UIDocumentPicker سے حاصل کردہ) سے بنتا ہے۔ اگلی لانچ پر بک مارک URLByResolvingBookmarkData کے ذریعے بحال کیا جاتا ہے۔
نہیں، App Store ایپس کے لیے Sandbox کو غیر فعال نہیں کیا جا سکتا۔ جیل بریک شدہ ڈیوائسز پر اسے غیر فعال کرنا ممکن ہے، لیکن یہ App Store پر اشاعت کے ساتھ مطابقت نہیں رکھتا۔ ڈویلپرز سمیولیٹر پر Sandbox کے بغیر ٹیسٹ کر سکتے ہیں، لیکن حقیقی ڈیوائسز ہمیشہ Sandbox نافذ کرتی ہیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں