Temporary Directory (tmp) iOS ऐप सैंडबॉक्स में एक डायरेक्टरी है जो अत्यंत अल्पकालिक डेटा को संग्रहीत करने के लिए होती है, जो केवल ऐप के वर्तमान सत्र के दौरान आवश्यक होता है। Apple File System Programming Guide (2024) के अनुसार, सिस्टम प्रत्येक ऐप समाप्ति या डिवाइस रीस्टार्ट पर tmp को साफ़ कर सकता है। Caches Directory के विपरीत, tmp में अस्थायी फ़ाइलें लॉन्च के बीच संग्रहीत रहने के लिए नहीं होती हैं — डेवलपर को डिस्क स्थान बर्बाद न करने के लिए उपयोग के बाद उन्हें स्पष्ट रूप से हटाना चाहिए।
मुख्य बातें
Temporary Directory (जिसे tmp के नाम से भी जाना जाता है) iOS ऐप सैंडबॉक्स के अंदर एक डायरेक्टरी है जो उस डेटा को संग्रहीत करने के लिए डिज़ाइन की गई है जिसका जीवनकाल वर्तमान सत्र तक सीमित है। यह सभी सैंडबॉक्स डायरेक्टरी में सबसे अल्पकालिक भंडारण है।
iOS उन कार्यों के लिए tmp प्रदान करता है जिनमें मध्यवर्ती फ़ाइल भंडारण की आवश्यकता होती है: Documents में ले जाने से पहले फ़ाइल डाउनलोड करना, निर्यात से पहले अस्थायी प्रतिलिपि बनाना, स्ट्रीमिंग डेटा को बफर करना। कार्य पूरा होने के बाद, अस्थायी फ़ाइलों को हटा दिया जाना चाहिए।
Apple Developer Documentation (2024) के अनुसार, tmp डायरेक्टरी अद्वितीय है क्योंकि इसका पथ ऐप लॉन्च के बीच बदल सकता है। iOS प्रत्येक लॉन्च पर tmp के लिए एक नया पथ उत्पन्न करता है — यह सुनिश्चित करता है कि पिछले सत्र का डेटा गलती से न पढ़ा जाए। डेवलपर को कभी भी tmp पथ को लॉन्च के बीच सहेजना नहीं चाहिए।
महत्वपूर्ण: Caches Directory के विपरीत, जहाँ डेटा कई लॉन्च तक रह सकता है, tmp लंबी अवधि में सत्रों के बीच डेटा बनाए रखने की गारंटी नहीं देता। यह वास्तव में अस्थायी डेटा संग्रहीत करने का सबसे विश्वसनीय तरीका है।
Swift में, tmp का पथ प्राप्त करने के लिए वैश्विक फ़ंक्शन NSTemporaryDirectory() या FileManager.temporaryDirectory का उपयोग किया जाता है। ये सभी सैंडबॉक्स डायरेक्टरी में सबसे सरल API हैं।
import Foundation
// Option 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// Option 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Objective-C उसी वैश्विक फ़ंक्शन NSTemporaryDirectory() का उपयोग करता है। परिणाम ऐप की अस्थायी डायरेक्टरी का पूर्ण पथ वाली स्ट्रिंग है।
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
अन्य डायरेक्टरी से एक मुख्य अंतर: NSTemporaryDirectory() को डोमेन या सर्च मास्क निर्दिष्ट करने की आवश्यकता नहीं है — यह एक वैश्विक फ़ंक्शन है। हालाँकि, अगले लॉन्च पर पथ बदल सकता है, इसलिए इसे कभी भी UserDefaults या किसी अन्य स्थायी भंडारण में सहेजें नहीं।
Temporary Directory कड़ाई से परिभाषित परिदृश्यों के लिए अभिप्रेत है। डेवलपर अक्सर tmp को Caches समझ लेते हैं, tmp में वह डेटा रख देते हैं जिसे एक सत्र से अधिक रहना चाहिए। आइए सही उपयोग के मामलों को देखें।
फ़ाइलें जो डेटा निर्यात प्रक्रिया के दौरान बनाई जाती हैं: ईमेल द्वारा भेजने से पहले रिपोर्ट की अस्थायी प्रतिलिपि, अपलोड करने से पहले संपीड़ित संग्रह, प्रारूप रूपांतरण की मध्यवर्ती फ़ाइल। निर्यात पूरा होने के बाद, फ़ाइल को हटा दिया जाना चाहिए।
अस्थायी बफर ऑडियो, वीडियो या स्ट्रीमिंग डेटा रिकॉर्ड करने के लिए जो रियल टाइम में प्रोसेस किया जाता है। उदाहरण के लिए, स्थायी भंडारण में सहेजने से पहले वॉइस रिकॉर्डिंग, या स्ट्रीमिंग के दौरान वीडियो स्ट्रीम बफरिंग।
| परिदृश्य | डायरेक्टरी | तर्क |
|---|---|---|
| निर्यात भेजने से पहले PDF | tmp | भेजने के बाद फ़ाइल की आवश्यकता नहीं |
| कैश छवियाँ | Caches | सत्रों के बीच उपयोगी |
| डाउनलोड फ़ाइल स्थानांतरण से पहले | tmp | मध्यवर्ती भंडारण |
| सत्र लॉग | tmp | केवल सत्र में प्रासंगिक |
| संपादन दस्तावेज़ | tmp | सहेजने से पहले संस्करण |
यदि डेटा केवल यहाँ और अभी चाहिए — tmp का उपयोग करें। यदि यह अगले सत्र में उपयोगी हो सकता है — Caches का उपयोग करें। यदि डेटा हानि अस्वीकार्य है — Documents का उपयोग करें।
iOS tmp के जीवनचक्र को अन्य सैंडबॉक्स डायरेक्टरी से भिन्न तरीके से प्रबंधित करता है। इस चक्र को समझना ऐप में उचित फ़ाइल भंडारण डिज़ाइन करने के लिए महत्वपूर्ण है।
प्रत्येक लॉन्च पर, iOS tmp के लिए एक नया पथ आवंटित कर सकता है। पिछला पथ अप्राप्य हो जाता है, हालाँकि भौतिक फ़ाइलें डिवाइस के रीस्टार्ट होने तक डिस्क पर रह सकती हैं। यही कारण है कि Apple दृढ़ता से सत्रों के बीच tmp पथ को सहेजने की अनुशंसा नहीं करता।
Apple Tech Note TN2150 (2024) के अनुसार, सिस्टम निम्नलिखित मामलों में tmp को साफ़ कर सकता है: डिवाइस रीस्टार्ट, डिस्क स्थान सीमा तक पहुँचना, ऐप ऑफलोड (Offload)। Caches के विपरीत, tmp कई लॉन्च के बीच भी डेटा संग्रहीत करने के लिए नहीं है — यह सैंडबॉक्स में सबसे कम विश्वसनीय भंडारण है।
डेवलपर को FileManager.removeItem(at:) का उपयोग करके कार्य पूरा करने के बाद स्पष्ट रूप से अस्थायी फ़ाइलों को हटाना चाहिए। tmp में न हटाई गई फ़ाइलें जमा होती हैं और डिस्क स्थान बर्बाद करती हैं — iOS निकट भविष्य में उनकी स्वचालित सफाई की गारंटी नहीं देता।
tmp और Caches की तुलना डेवलपर्स को भंडारण के लिए डायरेक्टरी चुनते समय सही निर्णय लेने में मदद करती है। गलत चुनाव या तो समय से पहले डेटा हानि या अनावश्यक स्थान खपत का कारण बन सकता है।
| पैरामीटर | Temporary Directory | Caches Directory |
|---|---|---|
| जीवनकाल | केवल वर्तमान सत्र | सत्रों के बीच (बिना गारंटी) |
| पथ परिवर्तन | हर लॉन्च पर बदल सकता है | स्थिर पथ |
| स्वचालित सफाई | रीबूट पर, ऑफलोड पर | स्थान की कमी पर |
| डेवलपर द्वारा हटाना | कार्य के बाद अनिवार्य | सीमा पार करने पर अनुशंसित |
| उपयोग | मध्यवर्ती संचालन | स्थायी कैश |
एक व्यावहारिक नियम: उन डेटा के लिए tmp चुनें जो निर्माण के सेकंड या मिनटों के भीतर हटा दिए जाएँगे। उन डेटा के लिए Caches चुनें जिन्हें सत्रों के बीच घंटों या दिनों तक रखना उपयोगी है, लेकिन जिन्हें पुनः बनाया जा सकता है।
Temporary Directory के साथ काम करने में अनुशासन आवश्यक है: चूँकि tmp में डेटा अल्पकालिक होता है और इसका संचय स्थान बर्बाद कर सकता है, डेवलपर्स को कई प्रमुख प्रथाओं का पालन करना चाहिए।
FileManager.removeItem(at:) को अस्थायी फ़ाइल के साथ कार्य पूरा करने के तुरंत बाद कॉल किया जाना चाहिए। त्रुटि होने पर भी हटाने की गारंटी के लिए Swift में defer का उपयोग करें।
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Work with temp file
try "temporary data".write(to: tempURL, atomically: true)
// ... file operation ...
// defer executes when scope exits
यदि डेटा निर्माण के एक घंटे बाद भी आवश्यक हो सकता है — इसे Caches या Application Support में सहेजें। tmp मिनटों के संचालन के लिए है, भंडारण के लिए नहीं।
इन नियमों का पालन सुनिश्चित करता है कि अस्थायी फ़ाइलें जमा न हों, डिस्क स्थान का कुशलतापूर्वक उपयोग हो, और ऐप iOS फ़ाइल सिस्टम सफाई के किसी भी परिदृश्य को सही ढंग से संभालता है।
अक्सर पूछे जाने वाले प्रश्न
आमतौर पर पथ एक सत्र के भीतर नहीं बदलता, लेकिन iOS इसकी गारंटी नहीं देता। दुर्लभ मामलों में, सिस्टम tmp को बदल सकता है जब ऐप बैकग्राउंड से फोरग्राउंड में आता है। इसलिए Apple एक वेरिएबल में संग्रहीत करने के बजाय हर बार पथ की आवश्यकता होने पर NSTemporaryDirectory() को कॉल करने की अनुशंसा करता है।
फ़ाइलें जमा होंगी और डिस्क स्थान लेंगी। iOS डिवाइस रीस्टार्ट पर tmp को साफ़ कर सकता है, लेकिन तब तक ऐप डिस्क स्थान बर्बाद करेगा। महत्वपूर्ण संचय पर, उपयोगकर्ता स्टोरेज सेटिंग्स में देख सकता है कि ऐप बहुत अधिक स्थान ले रहा है।
हाँ, आप संवेदनशील डेटा वाली अस्थायी फ़ाइलों के लिए NSFileProtectionComplete के साथ DataProtectionType का उपयोग कर सकते हैं। हालाँकि, ध्यान रखें: यदि फ़ाइल केवल वर्तमान सत्र में पढ़ी जाएगी और फिर हटा दी जाएगी, तो एन्क्रिप्शन अत्यधिक हो सकता है। डेटा प्रकार के आधार पर एन्क्रिप्शन की आवश्यकता का आकलन करें।
अद्वितीय पहचानकर्ता उत्पन्न करने के लिए ProcessInfo.processInfo.globallyUniqueString या UUID().uuidString का उपयोग करें। FileManager urlForCreatingTemporaryFile विधि भी प्रदान करता है, जो स्वचालित रूप से tmp में अद्वितीय नाम उत्पन्न करती है। यह समानांतर लेखन के दौरान टकराव की गारंटी देता है।
अप्रत्यक्ष रूप से — हाँ। Apple डिस्क पर ऐप द्वारा संग्रहीत डेटा की कुल मात्रा पर ध्यान देता है। यदि tmp में गीगाबाइट्स न हटाई गई फ़ाइलें हैं, तो समीक्षक ऐप को अस्वीकार कर सकता है। tmp के लिए अनुशंसित सीमा किसी भी समय 100 MB से अधिक नहीं है। नियमित रूप से tmp साफ़ करें और FileManager के माध्यम से इसका आकार जाँचें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें