<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: pyrx.tech</title>
    <description>The latest articles on DEV Community by pyrx.tech (@pyrx_tech).</description>
    <link>https://dev.to/pyrx_tech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3940023%2F6528ad54-c509-45d4-8253-ede855c4999c.png</url>
      <title>DEV Community: pyrx.tech</title>
      <link>https://dev.to/pyrx_tech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pyrx_tech"/>
    <language>en</language>
    <item>
      <title>The Complete Xcode Cleanup Guide for iOS/macOS Developers — Reclaim 50-150 GB (2026)</title>
      <dc:creator>pyrx.tech</dc:creator>
      <pubDate>Tue, 19 May 2026 12:46:40 +0000</pubDate>
      <link>https://dev.to/pyrx_tech/the-complete-xcode-cleanup-guide-for-iosmacos-developers-reclaim-50-150-gb-2026-2h5j</link>
      <guid>https://dev.to/pyrx_tech/the-complete-xcode-cleanup-guide-for-iosmacos-developers-reclaim-50-150-gb-2026-2h5j</guid>
      <description>&lt;p&gt;If you've been doing iOS/macOS development for more than a year, Xcode has been quietly claiming 50-150 GB of your disk without telling you. Here's where all that space went and exactly how to get it back.&lt;/p&gt;

&lt;p&gt;I'll cover every major Xcode storage sink — DerivedData, simulators, device support, archives, SPM cache, and module cache — with the exact commands to audit and clean each one. Everything here is safe and reversible.&lt;/p&gt;

&lt;h2&gt;
  
  
  The quick audit: see your damage in 10 seconds
&lt;/h2&gt;

&lt;p&gt;Run this first to understand the scale:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"=== Xcode Storage Audit ==="&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/Xcode/DerivedData 2&amp;gt;/dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/CoreSimulator 2&amp;gt;/dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; /Library/Developer/CoreSimulator/Images 2&amp;gt;/dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/Xcode/Archives 2&amp;gt;/dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/Xcode/iOS&lt;span class="se"&gt;\ &lt;/span&gt;DeviceSupport 2&amp;gt;/dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/Xcode/watchOS&lt;span class="se"&gt;\ &lt;/span&gt;DeviceSupport 2&amp;gt;/dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/Xcode/tvOS&lt;span class="se"&gt;\ &lt;/span&gt;DeviceSupport 2&amp;gt;/dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Caches/org.swift.swiftpm 2&amp;gt;/dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/Xcode/DerivedData/ModuleCache.noindex 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On my machine after 18 months of active development, the total was over 90 GB. Here's what each one is and what to do about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. DerivedData (typically 20-60 GB)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Xcode's intermediate build output — compiled objects, indexes, build logs, module caches. Every project gets its own subfolder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Location:&lt;/strong&gt; &lt;code&gt;~/Library/Developer/Xcode/DerivedData/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it safe to delete?&lt;/strong&gt; Yes. Xcode regenerates everything on the next build. The only cost is a full rebuild instead of an incremental one. Your source code, provisioning profiles, and App Store submissions are not affected.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to clean it
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Option A — Delete everything:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/Library/Developer/Xcode/DerivedData/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Option B — Delete selectively (keep active projects):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# See each project folder with size and last modified date&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lahSt&lt;/span&gt; ~/Library/Developer/Xcode/DerivedData/

&lt;span class="c"&gt;# Delete only folders older than 30 days&lt;/span&gt;
find ~/Library/Developer/Xcode/DerivedData &lt;span class="nt"&gt;-maxdepth&lt;/span&gt; 1 &lt;span class="nt"&gt;-mtime&lt;/span&gt; +30 &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; +
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Option C — From Xcode UI:&lt;/strong&gt;&lt;br&gt;
Xcode → Settings → Locations → click the arrow next to "Derived Data" to open in Finder. Delete what you don't need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; &lt;code&gt;Cmd+Shift+K&lt;/code&gt; in Xcode only cleans the current project's build folder. It doesn't touch other projects' DerivedData.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Simulator runtimes (5-8 GB each)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Full OS images for every iOS/watchOS/tvOS version you've ever downloaded. Each one is 5-8 GB.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where they live:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User runtimes: &lt;code&gt;~/Library/Developer/CoreSimulator/Profiles/Runtimes/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;System images (Xcode 15+): &lt;code&gt;/Library/Developer/CoreSimulator/Images/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  How to clean them
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List all installed runtimes with sizes&lt;/span&gt;
xcrun simctl runtime list

