Documents Directory iOS ऐप सैंडबॉक्स में एक निर्देशिका है जो उपयोगकर्ता डेटा को संग्रहीत करने के लिए डिज़ाइन की गई है जो ऐप सत्रों के बीच बना रहना चाहिए और iTunes File Sharing और iCloud के माध्यम से उपयोगकर्ता के लिए सुलभ होना चाहिए। Apple File System Programming Guide (2024) के अनुसार, इस निर्देशिका की सामग्री स्वचालित रूप से iCloud और iTunes बैकअप में शामिल होती है, इसलिए डेवलपर को सचेत रूप से चुनना चाहिए कि Documents में कौन सा डेटा रखना है। Caches Directory के विपरीत, Documents में फ़ाइलें सिस्टम द्वारा स्थान की कमी होने पर नहीं हटाई जाती हैं — आकार प्रबंधन की ज़िम्मेदारी ऐप पर है।
मुख्य बिंदु
Documents Directory iOS ऐप सैंडबॉक्स के अंदर एक निर्देशिका है जो उपयोगकर्ता डेटा को संग्रहीत करने के लिए डिज़ाइन की गई है जो लॉन्च के बीच बना रहना चाहिए और उपयोगकर्ता के लिए सुलभ होना चाहिए। प्रत्येक ऐप को अपना अलग सैंडबॉक्स मिलता है, और Documents, Caches, tmp और Library के साथ मुख्य निर्देशिकाओं में से एक है।
iOS एक सख्त सैंडबॉक्स का उपयोग करता है: एक ऐप के पास विशेष अनुमतियों के बिना अन्य ऐप्स की फ़ाइल प्रणाली या सिस्टम निर्देशिकाओं तक पहुँच नहीं होती है। Documents Directory एकमात्र निर्देशिका है जिसकी सामग्री उपयोगकर्ता iTunes File Sharing के माध्यम से देख सकता है (जब Info.plist में UIFileSharingEnabled कुंजी सक्षम हो)।
Apple WWDC 2023 के अनुसार, App Store में 85% से अधिक ऐप्स कम से कम एक प्रकार के उपयोगकर्ता डेटा को संग्रहीत करने के लिए Documents Directory का उपयोग करते हैं — निर्यात किए गए PDF से लेकर सहेजी गई गेम फ़ाइलों और निर्यात की गई छवियों तक।
डेवलपर के लिए यह समझना महत्वपूर्ण है: Documents में फ़ाइलें स्वचालित रूप से शामिल होती हैं iCloud और iTunes बैकअप में। यदि कोई ऐप Documents में बड़ी मात्रा में पुनर्प्राप्त करने योग्य डेटा संग्रहीत करता है (जैसे, इमेज कैश या अस्थायी फ़ाइलें), तो इससे उपयोगकर्ता के iCloud स्टोरेज स्थान की अनावश्यक खपत होती है।
Swift में, Documents Directory का पथ FileManager के माध्यम से प्राप्त किया जाता है। Apple आधुनिक iOS क्षमताओं के साथ बेहतर संगतता के लिए स्ट्रिंग-आधारित के बजाय URL-आधारित API का उपयोग करने की सलाह देता है।
import Foundation
let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
for: .documentDirectory,
in: .userDomainMask
).first else { return }
// Documents में फ़ाइल बनाएँ
let fileURL = documentsURL.appendingPathComponent("report.pdf")
let data = Data("Hello, world!".utf8)
try data.write(to: fileURL)
Objective-C NSSearchPathForDirectoriesInDomains का उपयोग करता है — एक पुराना लेकिन फिर भी समर्थित दृष्टिकोण जो URL के बजाय एक स्ट्रिंग पथ लौटाता है।
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES
);
NSString *documentsPath = paths.firstObject;
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"report.pdf"];
Swift में आधुनिक प्रोजेक्ट्स को FileManager.urls का उपयोग करना चाहिए, क्योंकि यह विधि स्ट्रिंग के बजाय URL लौटाती है, जिससे पथ एन्कोडिंग त्रुटियों का जोखिम कम होता है और कोड अधिक टाइप-सेफ़ बनता है।
Documents Directory उपयोगकर्ता द्वारा बनाए गए या उपयोगकर्ता के लिए स्पष्ट रूप से आवश्यक डेटा के लिए है। Apple कई श्रेणियों पर प्रकाश डालता है जो इस निर्देशिका के लिए उपयुक्त हैं।
फ़ाइलें जो उपयोगकर्ता बनाता या आयात करता है — टेक्स्ट दस्तावेज़, PDF, छवियाँ, निर्यात की गई रिपोर्ट, बैकअप फ़ाइलें। इस डेटा का उपयोगकर्ता के लिए सीधा मूल्य है और इसका खोना गंभीर होगा।
गेम सेव, ऐप स्थिति फ़ाइलें, निर्यात की गई परियोजनाएँ — वह सब कुछ जो उपयोगकर्ता ऐप को पुनः स्थापित करने के बाद पुनर्स्थापित करने की अपेक्षा करता है। हालाँकि, महत्वपूर्ण डेटा के लिए iCloud Key-Value Storage या iCloud सिंक के साथ Core Data का अतिरिक्त उपयोग करने की अनुशंसा की जाती है।
| डेटा प्रकार | Documents के लिए उपयुक्त | विकल्प |
|---|---|---|
| PDF और टेक्स्ट दस्तावेज़ | हाँ | — |
| इमेज कैश | नहीं | Caches Directory |
| गेम सेव | हाँ | iCloud KVS |
| लॉग और डीबग डेटा | नहीं | Caches या tmp |
| निर्यात की गई रिपोर्ट | हाँ | — |
मुख्य मानदंड: यदि डेटा को नेटवर्क से पुनः डाउनलोड किया जा सकता है या पुनः बनाया जा सकता है — तो इसका स्थान Caches में है, Documents में नहीं। Documents में प्रत्येक गीगाबाइट उपयोगकर्ता के iCloud बैकअप में एक गीगाबाइट है।
iOS स्वचालित रूप से Documents Directory की सामग्री को बैकअप में शामिल करता है जब डिवाइस iTunes से कनेक्ट होता है या iCloud के साथ सिंक करता है। इस व्यवहार को निर्देशिका स्तर पर अक्षम नहीं किया जा सकता — केवल प्रति फ़ाइल NSURLIsExcludedFromBackupKey विशेषता के माध्यम से।
iOS 5.0 से शुरू करते हुए, Apple ने उन ऐप्स को अस्वीकार करना शुरू किया जो Documents में बड़ी मात्रा में पुनर्प्राप्त करने योग्य डेटा संग्रहीत करते हैं। Apple की अनुशंसा: जिन फ़ाइलों को पुनः डाउनलोड किया जा सकता है, उन्हें बैकअप बहिष्करण फ़्लैग के साथ Caches Directory में संग्रहीत किया जाना चाहिए।
import Foundation
let documentsURL = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)
.first!
// फ़ाइल को iCloud बैकअप से बाहर करें
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true
var fileURL = documentsURL.appendingPathComponent("cached_data.json")
try fileURL.setResourceValues(resourceValues)
iCloud सिंक्रोनाइज़ेशन NSUbiquitousContainer के माध्यम से काम करता है यदि ऐप iCloud Documents का उपयोग करता है। इस मामले में, Documents Directory से फ़ाइलें स्वचालित रूप से उपयोगकर्ता के उपकरणों के बीच सिंक होती हैं। iCloud के बिना ऐप्स के लिए, सिंक्रोनाइज़ेशन बैकअप तक सीमित है।
Documents और Caches के बीच का अंतर शुरुआती iOS डेवलपर्स के बीच सबसे आम गलतफहमियों में से एक है। मुख्य अंतर: सिस्टम स्थान खाली करने के लिए किसी भी समय Caches से फ़ाइलों को हटा सकता है, लेकिन उपयोगकर्ता की जानकारी के बिना Documents को कभी नहीं छूता है।
| विशेषता | Documents Directory | Caches Directory |
|---|---|---|
| iCloud बैकअप | हाँ (डिफ़ॉल्ट रूप से) | नहीं |
| सिस्टम द्वारा हटाना | कभी नहीं | स्थान की कमी होने पर |
| iTunes File Sharing | हाँ (फ़्लैग सक्षम होने पर) | नहीं |
| उद्देश्य | उपयोगकर्ता डेटा | कैश, अस्थायी डेटा |
| डेटा पुनर्प्राप्ति | पुनर्स्थापना की आवश्यकता | पुनः डाउनलोड किया जा सकता है |
Apple Developer Documentation (2024) के अनुसार, Documents Directory का अनुचित उपयोग समीक्षा के दौरान ऐप अस्वीकृति के सामान्य कारणों में से एक है: यदि कोई ऐप Documents में कुछ मेगाबाइट से अधिक पुनर्प्राप्त करने योग्य डेटा संग्रहीत करता है, तो Apple इसे Caches में स्थानांतरित करने या NSURLIsExcludedFromBackupKey लागू करने की सलाह देता है।
एक व्यावहारिक नियम: यदि उपयोगकर्ता फ़ाइल खोने पर परेशान होगा — इसे Documents में स्टोर करें। यदि फ़ाइल को पुनः डाउनलोड या पुनः उत्पन्न किया जा सकता है — इसे Caches में स्टोर करें।
अनुभवी iOS डेवलपर्स ने कई नियम विकसित किए हैं जो ऐप जीवनचक्र के सभी चरणों में Documents Directory के साथ समस्याओं से बचने में मदद करते हैं — विकास से लेकर App Store प्रकाशन तक।
नियमित रूप से FileManager.enumerator(at:includingPropertiesForKeys:) के माध्यम से Documents Directory के आकार की जाँच करें। यदि आकार गैर-उपयोगकर्ता डेटा के लिए 100 MB से अधिक है — तो यह स्टोरेज आर्किटेक्चर पर पुनर्विचार करने का एक कारण है।
किसी भी फ़ाइल के लिए जिसे पुनः डाउनलोड किया जा सकता है, isExcludedFromBackup = true सेट करें। यह उपयोगकर्ता के iCloud स्टोरेज पर लोड को कम करता है और App Review अस्वीकृति के जोखिम को कम करता है।
Documents में डेटा प्रारूप बदलते समय, माइग्रेशन की योजना बनाएँ: पुरानी फ़ाइलों को तब तक न हटाएँ जब तक आप सुनिश्चित न हों कि नई फ़ाइलें सही ढंग से बनाई गई हैं। संस्करण-विशिष्ट उपनिर्देशिकाओं का उपयोग करें।
import Foundation
let documentsURL = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)
.first!
let versionDir = documentsURL.appendingPathComponent("v2")
try FileManager.default.createDirectory(
at: versionDir,
withIntermediateDirectories: true
)
इन अभ्यासों का पालन करने से उपयोगकर्ता डेटा हानि का जोखिम कम होता है, iCloud बैकअप आकार घटता है और App Store समीक्षा सरल होती है।
अक्सर पूछे जाने वाले प्रश्न
हाँ, Files के माध्यम से — iOS 11 से शुरू होने वाला अंतर्निहित iOS ऐप। जब Info.plist में UIFileSharingEnabled कुंजी सक्षम होती है, तो Documents Directory की सामग्री फ़ाइलें ऐप में "मेरे iPhone पर" अनुभाग में दिखाई देती है। उपयोगकर्ता फ़ाइलों को देख, कॉपी और हटा सकता है।
ऐप का पूरा सैंडबॉक्स, जिसमें Documents Directory, Caches, tmp और Library शामिल हैं, डिवाइस से पूरी तरह हटा दिया जाता है। iCloud में बैकअप पुनर्स्थापना या मैन्युअल हटाने तक संरक्षित रहते हैं। पुनः स्थापित करने पर, ऐप एक साफ सैंडबॉक्स से शुरू होता है।
निर्देशिका में सभी फ़ाइलों को पार करने और उनके आकार को जोड़ने के लिए FileManager.enumerator का उपयोग करें। प्रत्येक फ़ाइल के लिए, resourceValues(forKeys:) के माध्यम से .fileSize विशेषता प्राप्त करें। वैकल्पिक रूप से, URLResourceKey.fileSizeKey और .directoryEnumerationResults का उपयोग करें।
डिफ़ॉल्ट रूप से, Core Data SQLite फ़ाइल Library/Application Support में बनाता है, Documents में नहीं। डेटाबेस को Documents में स्थानांतरित करने की अनुशंसा नहीं की जाती है — यह iTunes File Sharing में शामिल होगा और उपयोगकर्ता गलती से इसे हटा या संशोधित कर सकता है। अपवाद यह है यदि ऐप स्पष्ट रूप से उपयोगकर्ता को Core Data के माध्यम से डेटा तक पहुँच प्रदान करता है।
UIFileSharingEnabled (Application supports iTunes file sharing) Info.plist में एक बूलियन कुंजी है। YES पर सेट करने पर, उपयोगकर्ता iTunes और Files के माध्यम से Documents Directory से फ़ाइलों की प्रतिलिपि बना सकते हैं। Info.plist में कुंजी जोड़ें: UIFileSharingEnabled = YES। इसे केवल तभी सक्षम करें यदि ऐप वास्तव में उपयोगकर्ता दस्तावेज़ बनाता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें