Geliştirici Mac'inde Sistem Verileri neden bu kadar büyük?

Geliştirici Mac'inde Depolama ayarlarındaki gri “Sistem Verileri” çubuğunun çoğu macOS'un kendisi değil, araçlarının yazdığı dosyalar. İçinde ne olduğunu nasıl bulacağını, her parçanın ne işe yaradığını ve neyin güvenle silinebileceğini burada anlatıyorum.

Güncelleme:

Sistem Verileri aslında ne

Sistem Ayarları > Genel > Depolama ekranını açtığında macOS diski Uygulamalar, Belgeler, Fotoğraflar gibi satırlara ayırır. Bu satırların hiçbirine oturmayan her şey Sistem Verileri altına düşer. Bunun içinde gerçek sistem dosyaları da var (swap, uyku imajı, güncelleme anlık görüntüleri, kayıtlar), ama ~/Library ve /Library altında belli bir kategoriye girmeyen bütün önbellek ve destek klasörleri de burada sayılır.

Geliştirici araçları neredeyse her şeyi buraya yazar. Xcode derleme çıktıları, simülatör cihazları, simülatör runtime'ları, npm ve CocoaPods önbellekleri, Docker'ın disk imajı ve Android emülatörleri ya Library klasörlerinde ya da ana klasöründeki gizli klasörlerde durur. Depolama penceresi bunları senin için açmadığından çubuk açıklamasız büyümeye devam eder.

Büyük klasörleri kendin bul

Alanın nereye gittiğini görmek için ayrı bir araca gerek yok. du klasörleri ölçer, çıktıyı sıralayınca en büyükler en alta gelir. Önce ana klasöründen başla, sonra büyük çıkan klasörün bir alt seviyesine in.

# ana klasörün hemen altındaki en büyük klasörler
du -h -d 1 ~ 2>/dev/null | sort -h | tail -15

# Sistem Verileri'nin çoğunun durduğu Library
du -h -d 1 ~/Library 2>/dev/null | sort -h | tail -15