&lt;span class="c"&gt;# Preview what would be deleted (dry run — deletes nothing)&lt;/span&gt;
xcrun simctl runtime delete &lt;span class="nt"&gt;--notUsedSinceDays&lt;/span&gt; 180 &lt;span class="nt"&gt;--dry-run&lt;/span&gt;

&lt;span class="c"&gt;# Actually delete runtimes not used in 6 months&lt;/span&gt;
xcrun simctl runtime delete &lt;span class="nt"&gt;--notUsedSinceDays&lt;/span&gt; 180

&lt;span class="c"&gt;# Nuclear option: delete all unavailable/orphaned simulators&lt;/span&gt;
xcrun simctl delete unavailable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Or via Xcode:&lt;/strong&gt; Settings → Platforms → click the minus button on runtimes you don't need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule of thumb:&lt;/strong&gt; Keep only the 2-3 most recent iOS versions you actively test against. You can always re-download a runtime if you need it.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Device support files (1-5 GB per iOS version)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Debug symbols generated every time you plug in a physical device running a specific iOS version. These accumulate for every iOS version you've ever connected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Location:&lt;/strong&gt; &lt;code&gt;~/Library/Developer/Xcode/iOS DeviceSupport/&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  How to clean them
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# See all device support folders with sizes&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/Xcode/iOS&lt;span class="se"&gt;\ &lt;/span&gt;DeviceSupport/&lt;span class="k"&gt;*&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-hr&lt;/span&gt;

&lt;span class="c"&gt;# Delete support files for iOS versions you no longer target&lt;/span&gt;
&lt;span class="c"&gt;# Example: delete everything older than iOS 17&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; ~/Library/Developer/Xcode/iOS&lt;span class="se"&gt;\ &lt;/span&gt;DeviceSupport/ | &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="nb"&gt;read &lt;/span&gt;d&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;&lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$d&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-oE&lt;/span&gt; &lt;span class="s1"&gt;'^[0-9]+'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$version&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-lt&lt;/span&gt; 17 &lt;span class="o"&gt;]&lt;/span&gt; 2&amp;gt;/dev/null&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Removing: &lt;/span&gt;&lt;span class="nv"&gt;$d&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/Library/Developer/Xcode/iOS&lt;span class="se"&gt;\ &lt;/span&gt;DeviceSupport/&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$d&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="k"&gt;fi
done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Also check &lt;code&gt;watchOS DeviceSupport&lt;/code&gt; and &lt;code&gt;tvOS DeviceSupport&lt;/code&gt; if you've ever connected an Apple Watch or Apple TV.&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Xcode archives (2-10 GB per archive)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; &lt;code&gt;.xcarchive&lt;/code&gt; bundles from every App Store submission or export you've ever done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Location:&lt;/strong&gt; &lt;code&gt;~/Library/Developer/Xcode/Archives/&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  How to clean them
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;From Xcode:&lt;/strong&gt; Window → Organizer → Archives tab → right-click old archives → Delete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From Terminal:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# See archive sizes grouped by year&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/Xcode/Archives/&lt;span class="k"&gt;*&lt;/span&gt;

&lt;span class="c"&gt;# Delete archives older than 1 year&lt;/span&gt;
find ~/Library/Developer/Xcode/Archives &lt;span class="nt"&gt;-maxdepth&lt;/span&gt; 1 &lt;span class="nt"&gt;-mtime&lt;/span&gt; +365 &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; +
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Keep in mind:&lt;/strong&gt; You only need archives if you want to upload a build to App Store Connect, generate dSYMs, or re-export an IPA. If the app version is already live and you have dSYMs uploaded, the archive is safe to delete.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. SPM cache (3-8 GB)
&lt;/h2&gt;

&lt;p&gt;This one is sneaky — Swift Package Manager stores resolved packages in a cache directory that grows silently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Location:&lt;/strong&gt; &lt;code&gt;~/Library/Caches/org.swift.swiftpm/&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How to clean it
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check size&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Caches/org.swift.swiftpm/

&lt;span class="c"&gt;# Delete the global cache&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/Library/Caches/org.swift.swiftpm/

