xyk blog

最近は iOS 開発の記事が多めです。

Xcode 関連ファイルを定期的に削除する

検証環境:
Xcode 12.2
Swift 5.3.1

Xcode のキャッシュファイルなどの関連ファイルはかなりのディスクスペースを消費するので定期的に削除するほうがよい。

DerivedData

中間生成ファイル。アプリ単位でビルド時に作成される。
ビルドが突然できなくなった場合などこれを消すと解消する場合がある。

rm -rf ~/Library/Developer/Xcode/DerivedData/*

iOS DeviceSupport

XcodeiOS 実機端末との接続を認識したタイミングで作成される。
iOS バージョンをアップデートする度に新しいディレクリが増えていく。
全削除して問題なし。

$ l ~/Library/Developer/Xcode/iOS\ DeviceSupport/

13.5.1 (17F80)
13.6 (17G68)
13.6 (17G68) arm64e
13.6.1 (17G80) arm64e
14.0 (18A373)
14.0.1 (18A393)
14.0.1 (18A393) arm64e
14.1 (18A8395)
14.1 (18A8395) arm64e
14.2 (18B92)
$ du -sh ~/Library/Developer/Xcode/iOS\ DeviceSupport/*

3.9G    /Users/xyk/Library/Developer/Xcode/iOS DeviceSupport/14.2 (18B92) arm64e
...

1ディレクトリで数GB単位のサイズがあり、かなり大きいので Mac のバックアップする際などは事前に削除したほうがよい。

watchOS DeviceSupport

watchOS 用。
XcodeApple Watch とペアリングした iPhone との接続を認識したタイミングで作成される。
watchOS バージョンをアップデートする度に新しいディレクリが増えていく。

$ l ~/Library/Developer/Xcode/watchOS\ DeviceSupport/

Watch4,1 6.2.8 (17U63)
Watch4,1 7.0.1 (18R395)
Watch4,1 7.0.2 (18R402)
Watch4,1 7.1 (18R590)
$ du -sh ~/Library/Developer/Xcode/watchOS\ DeviceSupport/*

398M    /Users/xyk/Library/Developer/Xcode/watchOS DeviceSupport/Watch4,1 7.1 (18R590)
...

Archives

ipa 作成時に作成される。

$ l ~/Library/Developer/Xcode/Archives/

2020-10-01
2020-09-29

Xcode のキャッシュ

$ l ~/Library/Caches/com.apple.dt.Xcode/
Cache.db
Cache.db-shm
Cache.db-wal
CachedDesktopImageScaled.tif
WebKit
fsCachedData

あんまり大したサイズはなかった。

$ du -sh ~/Library/Caches/com.apple.dt.Xcode/
345M    /Users/xyk/Library/Caches/com.apple.dt.Xcode

CoreSimulator

以下ディレクトリに iPhone シミュレータのデバイスイメージとキャッシュがある。

~/Library/Developer/CoreSimulator/

シミュレータのデバイスイメージは 19GB、そして キャッシュは 9.5GB もあった。

$ du -sh ~/Library/Developer/CoreSimulator/*
9.5G    /Users/xyk/Library/Developer/CoreSimulator/Caches
 19G    /Users/xyk/Library/Developer/CoreSimulator/Devices
  0B    /Users/xyk/Library/Developer/CoreSimulator/Temp

まずシミュレータのキャッシュは全削除でOK。

$ rm -rf ~/Library/Developer/CoreSimulator/Caches/dyld/

もう一方はシミュレータのデバイスイメージの一覧。
ディレクトリ名は一意に表す UUID が割り振られている。

$  l ~/Library/Developer/CoreSimulator/Devices/

10D8C6FC-0616-4ADB-B8B9-28FC1FAFF147
1DFDFD00-B32E-4968-9D34-356825215C1C
...

UUID だと何のデバイスかわからないので以下コマンドで確認する。

$ xcrun simctl list

== Device Types ==
iPhone 4s (com.apple.CoreSimulator.SimDeviceType.iPhone-4s)
iPhone 5 (com.apple.CoreSimulator.SimDeviceType.iPhone-5)
...
== Runtimes ==
iOS 14.2 (14.2 - 18B79) - com.apple.CoreSimulator.SimRuntime.iOS-14-2
tvOS 14.2 (14.2 - 18K54) - com.apple.CoreSimulator.SimRuntime.tvOS-14-2
watchOS 7.1 (7.1 - 18R579) - com.apple.CoreSimulator.SimRuntime.watchOS-7-1
== Devices ==
-- iOS 14.2 --
    iPhone 8 (2F64CE34-5CB4-4D8D-89A6-264273ADCC8C) (Shutdown)
    iPhone 8 Plus (893579BF-2A02-4867-9618-9C4AD9362AD3) (Shutdown)
    iPhone 11 (10D8C6FC-0616-4ADB-B8B9-28FC1FAFF147) (Shutdown)
    iPhone 11 Pro (F9DBE081-2A95-4D26-AC2F-B3CF3A04B013) (Shutdown)
    iPhone 11 Pro Max (28877C6F-B924-4809-8A6F-27B83F6C626D) (Shutdown)
    iPhone SE (2nd generation) (6607972D-4214-465A-AC03-EC8CB0127F5C) (Shutdown)
    iPhone 12 mini (636AFC6D-0447-45D8-AE92-BA4ECAEED0CE) (Shutdown)
    iPhone 12 (42D55001-838C-47F0-8299-B727825342E0) (Shutdown)
    iPhone 12 Pro (B90B1372-2F0B-4B1B-84D0-F60CD8A57B23) (Shutdown)
    iPhone 12 Pro Max (5F5833BD-5322-40E5-9656-F22EDFA725CB) (Shutdown)
    iPod touch (7th generation) (EB469B62-58B2-43C4-9768-BAB84646D437) (Shutdown)
    iPad Pro (9.7-inch) (7E6911CC-975E-44E5-92C7-E7F811982F95) (Shutdown)
    iPad Pro (11-inch) (2nd generation) (AF3AF7C1-5BBE-4DDB-B2AC-BC1DF68EE2B1) (Shutdown)
    iPad Pro (12.9-inch) (4th generation) (E3994BDC-7347-4F09-B0A0-B9ECD4A0A23A) (Shutdown)
    iPad (8th generation) (8BB4C077-FF15-41F1-8C15-D71AB8218123) (Shutdown)
    iPad Air (4th generation) (1DFDFD00-B32E-4968-9D34-356825215C1C) (Shutdown)
-- tvOS 14.2 --
    Apple TV (1F6EB2FF-E90F-4CB7-AE83-1F76A12726C5) (Shutdown)
    Apple TV 4K (AA26C080-1DBD-4EC3-A256-EBF612CBCFF4) (Shutdown)
    Apple TV 4K (at 1080p) (C73C7065-8071-45E9-BF5D-925715F2A900) (Shutdown)
-- watchOS 7.1 --
    Apple Watch Series 5 - 40mm (8DE67E08-C034-4DBD-8B19-67B29072796E) (Shutdown)
    Apple Watch Series 5 - 44mm (FB015CC5-2505-43A0-8F5B-C541A58780B7) (Shutdown)
    Apple Watch Series 6 - 40mm (2CBBADB8-423E-4607-89A2-48ED718AB815) (Shutdown)
    Apple Watch Series 6 - 44mm (A986F090-F738-43EA-BD89-1CB9AE52A181) (Shutdown)
-- Unavailable: com.apple.CoreSimulator.SimRuntime.iOS-12-0 --
    iPhone 5s (7F7A3FDF-7A0F-4879-B686-D68ED321909D) (Shutdown) (unavailable, runtime profile not found)
    iPhone 6 Plus (BD92CC35-10DB-43BE-AE03-3061B6A4541E) (Shutdown) (unavailable, runtime profile not found)
    ...

この中の== Devices ==Unavailableとなっているものがあれば使えなくなった過去のデバイスイメージなので削除してOK。
個別に削除するのは面倒なので、一括で削除できるコマンドがあるのでそれを使用する。

$ xcrun simctl delete unavailable

削除後は 212MBとかなり削減できた。

$ du -sh ~/Library/Developer/CoreSimulator/*
9.5G    /Users/xyk/Library/Developer/CoreSimulator/Caches
212M    /Users/xyk/Library/Developer/CoreSimulator/Devices
  0B    /Users/xyk/Library/Developer/CoreSimulator/Temp

ちなみにデバイス一覧表示は以下コマンドでもできる。
こちらは有効なデバイスのみ表示される。
シミュレータはデバイスタイプ(例: iPhone 12)とOSバージョン(例: iOS14)の組み合わせ毎に作成される。

$ xcrun xctrace list devices

== Devices ==
...

== Simulators ==
Apple TV (14.2) (1F6EB2FF-E90F-4CB7-AE83-1F76A12726C5)
Apple TV 4K (14.2) (AA26C080-1DBD-4EC3-A256-EBF612CBCFF4)
Apple TV 4K (at 1080p) (14.2) (C73C7065-8071-45E9-BF5D-925715F2A900)
iPad (8th generation) (14.2) (8BB4C077-FF15-41F1-8C15-D71AB8218123)
iPad Air (4th generation) (14.2) (1DFDFD00-B32E-4968-9D34-356825215C1C)
iPad Pro (11-inch) (2nd generation) (14.2) (AF3AF7C1-5BBE-4DDB-B2AC-BC1DF68EE2B1)
iPad Pro (12.9-inch) (4th generation) (14.2) (E3994BDC-7347-4F09-B0A0-B9ECD4A0A23A)
iPad Pro (9.7-inch) (14.2) (7E6911CC-975E-44E5-92C7-E7F811982F95)
iPhone 11 (14.2) (10D8C6FC-0616-4ADB-B8B9-28FC1FAFF147)
iPhone 11 Pro (14.2) (F9DBE081-2A95-4D26-AC2F-B3CF3A04B013)
iPhone 11 Pro Max (14.2) (28877C6F-B924-4809-8A6F-27B83F6C626D)
iPhone 12 (14.2) (42D55001-838C-47F0-8299-B727825342E0)
iPhone 12 (14.2) + Apple Watch Series 5 - 44mm (7.1) (FB015CC5-2505-43A0-8F5B-C541A58780B7)
iPhone 12 Pro (14.2) (B90B1372-2F0B-4B1B-84D0-F60CD8A57B23)
iPhone 12 Pro (14.2) + Apple Watch Series 6 - 40mm (7.1) (2CBBADB8-423E-4607-89A2-48ED718AB815)
iPhone 12 Pro Max (14.2) (5F5833BD-5322-40E5-9656-F22EDFA725CB)
iPhone 12 Pro Max (14.2) + Apple Watch Series 6 - 44mm (7.1) (A986F090-F738-43EA-BD89-1CB9AE52A181)
iPhone 12 mini (14.2) (636AFC6D-0447-45D8-AE92-BA4ECAEED0CE)
iPhone 12 mini (14.2) + Apple Watch Series 5 - 40mm (7.1) (8DE67E08-C034-4DBD-8B19-67B29072796E)
iPhone 8 (14.2) (2F64CE34-5CB4-4D8D-89A6-264273ADCC8C)
iPhone 8 Plus (14.2) (893579BF-2A02-4867-9618-9C4AD9362AD3)
iPhone SE (2nd generation) (14.2) (6607972D-4214-465A-AC03-EC8CB0127F5C)
iPod touch (7th generation) (14.2) (EB469B62-58B2-43C4-9768-BAB84646D437)

Xcode 上でシミュレータ一覧を確認するには
メニュー -> Window -> Devices and Simulators -> Simulatorsタブ
から。
ここからシミュレータを個別に削除したり新たに追加できたりする。

以下は以前書いたシミュレータ関連の記事。

xyk.hatenablog.com

xyk.hatenablog.com

Carthage のキャッシュ

Xcode とは関係ないが Carthage でライブラリ管理している場合。

$ du -sh /Users/xyk/Library/Caches/org.carthage.CarthageKit/DerivedData/*
4.8G    /Users/xyk/Library/Caches/org.carthage.CarthageKit/DerivedData/11.6_11E708
4.8G    /Users/xyk/Library/Caches/org.carthage.CarthageKit/DerivedData/11.7_11E801a
4.8G    /Users/xyk/Library/Caches/org.carthage.CarthageKit/DerivedData/12.0_12A7209
5.1G    /Users/xyk/Library/Caches/org.carthage.CarthageKit/DerivedData/12.2_12B45b
4.2G    /Users/xyk/Library/Caches/org.carthage.CarthageKit/DerivedData/12.4_12D4e

Xcode のバージョン毎にギガ単位サイズのキャッシュができている。
キャッシュサイズは使用するライブラリ数で変わってくるかと思う。
昔のバージョンのものは削除。

$ rm -rf /Users/xyk/Library/Caches/org.carthage.CarthageKit/DerivedData/11*