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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন