Flutter projelerinde Mac disk alanı açma

Derlediğin her Flutter projesi kendi build/ ve .dart_tool/ klasörlerini tutar, her iOS derlemesi de üstüne CocoaPods ekler. Henüz yüklemediğin sürüm dosyaları dışında hepsi yeniden üretilebilir.

Güncelleme:

Flutter yeri nerede kullanır

Bakman gereken dört yer var; üçü her projenin içinde, biri ortak:

  • Proje kökündeki build/: derlediğin her platformun çıktısı; debug derlemeler, ara dosyalar ve sürüm dosyaları dahil. Genelde en büyüğü budur.
  • Proje kökündeki .dart_tool/: flutter pub get ile oluşan paket yapılandırması ve Dart araçlarının derleme önbellekleri.
  • ios/Pods/ (ve macos/Pods/): iOS ve macOS eklentilerinin pod install ile kurulan CocoaPods bağımlılıkları.
  • ~/.pub-cache: bugüne kadar indirdiğin her Dart ve Flutter paket sürümünün, tüm projelerin paylaştığı ortak önbelleği.

Temizlemeden önce ölç

Önce tek bir projeye bak, sonra kod klasöründeki tüm Flutter projelerinin build/ klasörlerini listele. find filtresi, eklenti kaynaklarının projeye bağlandığı ios/.symlinks gibi gizli klasörleri atlar.

cd ~/code/my_app
du -sh build .dart_tool ios/Pods 2>/dev/null

# ~/code altındaki her Flutter projesinin build/ boyutu
find ~/code -name pubspec.yaml -not -path '*/.*' -not -path '*/build/*' -exec dirname {} \; | while IFS= read -r d; do [ -d "$d/build" ] && du -sh "$d/build"; done | sort -h

# ortak pub önbelleği
du -sh ~/.pub-cache

Yüklemediğin sürüm dosyalarını sakla

Temizlemeden önce build/ içinde sürüm dosyası var mı bak. Temizlik onları da diğer her şeyle birlikte siler. Henüz yüklemediğin bir IPA, AAB ya da APK ancak aynı koddan yeniden derlenerek geri gelir; kod ilerlediyse bu her zaman mümkün olmaz.

find ~/code -path '*/build/*' \( -name '*.ipa' -o -name '*.aab' -o -name '*.apk' \) 2>/dev/null

Olağan yerleri build/ios/ipa/, build/app/outputs/bundle/release/ ve build/app/outputs/flutter-apk/. Hâlâ lazım olanı projenin dışına taşı ya da önce App Store Connect veya Google Play'e yükle.

Tek projede flutter clean

Proje kökünde çalıştır:

cd ~/code/my_app
flutter clean

flutter clean, build/ ve .dart_tool/ klasörlerini siler; her platformun Flutter/ephemeral klasörü ve .flutter-plugins-dependencies gibi üretilmiş dosyaları kaldırır; Xcode kurulu bir Mac'te ayrıca Xcode'dan iOS ve macOS çalışma alanlarını temizlemesini ister. ios/Pods, kaynak kodun ve pubspec.lock olduğu gibi kalır.

Sonrasında ne olur: bir sonraki flutter run ya da flutter build önce kendiliğinden flutter pub get çalıştırır, ardından her şeyi baştan derler; ilk derleme belirgin biçimde yavaştır. flutter pub get çalışana kadar editörün hata gösterebilir. Derleme çıktısı dışında hiçbir şey kaybolmaz.

Çok sayıda projeyi birden temizlemek

Bu döngü Flutter'a bağımlı ve derleme çıktısı olan her pubspec.yaml dosyasını bulur, klasöründe flutter clean çalıştırır. Önce yukarıdaki sürüm dosyası kontrolünü yap.

find ~/code -name pubspec.yaml -not -path '*/.*' -not -path '*/build/*' | while IFS= read -r f; do
  d=$(dirname "$f")
  if grep -q 'sdk: flutter' "$f" && { [ -d "$d/build" ] || [ -d "$d/.dart_tool" ]; }; then
    echo "temizleniyor: $d"
    (cd "$d" && flutter clean < /dev/null)
  fi
done

< /dev/null kısmı önemli: o olmadan flutter, döngünün okuduğu girdiyi kendisi okuyup bazı projeleri atlatabilir. Saf Dart paketlerinde sdk: flutter satırı olmadığı için onlara dokunulmaz. Xcode adımı yüzünden flutter clean proje başına birkaç saniye sürer; yalnızca build/ ve .dart_tool/ klasörlerini rm -rf ile silmek daha hızlıdır ve disk alanı açısından aynı sonucu verir.

