Temporary Directory — ما هو، الملفات المؤقتة وإدارة التخزين

المؤلف: IT Sectr نُشر: 2026-07-10 وقت القراءة: 10 دق

Temporary Directory (tmp) هو دليل داخل صندوق الحماية (sandbox) لتطبيق iOS لتخزين البيانات قصيرة المدى للغاية التي تكون مطلوبة فقط خلال جلسة العمل الحالية للتطبيق. وفقاً لـ Apple File System Programming Guide (2024)، يمكن للنظام مسح tmp عند كل إنهاء للتطبيق أو عند إعادة تشغيل الجهاز. على عكس Caches Directory، الملفات المؤقتة في tmp ليست مخصصة للتخزين بين عمليات التشغيل — يجب على المطور حذفها صراحةً بعد الاستخدام لتجنب إهدار مساحة القرص.

الخلاصة

  • Temporary Directory — دليل للبيانات المطلوبة فقط في جلسة التطبيق الحالية.
  • قد يمسح iOS tmp عند إعادة تشغيل الجهاز أو إنهاء التطبيق.
  • الملفات في tmp لا تُضمّن في النسخ الاحتياطية لـ iCloud و iTunes.
  • يتم الحصول على المسار إلى tmp عبر NSTemporaryDirectory() في Swift أو Objective-C.
  • يجب على المطور حذف الملفات يدوياً من tmp بعد الاستخدام.

ما هو Temporary Directory في iOS؟

Temporary Directory (المعروف أيضاً باسم tmp) هو دليل داخل صندوق الحماية لتطبيق iOS مصمم لتخزين البيانات التي يكون عمرها محدوداً بالجلسة الحالية. إنه التخزين الأقصر عمراً بين جميع أدلة صندوق الحماية.

يوفر iOS tmp للعمليات التي تتطلب تخزيناً وسيطاً للملفات: تنزيل ملف قبل نقله إلى Documents، إنشاء نسخة مؤقتة قبل التصدير، تخزين بيانات البث مؤقتاً. بعد اكتمال العملية، يجب حذف الملفات المؤقتة.

وفقاً لوثائق Apple Developer (2024)، دليل tmp فريد من نوعه لأن مساره يمكن أن يتغير بين عمليات تشغيل التطبيق. ينشئ iOS مساراً جديداً لـ tmp عند كل تشغيل — وهذا يضمن عدم قراءة بيانات الجلسة السابقة عن طريق الخطأ. يجب على المطور أبداً حفظ مسار tmp بين عمليات التشغيل.

من المهم: على عكس Caches Directory، حيث يمكن للبيانات البقاء عبر عدة عمليات تشغيل، فإن tmp لا يحتفظ بالبيانات بين الجلسات على المدى الطويل. إنها الطريقة الأكثر موثوقية لتخزين البيانات المؤقتة حقاً.

كيفية الحصول على المسار إلى Temporary Directory

في Swift، للحصول على المسار إلى tmp يتم استخدام الدالة العامة NSTemporaryDirectory() أو FileManager.temporaryDirectory. هذه هي أبسط واجهات برمجة التطبيقات بين جميع أدلة صندوق الحماية.

swift
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(). النتيجة هي سلسلة نصية تحتوي على المسار الكامل للدليل المؤقت للتطبيق.

objective-c
@import Foundation;

NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];

الفرق الرئيسي عن الأدلة الأخرى: NSTemporaryDirectory() لا تتطلب تحديد نطاق أو قناع بحث — إنها دالة عامة. ومع ذلك، قد يتغير المسار عند التشغيل التالي، لذلك لا تحفظه أبداً في UserDefaults أو أي تخزين دائم.

ما البيانات التي يجب تخزينها في tmp

Temporary Directory مخصص لمجموعة محددة بدقة من السيناريوهات. غالباً ما يخلط المطورون بين tmp و Caches، واضعين في tmp بيانات يجب أن تعيش لأكثر من جلسة واحدة. دعنا نلقي نظرة على حالات الاستخدام الصحيحة.

