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 ने Sandbox को iOS 2.0 में पेश किया और तब से हर प्रमुख संस्करण में प्रतिबंधों को काफी मजबूत किया है।
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 से bookmark बना सकता है और उसे 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
)
}
// Bookmark डेटा को URL में हल करें
func resolveBookmark(data: Data) -> URL? {
var isStale = false
let url = try? URL.byResolvingBookmarkData(
data,
options: .withoutUI,
relativeTo: nil,
bookmarkDataIsStale: &isStale
)
if isStale {
// Bookmark पुराना है, नया बनाने की आवश्यकता है
}
return url
}
महत्वपूर्ण सीमा: Security-Scoped Bookmarks आपके अपने Sandbox के अंदर की फ़ाइलों के लिए काम नहीं करते — केवल UIDocumentPicker या iCloud Drive के माध्यम से प्राप्त फ़ाइलों के लिए। Bookmark में Security-Scoped डेटा होता है, जो सिस्टम को यह पहचानने देता है कि कौन सा ऐप किस फ़ाइल के लिए पहुँच का अनुरोध कर रहा है। यदि ऐप का सर्टिफिकेट समाप्त या बदल जाता है, तो bookmark अमान्य हो जाता है।
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 कंटेनर होता है, जिसकी पहुँच iOS कर्नेल स्तर पर Sandbox.kext के माध्यम से नियंत्रित होती है।
ऐप के लिए उपलब्ध: 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 से प्राप्त) से बनाया जाता है। अगले लॉन्च पर bookmark को URLByResolvingBookmarkData के माध्यम से बहाल किया जाता है।
नहीं, App Store ऐप्स के लिए Sandbox को अक्षम नहीं किया जा सकता। जेलब्रेक डिवाइसों पर इसे अक्षम करना संभव है, लेकिन यह App Store प्रकाशन के साथ असंगत है। डेवलपर सिम्युलेटर पर Sandbox के बिना परीक्षण कर सकते हैं, लेकिन वास्तविक डिवाइस हमेशा Sandbox लागू करते हैं।
निष्कर्ष
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें