كيفية مسح ذاكرة Swift Package Manager المؤقتة بأمان
فريق AskClean · آخر تحديث 2026-11-02
استخدم swift package clean لنواتج بناء الحزمة الحالية، وreset لإعادة ضبط ذاكرة تلك الحزمة ومجلد بنائها بالكامل، وswift package purge-cache لذاكرة المستودعات المشتركة في SwiftPM فقط. احتفظ بملفي Package.swift وPackage.resolved؛ فهما يحددان الاعتماديات وليسا ذاكرة مؤقتة يمكن التخلص منها.

لدى SwiftPM أكثر من ذاكرة مؤقتة
في الحزمة التي تُبنى من سطر الأوامر، يضم مجلد .build عادةً النسخ المستخرجة (checkouts) والمستودعات ونواتج البناء وحالة مساحة العمل، بينما يحتفظ SwiftPM بذاكرة مستودعات مشتركة حتى لا تجلب المشاريع الاعتماديات نفسها من الشبكة في كل مرة. ويضيف Xcode طبقة أخرى، إذ ترتبط نسخ الحزم ونواتجها عادةً بمجلد DerivedData الخاص بالمشروع. نظّف أضيق طبقة تفسر المشكلة: تنظيف المشروع أسرع استرجاعًا ولا يبطئ المستودعات الأخرى.
اختر الأمر حسب النطاق
يحذف swift package clean نواتج بناء الحزمة، وهو الخيار الأول لنواتج مترجمة قديمة أو لتنظيف يقتصر على مستودع واحد. أما swift package reset فيعيد ضبط ذاكرة الحزمة ومجلد بنائها بالكامل، فاستخدمه إذا لم يحل clean مشكلة مساحة عمل محلية تالفة. ويفرغ swift package purge-cache ذاكرة المستودعات المشتركة بين المشاريع، فقد يحتاج حلّ الاعتماديات أو البناء التالي إلى الشبكة ووقت أطول في أكثر من مستودع؛ لذا خصّصه لذاكرة متضخمة أو تالفة فعلًا، لا للتنظيف الروتيني.
- احفظ تغييرات الشيفرة في commit أو stash، ثم تأكد من وجود Package.swift وPackage.resolved حيث يتوقعهما المشروع.
- من جذر الحزمة شغّل swift package clean، ثم أعد محاولة البناء الأصلي.
- إذا بقيت مساحة العمل المحلية للحزمة غير متسقة، شغّل swift package reset ثم أعد حلّ الاعتماديات والبناء.
- لا تشغّل swift package purge-cache إلا إذا كانت ذاكرة المستودعات المشتركة متضخمة أو تالفة فعلًا.
- تحقق من مخطط الاعتماديات ومن نجاح البناء قبل تنظيف أي DerivedData خاص بـ Xcode.
تتبع الأوامر المتاحة سلسلة أدوات Swift المثبتة؛ شغّل swift package --help لتتأكد من الأوامر الفرعية التي يدعمها جهاز Mac هذا.
احتفظ بـ Package.resolved ما لم ترد تحديث الإصدارات
يسجل Package.resolved حالة حلّ الاعتماديات، وليس ذاكرة تنزيل؛ وفي التطبيقات يساعد إدراجه في نظام إدارة الإصدارات زملاءك وCI على استخدام الإصدارات نفسها. وحذفه قد يسمح لعملية الحل التالية باختيار إصدارات أخرى يجيزها Package.swift، فيتحول التنظيف بصمت إلى ترقية للاعتماديات. أما Package.swift وSources وTests والإضافات (plugins) والاعتماديات المحلية فهي ملفات مصدرية: ما يُولَّد في .build يعود، وما كتبته قد لا يعود.
تعامل مع حزم Xcode بشكل منفصل
إذا ظهرت المشكلة داخل Xcode فقط، فجرّب File > Packages > Reset Package Caches إن كان إصدارك يوفره، ثم File > Packages > Resolve Package Versions؛ وقد تختلف أسماء القوائم بين الإصدارات. وإذا ارتبطت المشكلة بنواتج الحزم المترجمة، فاحذف DerivedData الخاص بذلك المشروع وحده لا الجذر كله. وقبل أي تنظيف سجّل رسالة الخطأ الأصلية، فأخطاء المصادقة وتعذر الوصول إلى مضيف Git وعدم توافق إصدار الأدوات وتغيّر checksum لا تُصلحها إزالة التنزيلات. يساعدك AskClean على معرفة الفئة التي تستهلك المساحة حول SwiftPM، أما نطاق الذاكرة فتحدده أوامر Swift الرسمية.
مقارنة القرارات والمخاطر
امسح ذاكرة Swift Package Manager (SPM) المؤقتة بأمان: متى تستخدم swift package clean أو reset أو purge-cache، وكيف تحافظ على Package.resolved سليمًا.
| القرار | مكان التحقق | حد الأمان |
|---|---|---|
| لدى SwiftPM أكثر من ذاكرة مؤقتة | مجلد .build وDerivedData وذاكرة المستودعات المشتركة | في الحزمة التي تُبنى من سطر الأوامر، يضم مجلد .build عادةً النسخ المستخرجة (checkouts) والمستودعات ونواتج البناء وحالة مساحة العمل، بينما يحتفظ SwiftPM بذاكرة مستودعات مشتركة حتى لا تجلب المشاريع الاعتماديات نفسها من الشبكة في كل مرة. |
| اختر الأمر حسب النطاق | swift package clean / reset / purge-cache | يحذف swift package clean نواتج بناء الحزمة، وهو الخيار الأول لنواتج مترجمة قديمة أو لتنظيف يقتصر على مستودع واحد. |
| احتفظ بـ Package.resolved ما لم ترد تحديث الإصدارات | Package.swift / Package.resolved | يسجل Package.resolved حالة حلّ الاعتماديات، وليس ذاكرة تنزيل؛ وفي التطبيقات يساعد إدراجه في نظام إدارة الإصدارات زملاءك وCI على استخدام الإصدارات نفسها. |
| تعامل مع حزم Xcode بشكل منفصل | File > Packages / DerivedData | إذا ظهرت المشكلة داخل Xcode فقط، فجرّب File > Packages > Reset Package Caches إن كان إصدارك يوفره، ثم File > Packages > Resolve Package Versions؛ وقد تختلف أسماء القوائم بين الإصدارات. |
الأسئلة الشائعة
ماذا يحذف swift package clean؟
يحذف نواتج بناء الحزمة الحالية، ولا يحذف Package.swift ولا يغيّر متطلبات الاعتماديات. ويعيد البناء التالي إنشاء هذه النواتج.
ما الفرق بين reset وpurge-cache؟
يستهدف reset ذاكرة الحزمة الحالية ومجلد بنائها بالكامل، أما purge-cache فيستهدف ذاكرة المستودعات العامة المشتركة في SwiftPM، وأثره أوسع على جلب الاعتماديات لاحقًا في كل المشاريع.
هل أحذف Package.resolved؟
ليس في التنظيف المعتاد؛ فهو يسجل إصدارات الاعتماديات المحلولة، وحذفه قد يغيّر الإصدارات المختارة في المرة القادمة. احذفه فقط إذا كان حلّ الاعتماديات من جديد هدفًا مقصودًا.
المصادر