الملفات الوسيطة أثناء التصدير

الملفات التي يتم إنشاؤها أثناء تصدير البيانات: نسخة مؤقتة من تقرير قبل إرساله بالبريد الإلكتروني، أرشيف مضغوط قبل التحميل، ملف وسيط لتحويل التنسيق. بعد اكتمال التصدير، يجب حذف الملف.

تخزين بيانات البث مؤقتاً

مخازن مؤقتة لتسجيل الصوت أو الفيديو أو بيانات البث التي تتم معالجتها في الوقت الفعلي. على سبيل المثال، تسجيل صوتي قبل الحفظ في التخزين الدائم، أو تخزين فيديو مؤقت أثناء البث.

السيناريوالدليلالمبرر
تصدير PDF قبل الإرسالtmpالملف غير مطلوب بعد الإرسال
تخزين الصور مؤقتاًCachesمفيد بين الجلسات
تنزيل ملف قبل النقلtmpتخزين وسيط
سجلات الجلسةtmpذات صلة فقط أثناء الجلسة
تحرير مستندtmpنسخة قبل الحفظ

إذا كانت البيانات مطلوبة فقط هنا والآن — استخدم tmp. إذا كانت قد تكون مفيدة في الجلسة التالية — استخدم Caches. إذا كان فقدان البيانات غير مقبول — استخدم Documents.

دورة حياة الملفات المؤقتة

iOS يدير دورة حياة tmp بشكل مختلف عن أدلة صندوق الحماية الأخرى. فهم هذه الدورة أمر بالغ الأهمية لتصميم تخزين ملفات مناسب في التطبيق.

عند كل تشغيل للتطبيق، قد يخصص iOS مساراً جديداً لـ tmp. يصبح المسار السابق غير قابل للوصول، على الرغم من أن الملفات الفعلية قد تبقى على القرص حتى إعادة تشغيل الجهاز. لهذا السبب توصي Apple بشدة بعدم حفظ مسار tmp بين الجلسات.

وفقاً لملاحظة Apple الفنية TN2150 (2024)، يمكن للنظام مسح tmp في الحالات التالية: إعادة تشغيل الجهاز، الوصول إلى حد مساحة القرص، تفريغ التطبيق (Offload). على عكس Caches، tmp غير مصمم لتخزين البيانات حتى عبر عدة عمليات تشغيل — إنه التخزين الأقل موثوقية في صندوق الحماية.

يجب على المطور حذف الملفات المؤقتة صراحةً بعد إكمال العملية باستخدام FileManager.removeItem(at:). الملفات غير المحذوفة في tmp تتراكم وتهدر مساحة القرص — iOS لا يضمن تنظيفها التلقائي في المستقبل القريب.

Temporary Directory مقابل Caches Directory

مقارنة tmp و Caches تساعد المطورين على اتخاذ القرار الصحيح عند اختيار دليل للتخزين. الاختيار الخاطئ يمكن أن يؤدي إما إلى فقدان مبكر للبيانات أو استهلاك غير ضروري للمساحة.

المعلمةTemporary DirectoryCaches Directory
العمرالجلسة الحالية فقطبين الجلسات (بدون ضمانات)
تغير المسارقد يتغير كل تشغيلمسار ثابت
التنظيف التلقائيعند إعادة التشغيل، عند التفريغعند نقص المساحة
حذف المطورإلزامي بعد العمليةموصى به عند تجاوز الحد
الاستخدامالعمليات الوسيطةذاكرة تخزين مؤقت دائمة

قاعدة عملية: اختر tmp للبيانات التي سيتم حذفها في غضون ثوانٍ أو دقائق بعد الإنشاء. اختر Caches للبيانات التي من المفيد الاحتفاظ بها لساعات أو أيام بين الجلسات ولكن يمكن إعادة إنشائها.

أفضل الممارسات للعمل مع tmp

العمل مع Temporary Directory يتطلب انضباطاً: نظراً لأن البيانات في tmp قصيرة العمر وتراكمها يمكن أن يؤدي إلى إهدار المساحة، يجب على المطورين اتباع عدة ممارسات رئيسية.

