AskClean

איך לנקות בבטחה את המטמון של Swift Package Manager

צוות AskClean · עודכן 2026-11-02

השתמשו ב-swift package clean לתוצרי הבנייה של פרויקט אחד, ב-swift package reset למטמון ולתיקיית הבנייה המלאים של אותה חבילה, וב-swift package purge-cache רק למטמון המאגרים המשותף של SwiftPM. שמרו את Package.swift ואת Package.resolved: הם מגדירים את התלויות, ואין למחוק אותם כמטמון.

תרשים תלויות איזומטרי שבו חבילות Swift פעילות מופרדות משכבות מטמון כפולות
בחרו בניקוי המצומצם ביותר של SwiftPM: קודם תוצרי הבנייה של הפרויקט, והורדות משותפות רק כשהן מקור הבעיה.

ל-SwiftPM יש יותר ממטמון אחד

SwiftPM שומר נתונים שאפשר ליצור מחדש בכמה רמות. לחבילת שורת פקודה יש בדרך כלל תיקיית .build עם עותקי checkout, מאגרים, תוצרי בנייה ומצב ה-workspace, ובנוסף SwiftPM מחזיק מטמון מאגרים משותף כדי שפרויקטים שונים לא יורידו שוב ושוב את אותן תלויות. ב-Xcode, עותקי checkout ותוצרים של חבילות נשמרים לרוב ב-DerivedData של הפרויקט — כך שבעיה שמופיעה רק ב-Xcode עשויה לדרוש ניקוי אחר. נקו את השכבה המצומצמת ביותר שמסבירה את התסמין: קל יותר להתאושש מניקוי של פרויקט אחד, לרוב הוא לא דורש רשת, והוא לא מאט מאגרים אחרים.

בחרו פקודה לפי הטווח

הפקודה swift package clean מוחקת את תוצרי הבנייה של החבילה, והיא הבחירה הראשונה כשיש פלט מהודר לא עדכני, התנהגות לא מוסברת של ה-linker או צורך לפנות מקום במאגר אחד. הפקודה swift package reset מאפסת את כל המטמון ואת תיקיית הבנייה של החבילה, ולכן מחייבת להכין מחדש את התלויות ואת מצב ה-workspace שלה; השתמשו בה כש-clean לא תיקנה workspace מקומי פגום. הפקודה swift package purge-cache מוחקת את מטמון המאגרים הגלובלי של SwiftPM, שמשותף לכל הפרויקטים, ולכן פתרון התלויות או הבנייה הבאים עשויים לדרוש רשת ולהימשך זמן רב יותר בכמה מאגרים. היא נועדה למטמון גלובלי שתפח מאוד או נפגם, לא לתחזוקה שגרתית.

  1. בצעו commit או stash לשינויים בקוד, ואז ודאו ש-Package.swift ו-Package.resolved נמצאים במקום שבו הפרויקט מצפה להם.
  2. משורש החבילה הריצו swift package clean ונסו שוב את הבנייה המקורית.
  3. אם ה-workspace המקומי של החבילה עדיין לא עקבי, הריצו swift package reset, ואז פתרו את התלויות ובנו שוב.
  4. הריצו swift package purge-cache רק אם מטמון המאגרים המשותף גדול מדי או פגום.
  5. ודאו שגרף התלויות והבנייה תקינים לפני שאתם מנקים DerivedData ספציפי ל-Xcode.

הפקודות הזמינות תלויות ב-toolchain של 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 כדי לשחזר את הגרף שמוגדר בפרויקט ובקובץ ה-resolution; שמות התפריטים משתנים בין גרסאות Xcode. אם הבעיה קשורה לתוצרי החבילות שהודרו, מחקו רק את DerivedData של אותו פרויקט — לא את כל תיקיית DerivedData. כשהמטרה היא מקום, מדדו קודם את תיקיות .build ואת המטמון המשותף. AskClean עוזר לגלות איזו קטגוריה סביב SwiftPM תופסת מקום, אבל את טווח הניקוי של SwiftPM עצמו קובעות פקודות Swift הרשמיות.

השוואת החלטות וסיכונים

ניקוי בטוח של מטמון Swift Package Manager (SPM): מתי להשתמש ב-swift package clean, ב-reset או ב-purge-cache, ואיך לשמור על Package.resolved.

החלטההיכן לבדוקגבול הבטיחות
ל-SwiftPM יש יותר ממטמון אחד.build / DerivedData / מטמון המאגריםSwiftPM שומר נתונים שאפשר ליצור מחדש בכמה רמות.
בחרו פקודה לפי הטווחswift package clean / reset / purge-cacheהפקודה swift package clean מוחקת את תוצרי הבנייה של החבילה, והיא הבחירה הראשונה כשיש פלט מהודר לא עדכני, התנהגות לא מוסברת של ה-linker או צורך לפנות מקום במאגר אחד.
שמרו את Package.resolved, אלא אם אתם רוצים לעדכן גרסאותPackage.swift / Package.resolvedPackage.resolved הוא מצב פתרון התלויות, לא מטמון הורדות.
טפלו ב-Xcode בנפרדFile > Packages / DerivedDataבתלות חבילה של פרויקט Xcode, התחילו ב-File > Packages > Reset Package Caches (אם הגרסה שלכם מציעה את הפקודה), ואז ב-File > Packages > Resolve Package Versions כדי לשחזר את הגרף שמוגדר בפרויקט ובקובץ ה-resolution; שמות התפריטים משתנים בין גרסאות Xcode.

שאלות נפוצות

מה מוחקת הפקודה swift package clean?

את תוצרי הבנייה של החבילה הנוכחית. היא לא מוחקת את Package.swift ולא מעדכנת בכוונה את דרישות התלויות; הבנייה הבאה יוצרת את הפלט מחדש.

מה ההבדל בין reset ל-purge-cache?

הפקודה reset מכוונת למטמון ולתיקיית הבנייה המלאים של החבילה הנוכחית, ואילו purge-cache מכוונת למטמון המאגרים הגלובלי של SwiftPM, שמשותף לכל הפרויקטים. ל-purge-cache יש השפעה רחבה יותר על הורדת תלויות בעתיד, בכל הפרויקטים.

האם למחוק את Package.resolved?

לא בניקוי רגיל. הקובץ מתעד את גרסאות התלויות שנבחרו, ומחיקתו עלולה לשנות את הגרסאות שייבחרו בפעם הבאה. מחקו אותו רק כשפתרון חדש של גרסאות הוא המטרה המכוונת.

מקורות

מדריכים נוספים על אחסון פיתוח