~/.pub-cache içindeki pub önbelleği

Bir projenin çözdüğü her paket sürümü ~/.pub-cache içinde bir kez tutulur ve paylaşılır. Zamanla hiçbir projenin artık kullanmadığı sürümlerle dolar. Yeni Flutter sürümleri yalnızca bunları ayıklayabilir; önce --dry-run ile neyin gideceğine bak:

# neyin silineceğini göster, sonra bilinen hiçbir projenin kullanmadığı paketleri sil
flutter pub cache gc --dry-run
flutter pub cache gc

# önbelleğin tamamını boşalt (onay ister)
flutter pub cache clean

# önbellekte olan her şeyi yeniden indir
flutter pub cache repair

flutter pub cache clean sonrasında her proje bir sonraki flutter pub get ile paketlerini yeniden indirir; yani çevrimdışı derleyebilmek için önce internete bağlanman gerekir. path: ile bağladığın paketler önbellekte değildir, etkilenmez.

iOS Pods ve bu rehberin dışında kalanlar

ios/Pods/ silinebilir. ios/Podfile ve ios/Podfile.lock dosyalarını tut: pod install komutunun aynı sürümleri getirmesini sağlayan lock dosyasıdır. Sonraki iOS derlemesi gerektiğinde pod install komutunu senin yerine çalıştırır; biraz sürer ve internet gerekebilir. CocoaPods ayrıca kendi indirme önbelleğini ~/Library/Caches/CocoaPods içinde tutar.

Android derlemeleri Gradle kullanır; Gradle ~/.gradle içinde büyük bir önbellek, her projede de android/.gradle klasörü tutar. Bu ayrı bir konu, burada ele alınmıyor. iOS uygulamasını derlediğinde Xcode da ~/Library/Developer/Xcode/DerivedData içine yazar; bunun için Xcode DerivedData temizleme rehberine bak. Flutter web derliyor ya da JavaScript araçları kullanıyorsan o tarafı node_modules rehberi anlatıyor.

CleanDev ile

CleanDev seçtiğin klasörlerde Flutter projelerini arar ve build/ ile .dart_tool/ klasörlerini boyutlarıyla listeler. Bir projeyi ancak pubspec.yaml Flutter'ı tanımlıyorsa ve build/ içinde Flutter çıktısı varsa Flutter projesi sayar. Bu rehberdeki kuralların aynısını uygular:

  • Yüklenmemiş görünen IPA, AAB ve APK dosyaları seçilmez, incelemene bırakılır.
  • O an çalışan bir uygulamanın derleme klasörleri korunur.
  • build/ içinde tanımadığı dosyalar incelemen için gösterilir.

CleanDev Lite Mac App Store'da ücretsiz ve proje klasörlerini kapsar; tam sürüm pub önbelleğini de temizler.

Sorular

Flutter build klasörünü silmek güvenli mi?

Evet. build/ üretilmiş çıktıdır, sonraki derleme onu yeniden oluşturur. Saklaman gereken tek şey henüz yüklemediğin sürüm IPA, AAB ya da APK dosyaları.

flutter clean kodumu ya da paketlerimi siler mi?

Hayır. build/, .dart_tool/ ve üretilmiş platform dosyalarını kaldırır. Kaynak kodun, pubspec.yaml, pubspec.lock ve ios/Pods yerinde kalır; paketler bir sonraki flutter pub get ile pub önbelleğinden geri gelir.

.dart_tool klasörü .gitignore'a eklenmeli mi?

Evet. .dart_tool/ her makinede flutter pub get ve derleme araçları tarafından üretilir. Yeni Flutter projelerinde .gitignore içinde zaten yer alır.

flutter clean sonrası ilk derleme neden bu kadar yavaş?

Her şey baştan derlenir: Dart kodu, yerel eklentiler ve iOS için Xcode projesi. Sonraki derlemeler yine artımlı olur ve olağan hızına döner.

Mac'te Flutter pub önbelleği nerede?

Varsayılan olarak ~/.pub-cache içinde; PUB_CACHE ortam değişkeni başka bir yeri göstermiyorsa. flutter pub cache gc onu ayıklar, flutter pub cache clean tamamen boşaltır.

Diğer rehberler