# doğrudan geliştirici klasörleri
du -sh ~/Library/Developer/* 2>/dev/null
du -sh ~/Library/Developer/Xcode/* 2>/dev/null
du -sh ~/Library/Caches/* 2>/dev/null | sort -h | tail -15

Bazı klasörler korumalıdır; Terminal'e Tam Disk Erişimi vermediysen (Sistem Ayarları > Gizlilik ve Güvenlik) "Operation not permitted" yazar. 2>/dev/null bu mesajları gizler; okuyabildiğin klasörlerin toplamı yine doğrudur.

Xcode ve iOS simülatörleri

Apple platformlarına geliştirme yapan çoğu kişide en büyük grup budur. Hepsi ~/Library/Developer ve /Library/Developer altındadır.

  • ~/Library/Developer/Xcode/DerivedData: açtığın her projenin derleme çıktıları ve indeksleri. Xcode derleme yapmıyorken silmek güvenli; sonraki derleme baştan yapılır. Ayrıntısı DerivedData temizleme rehberinde.
  • ~/Library/Developer/Xcode/Archives: App Store ya da TestFlight için arşivlediğin her sürüm, dSYM'leriyle birlikte. Silinince geri gelmez; kullanıcıların hâlâ kullandığı sürümlerin arşivini sakla, yoksa onların çökme raporlarını çözecek sembolleri kaybedersin.
  • ~/Library/Developer/Xcode/iOS DeviceSupport: bağladığın her iPhone sürümünden kopyalanan hata ayıklama sembolleri. Eski sürümler gidebilir; o cihazı tekrar bağladığında Xcode yeniden kopyalar. Bkz. DeviceSupport rehberi.
  • ~/Library/Developer/CoreSimulator/Devices: her simülatör için, yüklü uygulamaları ve verisiyle ayrı bir klasör.
  • /Library/Developer/CoreSimulator: simülatör runtime'ları (iOS sistem imajları) ve önbellekleri. Bir geliştiricinin Mac'inde iki iOS runtime'ı 15,3 GB tutuyordu. Runtime ve simülatörler iOS simülatörlerinden yer açma rehberinde.

Paket önbellekleri

Paket yöneticileri indirdikleri her şeyin bir kopyasını tutar ki sonraki kurulum hızlı olsun. Bu önbelleklerin hiçbirinde senin kodun yok; her araç ihtiyaç duyduğunu yeniden indirir. Silmenin bedeli sadece bir sonraki kurulumda harcanan zaman ve internet.

du -sh ~/.npm ~/.pub-cache ~/.gradle/caches 2>/dev/null
du -sh ~/Library/Caches/CocoaPods ~/Library/Caches/Homebrew ~/Library/Caches/pip 2>/dev/null

# her aracın kendi temizlik komutu var, örneğin
npm cache clean --force
pod cache clean --all
brew cleanup
pip cache purge

~/.pub-cache biraz farklı: Flutter ve Dart projeleri paketleri doğrudan buradan kullanır, silersen her projede flutter pub get yeniden çalışır. dart pub cache clean komutunu bunu göze alıyorsan kullan. node_modules, .dart_tool ve build/ gibi proje içi klasörler Sistem Verileri'nde sayılmaz ama aynı diski doldurur; bkz. node_modules silme ve Flutter'da disk alanı açma.

Docker ve Android

Docker Desktop bütün imajları, container'ları ve volume'ları tek bir disk imajında tutar: ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw. Bu dosyayı silmek her container'ı ve volume'u, hâlâ ihtiyaç duyduğun veritabanları dahil, siler. Temizliği Docker'ın içinden yap:

# Docker'ın kendi kullandığı alan
docker system df

# durmuş container'lar, kullanılmayan ağlar, sahipsiz imajlar ve build önbelleği
docker system prune

--volumes seçeneğini ancak hiçbir volume'da önemli veri yoksa ekle. docker system prune neyi sileceğini listeleyip onay ister.

Android Studio emülatör sistem imajlarını ~/Library/Android/sdk/system-images içinde, her emülatörün verisini ~/.android/avd içinde, Gradle'ın indirme ve derleme önbelleğini de ~/.gradle/caches içinde tutar. Emülatörleri Android Studio'nun Device Manager'ından, sistem imajlarını SDK Manager'dan kaldır; elle silersen SDK tutarsız kalabilir. Gradle önbelleği derleme yokken silinebilir; sonraki derleme bağımlılıkları yeniden indirir.

Yerel Time Machine anlık görüntüleri

Time Machine açıksa macOS, yedekleme diski takılı değilken de dosya geri getirebilmen için diskin yerel anlık görüntülerini kısa süre tutar. Bu görüntüler sildiğin dosyaların alanını da bir süre elinde tutar; büyük bir klasörü silince ilk anda beklediğinden az yer açılmasının sebebi çoğu zaman budur.

# başlangıç diskindeki yerel anlık görüntüleri listele
tmutil listlocalsnapshots /

com.apple.TimeMachine.<tarih>.local adlı görüntüler Time Machine'e aittir; macOS bunları eskidikçe ya da disk daraldığında kendisi siler. com.apple.os.update-… adlı olanlar macOS güncellemelerine aittir, onlara dokunma. Alana hemen ihtiyacın varsa listedeki tarihle sudo tmutil deletelocalsnapshots <tarih> komutu tek bir Time Machine görüntüsünü siler. O ana geri dönme imkânını kaybedersin.

Geliştirici araçlarından gelmeyenler

Sistem Verileri'nin hepsi senin temizleyeceğin şey değil. /System/Volumes/VM içindeki swap dosyaları ve uyku imajı, Spotlight indeksi, sistem kayıtları ve güncelleme görüntüleri macOS tarafından yönetilir ve kullanıma göre büyüyüp küçülür. Mail, Mesajlar ekleri ve ~/Library/Application Support/MobileSync/Backup altındaki iPhone yedekleri de Library'de durur ve büyük olabilir. Tanımadığın bir şeyi silmeden önce hangi uygulamaya ait olduğunu öğren. Hâlâ kullandığın bir uygulamanın klasörünü silmek oturumunu kapatabilir, ayarlarını götürebilir ya da uygulamayı bozabilir.

CleanDev ile

CleanDev bu işin geliştirici kısmını senin yerine yapar ve her kalem için silinirse ne olacağını söyler. CleanDev Lite Mac App Store'da ücretsiz; seçtiğin Flutter, Node ve Unity proje klasörlerini temizler. Tam sürüm CleanDev (doğrudan indirme, yakında çıkıyor) bunlara ek olarak:

  • Xcode DerivedData, eski arşivler (Çöp Sepeti'ne taşınır) ve eski DeviceSupport; en yenisini ve kullanımda olanı incelemeye bırakır
  • Simülatör içeriğini simctl erase ile sıfırlar; simülatörler yerinde kalır, açık olana hiç dokunulmaz
  • npm, npx, CocoaPods, pip, Homebrew, uv ve pub önbellekleri

Simülatör runtime'ları, Docker, Android emülatörleri, Gradle ve Time Machine görüntüleri henüz kapsamında değil. Onlar için yukarıdaki komutları kullan.

Sorular

Mac'te Sistem Verileri silinir mi?

Toptan silinmez, macOS da bunun için bir düğme sunmaz. Güvenle temizleyebileceğin şey, içinde tek tek tanımladığın klasörlerdir: Xcode DerivedData ya da paket önbellekleri gibi, araçların yeniden ürettiği veya indirdiği şeyler.

Dosya sildim ama Sistem Verileri küçülmedi, neden?

Depolama ayarları geç güncellenir, ayrıca yerel Time Machine görüntüleri silinen veriyi bir süre tutabilir. Boş alanı df -h / ile, görüntüleri tmutil listlocalsnapshots / ile kontrol et.

Xcode Sistem Verileri'ne mi sayılıyor?

Xcode uygulamasının kendisi Uygulamalar altında sayılır. Onun Library klasörlerinde ürettikleri, yani DerivedData, arşivler, DeviceSupport, simülatörler ve runtime'lar genellikle Sistem Verileri'ne düşer.

Önbellekleri silmek projelerimi bozar mı?

Paket ve derleme önbellekleri sadece sonraki kurulumu ya da derlemeyi hızlandırır, kaynak kodun içlerinde değildir. Bedeli daha yavaş bir sonraki derleme ve yeniden indirmedir. Arşivler ve Docker volume'ları önbellek değildir; silinince veri kalıcı olarak gider.

Sistem Verileri'nin içinde ne olduğunu nasıl görürüm?

Terminal'de du -h -d 1 ~/Library 2>/dev/null | sort -h | tail -15 çalıştır ve en büyük klasörlerden aşağı in. Terminal'e Tam Disk Erişimi verirsen korumalı klasörleri de ölçebilir.

Diğer rehberler