احذف الملفات دائماً بعد الاستخدام

FileManager.removeItem(at:) يجب استدعاؤه فوراً بعد الانتهاء من العملية مع الملف المؤقت. استخدم defer في Swift لضمان الحذف حتى في حالة حدوث خطأ.

swift
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

لا تستخدم tmp للبيانات طويلة العمر

إذا كانت البيانات قد تكون مطلوبة بعد ساعة من إنشائها — قم بحفظها في Caches أو Application Support. tmp مصمم للعمليات التي تستغرق دقائق، وليس للتخزين.

اتباع هذه القواعد يضمن أن الملفات المؤقتة لا تتراكم، وأن مساحة القرص تستخدم بكفاءة، وأن التطبيق يتعامل بشكل صحيح مع أي سيناريوهات لتنظيف نظام ملفات iOS.

الأسئلة الشائعة

هل يمكن أن يتغير المسار إلى Temporary Directory أثناء تشغيل التطبيق؟

عادةً لا يتغير المسار ضمن جلسة واحدة، لكن iOS لا يضمن ذلك. في حالات نادرة، قد يغير النظام tmp عند انتقال التطبيق من الخلفية إلى المقدمة. لهذا توصي Apple باستدعاء NSTemporaryDirectory() في كل مرة تحتاج فيها المسار بدلاً من تخزينه في متغير.

ماذا يحدث إذا لم أحذف الملفات من tmp؟

الملفات ستتراكم وتشغل مساحة على القرص. قد يمسح iOS tmp عند إعادة تشغيل الجهاز، لكن حتى ذلك الحين سيهدر التطبيق مساحة القرص. مع التراكم الكبير، قد يرى المستخدم في إعدادات التخزين أن التطبيق يشغل مساحة كبيرة.

هل tmp مناسب لتشفير البيانات المؤقتة؟

نعم، يمكنك استخدام DataProtectionType مع NSFileProtectionComplete للملفات المؤقتة التي تحتوي على بيانات حساسة. لكن ضع في اعتبارك: إذا كان الملف سيُقرأ فقط ضمن الجلسة الحالية ثم يُحذف، فقد يكون التشفير مبالغاً فيه. قيّم الحاجة إلى التشفير بناءً على نوع البيانات.

كيفية إنشاء اسم ملف فريد في tmp دون تعارض؟

استخدم ProcessInfo.processInfo.globallyUniqueString لتوليد معرف فريد، أو UUID().uuidString. يوفر FileManager أيضاً طريقة urlForCreatingTemporaryFile التي تنشئ تلقائياً اسماً فريداً في tmp. هذا يضمن عدم وجود تعارضات أثناء الكتابة المتوازية.

هل يؤثر حجم tmp على مراجعة App Store؟

بشكل غير مباشر — نعم. Apple تهتم بالحجم الإجمالي للبيانات التي يخزنها التطبيق على القرص. إذا كان tmp يحتوي على غيغابايت من الملفات غير المحذوفة، قد يرفض المراجع التطبيق. الحد الموصى به لـ tmp هو لا يزيد عن 100 ميجابايت في أي وقت. نظف tmp بانتظام وتحقق من حجمه عبر FileManager.

الملخص

  • Temporary Directory (tmp) — دليل للبيانات التي يكون عمرها محدوداً بجلسة التطبيق الحالية.
  • مسار tmp يمكن أن يتغير بين عمليات التشغيل — لا تحفظه في تخزين دائم.
  • يمكن للنظام مسح tmp عند إعادة تشغيل الجهاز أو تفريغ التطبيق.
  • الملفات في tmp لا تُضمّن في النسخ الاحتياطية لـ iCloud و iTunes.
  • على عكس Caches Directory، tmp غير مصمم للتخزين بين الجلسات.
  • يجب على المطور حذف الملفات المؤقتة صراحةً باستخدام FileManager.removeItem.
  • استخدم defer في Swift لضمان حذف الملفات المؤقتة بغض النظر عن نتيجة العملية.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا