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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں