iOS DeviceSupport nedir, hangileri silinir?

Xcode'un daha önce görmediği bir iOS sürümüyle çalışan iPhone ya da iPad bağladığında, Xcode cihazdan birkaç GB sembolü iOS DeviceSupport içine kopyalar. Eski sürümleri hiç silmez; klasör her güncellemeyle büyür.

Güncelleme:

DeviceSupport klasörleri nedir

Gerçek cihazda uygulama debug etmek için Xcode'un o cihazdaki sistem kütüphanelerinin sembollerine, yani tam o iOS derlemesinin framework'lerine ihtiyacı var. Bunlar olmadan debugger backtrace'teki sistem çerçevelerini adlandıramaz, sistem koduna adım adım girmek yavaşlar ya da hiç çalışmaz. Bu yüzden bir cihazı geliştirme için ilk bağladığında Xcode bu sembolleri cihazdan Mac'ine kopyalar ve bir dahaki sefere saklar.

Hepsi ~/Library/Developer/Xcode altında, platform başına bir klasörde durur:

  • iOS DeviceSupport: iPhone ve iPad.
  • watchOS DeviceSupport: Apple Watch.
  • tvOS DeviceSupport: Apple TV.

Yalnızca gerçekten debug ettiğin platformların klasörü olur. İçeride her işletim sistemi derlemesi için bir alt klasör var. Güncel Xcode sürümlerinde ad cihaz model kimliğiyle başlar, ardından sürüm ve derleme numarası gelir; örneğin iPhone11,6 18.7.9 (22H355). Eski Xcode sürümlerinin açtığı klasörlerde model kimliği olmayabilir; yalnızca sürüm ve derleme yazar. Her alt klasörde kopyalanan sistem kütüphanelerini taşıyan bir Symbols klasörü bulunur.

Bu klasörlerin iOS Simülatörü ile ilgisi yok. Simülatörler, simülatör runtime'ı denen sistem imajlarıyla çalışır; Xcode bunları ayrı bir yerde tutar ve yönetir (xcrun simctl runtime list ile görebilirsin). DeviceSupport'u silmek hiçbir simülatöre dokunmaz, bir simülatörü silmek de DeviceSupport'u küçültmez.

Neden birikiyor

Bağladığın her işletim sistemi derlemesi için yeni bir alt klasör açılır, eskisini silen olmaz. Telefonunu yılda dört kez güncelle, bir sürüm geride kalan ikinci bir test cihazı kullan, bir kez de arkadaşının iPad'ini bağla; yarım düzine klasörün olur. Her biri birkaç GB; bir geliştiricinin Mac'inde tek bir iOS 18 klasörü 4,5 GB çıktı. Klasörler Xcode güncellemelerinden de sağ çıkar ve Migration Assistant ile yeni Mac'e geçerken seninle taşınır; birkaç yıldır kullandığın bir Mac'te birkaç ana iOS sürümü geriye gidebilirler. Artık hiçbir cihazında çalışmayan bir iOS sürümünün klasörü bir daha kullanılmadığı için bunların çoğu ölü ağırlık.

Neler var, bak

cd ~/Library/Developer/Xcode
# Hangi platform klasörleri var
ls -d *DeviceSupport
# Her derlemenin boyutu, en büyüğü en altta
du -sh "iOS DeviceSupport"/* | sort -h

Sonra cihazlarının şu an hangi sürümde olduğuna bak. Xcode'da Window › Devices and Simulators penceresini aç ve bağlı cihazı seç; sürüm yanında yazar. Cihazın kendisinde Ayarlar › Genel › Hakkında altında görürsün.

Hangileri kalmalı

  • Geliştirme yaptığın her cihazın şu anki sürümüne denk gelen klasörü tut. Bu genelde en yeni klasördür ama her zaman değil: eski iOS'ta bıraktığın bir test cihazının da kendi klasörüne ihtiyacı var.
  • Artık hiçbir cihazının çalıştırmadığı sürümlerin klasörlerini sil. Derlemede kullanılmazlar, debug için de bir daha kullanılmayacaklar.
  • O işletim sistemi derlemesinden gelen çökme günlüklerini bu Mac'te sembolize etmen gerekiyor ve o sürümde başka cihazın yoksa o klasörü tut. Emin değilsen yalnızca onu bırak, gerisini sil.

Kendi uygulamanın sembolleri bu klasörlerde değil; onlar derlemelerinin ve arşivlerinin dSYM dosyalarında. Yani DeviceSupport'u silmek, çökme raporunda kendi kodunu okuyabilmeni etkilemez.

Nasıl silinir

Önce Xcode'dan çık ve cihazlarını çıkar; böylece sen silerken Xcode o klasöre kopyalama yapmaz. Sonra seçtiğin klasörleri Finder'dan (open ~/Library/Developer/Xcode, Çöp Sepeti'ne sürükle, Çöp Sepeti'ni boşalt) ya da Terminal'den kaldır:

# Tek bir derleme (yukarıdaki listedeki klasör adını birebir yaz)
rm -rf ~/Library/Developer/Xcode/"iOS DeviceSupport"/"iPhone11,6 18.7.9 (22H355)"

# Diğer platformlar için de aynısı
rm -rf ~/Library/Developer/Xcode/"watchOS DeviceSupport"/"<klasör adı>"

Bir sonraki bağlantıda ne olur

Kalıcı olarak hiçbir şey kaybolmaz. Hâlâ ihtiyacın olan bir klasörü silersen, o sürümdeki bir cihazı bir sonraki bağlayıp geliştirme için seçtiğinde Xcode sembolleri yeniden kopyalar. Kopyalama sürerken Xcode cihaz için bir ilerleme mesajı gösterir ve iş bitene kadar debug hazır olmaz. Cihaza ve bağlantıya göre birkaç dakika bekle; kablo genelde kablosuz bağlantıdan hızlıdır.

Tek gerçek bedel bu bekleme, o da yalnızca hâlâ kullandığın sürümler için. Platform başına en yeni klasörü tutmaya değmesinin nedeni de bu: yarın en çok ihtiyaç duyacağın o.

DeviceSupport, Xcode'un geride bıraktığı büyük klasörlerden yalnızca biri. Derleme önbellekleri için Xcode DerivedData nasıl güvenle silinir, simülatör verileri için iOS simülatörlerinde yer açma rehberine bak.

CleanDev ile

CleanDev'in tam sürümü (doğrudan indirme, yakında çıkıyor) iOS, watchOS ve diğer platformların tüm DeviceSupport klasörlerini boyutlarıyla listeler. Tarama ücretsiz, temizlik abonelik ister. Mac App Store'daki CleanDev Lite Xcode klasörlerine dokunmaz.

  • Eski işletim sistemi derlemelerinin klasörleri temizlik için seçilebilir.
  • Her platformun en yeni klasörü seçilmez, incelemeye bırakılır; çünkü cihazının kullandığı büyük ihtimalle o.
  • Her temizlik yerel bir günlüğe yazılır; neyin silindiğini sonradan görebilirsin.

Sorular

iOS DeviceSupport klasörünü silebilir miyim?

Evet. İçinde yalnızca cihazlarından kopyalanan sistem sembolleri var. O iOS sürümündeki bir cihazı bağladığında Xcode onları yeniden kopyalar; hâlâ lazım olanı silmenin bedeli birkaç dakikalık bekleme.

iOS DeviceSupport neden bu kadar büyük?

Bağladığın her iOS derlemesi birkaç GB'lık kendi klasörünü alır ve Xcode eskileri hiç silmez. Birkaç iOS güncellemesinden sonra klasör, artık hiçbir cihazında çalışmayan sürümlerle dolar.

DeviceSupport'u silmek uygulamalarımı ya da Xcode'u bozar mı?

Hayır. Derleme, imzalama ve çalıştırma ona bağlı değil, Xcode da etkilenmez. Yalnızca cihazda debug için eşleşen klasör gerekir ve Xcode onu yeniden oluşturur.

iPhone'u her güncellediğimde Xcode neden yeniden sembol kopyalıyor?

Her iOS güncellemesi yeni bir işletim sistemi derlemesi demek ve Xcode'da onun sembolleri henüz yok; bu yüzden bir kez yeni bir klasöre kopyalar. O sürümdeki sonraki bağlantılar hızlıdır; silebileceğin klasör bir önceki sürümünki.

Diğer rehberler