&lt;span class="c"&gt;# Per-project cleanup&lt;/span&gt;
swift package purge-cache
swift package reset
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The stale references gotcha:&lt;/strong&gt; Xcode sometimes caches resolved package versions in DerivedData even after you've updated dependencies. If you see version mismatch issues after updating a package:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Close Xcode completely&lt;/li&gt;
&lt;li&gt;Delete &lt;code&gt;~/Library/Caches/org.swift.swiftpm/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Delete the project's DerivedData folder&lt;/li&gt;
&lt;li&gt;Delete &lt;code&gt;Package.resolved&lt;/code&gt; from your project&lt;/li&gt;
&lt;li&gt;Reopen Xcode and let it re-resolve from scratch&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Unlike Cargo (&lt;code&gt;cargo cache --autoclean-expensive&lt;/code&gt;) or pip (&lt;code&gt;pip cache purge&lt;/code&gt;), SPM has no built-in cache size management. It's a genuine gap in the tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Module cache
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Precompiled module files shared across all Xcode builds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Location:&lt;/strong&gt; &lt;code&gt;~/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check size&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; ~/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/

&lt;span class="c"&gt;# Delete it (regenerated automatically)&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is typically 1-3 GB and gets regenerated on the next build. Safe to delete anytime.&lt;/p&gt;

&lt;h2&gt;
  
  
  The complete cleanup script
&lt;/h2&gt;

&lt;p&gt;Here's a single script that audits everything, shows you the totals, and lets you decide what to remove:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"=== Xcode Disk Space Audit ==="&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;

&lt;span class="nv"&gt;paths&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/Library/Developer/Xcode/DerivedData"&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/Library/Developer/CoreSimulator"&lt;/span&gt;
  &lt;span class="s2"&gt;"/Library/Developer/CoreSimulator/Images"&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/Library/Developer/Xcode/Archives"&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/Library/Developer/Xcode/iOS DeviceSupport"&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/Library/Developer/Xcode/watchOS DeviceSupport"&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/Library/Developer/Xcode/tvOS DeviceSupport"&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/Library/Caches/org.swift.swiftpm"&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/Library/Developer/Xcode/DerivedData/ModuleCache.noindex"&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="nv"&gt;total&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
&lt;span class="k"&gt;for &lt;/span&gt;p &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;paths&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$p&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nv"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sm&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$p&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; 2&amp;gt;/dev/null | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-f1&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
    &lt;span class="nv"&gt;total&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$((&lt;/span&gt;total &lt;span class="o"&gt;+&lt;/span&gt; size&lt;span class="k"&gt;))&lt;/span&gt;
    &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s2"&gt;"%6s MB  %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$size&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$p&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="k"&gt;fi
done

&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Total: &lt;/span&gt;&lt;span class="k"&gt;$((&lt;/span&gt;total &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="m"&gt;1024&lt;/span&gt;&lt;span class="k"&gt;))&lt;/span&gt;&lt;span class="s2"&gt; GB reclaimable"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"To clean DerivedData:    rm -rf ~/Library/Developer/Xcode/DerivedData/*"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"To clean simulators:     xcrun simctl runtime delete --notUsedSinceDays 180"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"To clean SPM cache:      rm -rf ~/Library/Caches/org.swift.swiftpm/"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"To clean module cache:   rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"To clean archives:       Open Xcode &amp;gt; Window &amp;gt; Organizer &amp;gt; delete old archives"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"To clean device support: Manually delete old iOS versions from ~/Library/Developer/Xcode/iOS DeviceSupport/"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Preventing future bloat
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;After every major Xcode update:&lt;/strong&gt; review simulators (Settings → Platforms) and delete old runtimes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monthly:&lt;/strong&gt; run the audit script above&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;After shipping a release:&lt;/strong&gt; delete the archive if you've already uploaded dSYMs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consider a cron job&lt;/strong&gt; for DerivedData older than 30 days:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# Add to crontab (crontab -e)&lt;/span&gt;
   0 3 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; 0 find ~/Library/Developer/Xcode/DerivedData &lt;span class="nt"&gt;-maxdepth&lt;/span&gt; 1 &lt;span class="nt"&gt;-mtime&lt;/span&gt; +30 &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; +
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Beyond Xcode
&lt;/h2&gt;

&lt;p&gt;If you also work with Docker, Node.js, Homebrew, Python, or other toolchains, those have their own cache bloat problems. On a multi-toolchain developer Mac, total reclaimable space can easily exceed 100 GB.&lt;/p&gt;

&lt;p&gt;Disclosure: I'm building &lt;a href="https://cleanslatex.app" rel="noopener noreferrer"&gt;CleanSlateX&lt;/a&gt;, a macOS app that automates this audit across 13 dev toolchains and shows you every file before it deletes anything — nothing is removed without your approval. But the terminal commands above cover everything you need for Xcode specifically.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What's your DerivedData damage? Run the audit script and share your number in the comments — I'm curious how bad it gets across different setups.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
