Caches Directory iOS ایپلیکیشن کے سینڈ باکس میں ایک ڈائریکٹری ہے جو عارضی ڈیٹا کو ذخیرہ کرنے کے لیے ڈیزائن کی گئی ہے جسے نیٹ ورک سے بحال یا دوبارہ لوڈ کیا جا سکتا ہے۔ Apple File System Basics (2024) کے مطابق، نظام ڈسک کی جگہ خالی کرنے کے لیے کسی بھی وقت Caches Directory سے فائلیں حذف کر سکتا ہے۔ ایپلیکیشن کو ان فائلوں کی غیر موجودگی کو صحیح طریقے سے سنبھالنا چاہیے اور ضرورت پڑنے پر انہیں بحال کرنا چاہیے۔ Documents Directory کے برعکس، Caches کا ڈیٹا iCloud اور iTunes بیک اپ میں شامل نہیں ہوتا، جس سے صارف کے کلاؤڈ اسٹوریج پر بوجھ کم ہوتا ہے۔
اہم نکات
Caches Directory iOS ایپلیکیشن سینڈ باکس کے اندر ایک ڈائریکٹری ہے جو ضرورت پڑنے پر بحال کیے جا سکنے والے ڈیٹا کو ذخیرہ کرنے کے لیے بہتر بنائی گئی ہے۔ Documents Directory کے برعکس، Caches صارف کے ڈیٹا کے لیے نہیں ہے بلکہ ایپلیکیشن کی کارکردگی کو تیز کرنے کے لیے عارضی ذخیرہ ہے۔
iOS کیشے کی گئی نیٹ ورک ردعمل، پہلے سے لوڈ کردہ تصاویر، سیریلائزڈ آبجیکٹس اور وہ ڈیٹا ذخیرہ کرنے کے لیے Caches Directory استعمال کرتا ہے جسے ایپلیکیشن بحال کر سکتی ہے۔ ڈویلپرز کو اس ڈائریکٹری میں طویل مدتی ڈیٹا ذخیرہ کرنے پر انحصار نہیں کرنا چاہیے۔
Apple WWDC 2020 کے مطابق، تقریباً 40% iOS ایپلیکیشنز کیشے کی گئی تصاویر اور نیٹ ورک ڈیٹا ذخیرہ کرنے کے لیے Caches Directory استعمال کرتی ہیں، جبکہ 25% ڈویلپرز ان ڈائریکٹریز کے فرق کو نہ سمجھنے کی وجہ سے Caches میں وہ ڈیٹا غلط طریقے سے رکھتے ہیں جو Documents یا Application Support میں ہونا چاہیے۔
Caches کی ایک اہم خصوصیت: ایپلیکیشن کو ان حالات کو صحیح طریقے سے سنبھالنا چاہیے جب سسٹم نے کیشے فائل کو حذف کر دیا ہو۔ اگر کیشے ہٹانے سے ایپلیکیشن کی فعالیت متاثر ہوتی ہے، تو ڈیٹا غلط ڈائریکٹری میں ذخیرہ ہے۔
Swift میں، Caches Directory کا راستہ .cachesDirectory کے ساتھ معیاری FileManager طریقہ استعمال کرتے ہوئے حاصل کیا جاتا ہے۔ یہ ایک سادہ عمل ہے جو نیٹ ورک ڈیٹا کے ساتھ کام کرنے والی تقریباً ہر iOS ایپلیکیشن میں استعمال ہوتا ہے۔
import Foundation
let fileManager = FileManager.default
guard let cachesURL = fileManager.urls(
for: .cachesDirectory,
in: .userDomainMask
).first else { return }
// Save cached JSON
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
withJSONObject: response,
options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)
Objective-C، NSCachesDirectory کے ساتھ NSSearchPathForDirectoriesInDomains استعمال کرتا ہے۔ اگرچہ Apple Swift API کی سفارش کرتا ہے، Caches Directory کے ساتھ Objective-C کوڈ کام کرتا رہتا ہے اور معاون ہے۔
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSCachesDirectory,
NSUserDomainMask,
YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];
Swift پروجیکٹس کو URL پر مبنی API ترجیح دینی چاہیے: یہ ٹائپ سیف ہے اور SwiftUI اور Combine جیسے جدید فریم ورکس کے ساتھ بہتر طور پر مربوط ہوتا ہے۔
Caches Directory ڈیٹا کی کئی اقسام کے لیے بہترین ہے جو ایپلیکیشن کارکردگی تیز کرنے کے لیے استعمال کرتی ہے، لیکن یہ سچائی کا واحد ذریعہ نہیں ہے۔ کیشے کے لیے صحیح ڈیٹا کا انتخاب براہ راست UX اور ایپلیکیشن کی کارکردگی کو متاثر کرتا ہے۔
API سے JSON ردعمل، نیوز فیڈ ڈیٹا، آبجیکٹ کی فہرستیں۔ وہ سب کچھ جو ایپلیکیشن سرور سے دوبارہ ڈاؤن لوڈ کر سکتی ہے۔ HTTP ردعمل کے خودکار کیشے کے لیے URLCache استعمال کریں یا سیریلائزڈ آبجیکٹس کو دستی طور پر محفوظ کریں۔
نیٹ ورک سے ڈاؤن لوڈ کی گئی تصاویر Caches Directory کا سب سے عام استعمال ہے۔ SDWebImage اور Kingfisher جیسی لائبریریاں ڈیفالٹ طور پر کیشے کی گئی تصاویر کو Caches میں محفوظ کرتی ہیں۔
| ڈیٹا کی قسم | Caches کے لیے موزوں | مدت برقراری |
|---|---|---|
| JSON API ردعمل | ہاں | سسٹم صفائی تک |
| نیٹ ورک سے تصاویر | ہاں | سسٹم صفائی تک |
| ڈیبگ لاگز | مشروط | tmp میں بہتر |
| گیم سیوز | نہیں | صرف Documents |
| ایپ کنفیگریشنز | نہیں | Application Support |
اگر ڈیٹا بحال نہیں کیا جا سکتا، تو اس کا تعلق Caches سے نہیں ہے۔ یہ سب سے آسان معیار ہے: تصور کریں کہ کل سسٹم Caches سے تمام فائلیں حذف کر دے گا۔ اگر ایپلیکیشن صحیح طریقے سے کام کرتی رہے، تو ڈیٹا صحیح طریقے سے ذخیرہ ہے۔
iOS خود بخود Caches Directory کی صفائی کا انتظام کرتا ہے، لیکن صحیح محرکات اور الگورتھم Apple کے ذریعہ دستاویزی نہیں ہیں۔ یہ معلوم ہے کہ نظام ڈسک کی جگہ کم ہونے پر اور Offload Unused Apps فیچر فعال ہونے پر Caches سے فائلیں حذف کر سکتا ہے۔
صفائی کا عمل ایپلیکیشن کے لیے شفاف ہے: نظام بغیر اطلاع کے فائلیں حذف کرتا ہے۔ ایپلیکیشن کو پڑھنے سے پہلے فائل کی موجودگی کی جانچ کرنی چاہیے اور غیر موجود ہونے پر دوبارہ بنانا چاہیے۔ Caches کے ساتھ کام کرتے وقت طویل مدتی ذخیرہ پر انحصار نہ کرنا ایک اہم ضرورت ہے۔
Apple کے مضمون «File System Basics» (2024) کے مطابق، ایپلیکیشن کو توقع نہیں کرنی چاہیے کہ Caches Directory میں موجود فائلیں سیشنز کے درمیان دستیاب ہوں گی۔ ڈویلپرز کو ایک فال بیک میکانزم نافذ کرنے کا مشورہ دیا جاتا ہے: اگر کیشے کی گئی فائل غائب ہو، تو نیٹ ورک سے ڈیٹا ڈاؤن لوڈ کریں اور اسے دوبارہ Caches میں محفوظ کریں۔
ایک علیحدہ منظر نامہ ایپ آف لوڈ (Offload) ہے۔ جب یہ فیچر فعال ہوتا ہے، iOS ایپلیکیشن کو ہٹا دیتا ہے لیکن اس کا Documents Directory رکھتا ہے۔ Caches Directory اس عمل میں حذف ہو جاتی ہے۔ جو صارف ایپلیکیشن بحال کرتا ہے اسے کیشے کیا گیا ڈیٹا نہیں ملے گا۔ ایپلیکیشن کو اسے دوبارہ ڈاؤن لوڈ کرنا ہوگا۔
Caches اور Temporary (tmp) ڈائریکٹریز کے درمیان فرق اکثر ڈویلپرز میں الجھن کا باعث بنتا ہے۔ دونوں ڈائریکٹریز عارضی ڈیٹا ذخیرہ کرتی ہیں، لیکن مختلف عمر کی ضمانتوں اور مقاصد کے ساتھ۔
| خصوصیت | Caches Directory | Temporary Directory |
|---|---|---|
| عمر | سیشن سے سیشن (ضمانت نہیں) | صرف ایک سیشن میں |
| سسٹم صفائی | جگہ کم ہونے پر | سیشن ختم ہونے یا ریبوٹ پر |
| مقصد | کارکردگی تیز کرنے کے لیے کیشے | بہت عارضی ڈیٹا |
| مثال | کیشے کی گئی تصاویر | برآمد کرنے سے پہلے عارضی فائل |
| بیک اپ | نہیں | نہیں |
اگر ایپلیکیشن شروع ہونے کے درمیان ڈیٹا رکھنا فائدہ مند ہو لیکن بحال کیا جا سکے تو Caches منتخب کریں۔ اگر ڈیٹا صرف موجودہ سیشن میں ضروری ہو اور ایپلیکیشن ختم ہونے کے بعد اس کی کوئی قیمت نہ ہو تو tmp استعمال کریں۔
Caches Directory کے ساتھ کام کرنے کے لیے کئی اصولوں پر عمل کرنا ضروری ہے جو ڈیٹا کے نقصان، غیر متوقع ایپلیکیشن رویے اور کارکردگی کے مسائل سے بچنے میں مدد دیتے ہیں۔
FileManager.fileExists(atPath:) کو Caches سے ہر پڑھنے سے پہلے بلایا جانا چاہیے۔ اگر فائل غائب ہو، تو اصل ماخذ سے ڈیٹا لوڈ کریں اور کیشے میں محفوظ کریں۔ کبھی یہ فرض نہ کریں کہ Caches میں کوئی فائل موجود ہے۔
اپنی ایپلیکیشن میں Caches Directory کے لیے زیادہ سے زیادہ حجم مقرر کریں۔ مثال کے طور پر، تصاویر کے لیے 50 MB اور JSON ردعمل کے لیے 10 MB کی حد۔ حد سے تجاوز کرنے پر، ترمیم کی تاریخ کے مطابق پرانی فائلیں حذف کریں۔
import Foundation
func trimCache(to maxSizeBytes: Int) {
let cachesURL = FileManager.default
.urls(for: .cachesDirectory, in: .userDomainMask)
.first!
guard let enumerator = FileManager.default
.enumerator(
at: cachesURL,
includingPropertiesForKeys: [.fileSizeKey, .contentModificationDateKey]
)
else { return }
// Enumerate and remove old files
// when exceeding size limit
}
ان طریقوں پر عمل کرنا یقینی بناتا ہے کہ ایپلیکیشن سسٹم کیشے صفائی کے اقدامات سے قطع نظر صحیح طریقے سے کام کرتی ہے، اور صارفین غیر متوقع ڈیٹا کے نقصان کا سامنا نہیں کرتے۔
اکثر پوچھے گئے سوالات
نہیں، iOS Caches سے فائلیں حذف کرنے سے پہلے اطلاع نہیں بھیجتا۔ صفائی کا عمل ایپلیکیشن کے لیے مکمل طور پر شفاف ہے۔ حذف ہونے کا پتہ لگانے کا واحد طریقہ فائل پڑھنے کی کوشش کرنا ہے۔ FileManager nil لوٹاتا ہے یا خرابی دیتا ہے، اور ایپلیکیشن کو اس صورت حال سے نمٹنا چاہیے۔
صارفین کے پاس Files یا iTunes کے ذریعے Caches Directory تک براہ راست رسائی نہیں ہے۔ تاہم، وہ ترتیبات > جنرل > اسٹوریج کے ذریعے تمام ایپلیکیشنز کا کیشے صاف کر سکتے ہیں، کسی مخصوص ایپلیکیشن کو منتخب کرکے «ایپ آف لوڈ کریں» دبا سکتے ہیں۔ iOS جگہ کم ہونے پر خود بخود کیشے صاف کر سکتا ہے۔
URLCache Foundation کی طرف سے HTTP درخواستوں کو کیشے کرنے کا ایک بلٹ ان میکانزم ہے۔ یہ خود بخود کیشے کیے گئے ردعمل کو محفوظ اور لوڈ کرتا ہے، اندرونی طور پر Caches Directory استعمال کرتا ہے۔ دستی محفوظ کرنا زیادہ کنٹرول دیتا ہے: آپ فارمیٹ منتخب کر سکتے ہیں، ڈیٹا کو انکرپٹ کر سکتے ہیں اور ہر فائل کی عمر کو انفرادی طور پر منظم کر سکتے ہیں۔
App Store کے ذریعے ایپلیکیشن اپ ڈیٹ کرنے پر، Caches Directory محفوظ رہتی ہے۔ تاہم، اگر نئی اپ ڈیٹ کو انسٹالیشن کے لیے زیادہ جگہ درکار ہو تو مواد سسٹم کے ذریعے حذف کیا جا سکتا ہے۔ ڈویلپر کو اپ ڈیٹ کے بعد Caches کے برقرار رہنے پر انحصار نہیں کرنا چاہیے۔ یہ فال بیک میکانزم لاگو کرنے کی ایک اضافی وجہ ہے۔
ایک مخصوص NSURLSession سیشن کے لیے URLCache کو nil پر سیٹ کریں یا .reloadIgnoringLocalCacheData کیشے پالیسی استعمال کریں۔ آپ خالی کیشے کے ساتھ URLSessionConfiguration بھی بنا سکتے ہیں: sessionConfiguration.urlCache = nil۔ یہ ان ڈیٹا کے لیے مفید ہے جو ہمیشہ تازہ ترین ہونا چاہیے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں