xcrun simctl eraseは、シミュレータデバイスをデバイス自体は残したまま、内容と設定を初期化するサブコマンドである。

基本的な使い方

erase <device>の形式で実行する。

$ xcrun simctl erase "TIL Erase Test"

エラーがなければ何も出力されず、終了コードは0になる。 デバイスのデータディレクトリ(~/Library/Developer/CoreSimulator/Devices/<UDID>/data)に直接置いたファイルは、erase後に消えていることを確認できる。

$ echo "marker" > ~/Library/Developer/CoreSimulator/Devices/<UUID>/data/til-erase-marker.txt
$ xcrun simctl erase "TIL Erase Test"
$ ls ~/Library/Developer/CoreSimulator/Devices/<UUID>/data/
Library
Media
var

インストール済みアプリやアプリのデータもこのデータディレクトリ配下に置かれているため、eraseによって一緒に消える。 一方、デバイス自体(UUIDや名前)はsimctl list devicesに残り続ける。

参考: xcrun simctl cloneでiOSシミュレータデバイスを複製する

起動中のデバイスは初期化できない

参考: xcrun simctl renameでiOSシミュレータデバイス名を変更する

cloneと同様、eraseも起動中(Booted)のデバイスに対して実行すると明確なエラーになる。 renameは起動中でも実行できるが、eraseはできない。

$ xcrun simctl boot "TIL Erase Test"
$ xcrun simctl erase "TIL Erase Test"
An error was encountered processing the command (domain=com.apple.CoreSimulator.SimError, code=405):
Unable to erase contents and settings in current state: Booted

初期化する前に、デバイスをshutdownしておく必要がある。

複数のデバイスを一度に初期化する

デバイスを複数指定すると、まとめて初期化できる。

$ xcrun simctl erase "TIL Erase Test" "TIL Erase Test2"

存在しないデバイスを指定するとエラーになる

存在しない名前やUUIDを指定すると、Invalid deviceエラーになり終了コードが0以外になる。

$ xcrun simctl erase "Nonexistent Device XYZ"
Invalid device: Nonexistent Device XYZ

同名デバイスが複数ある場合は1台しか初期化されない

参考: xcrun simctl deleteでiOSシミュレータデバイスを削除する

deleterenameと同様、<device>に名前を指定して同名デバイスが複数存在する状態でeraseを実行しても、そのうち1台しか初期化されない。

$ xcrun simctl erase "TIL Erase Dup"

名前だけを頼りに同名デバイスをまとめて初期化したい場合、1回の実行では処理し切れない前提でスクリプトを組む必要がある。

全デバイスを初期化するall

allを指定すると、全てのシミュレータデバイスの内容と設定を初期化する。

$ xcrun simctl erase all

起動中のデバイスや普段の開発で使っているデバイスも含めて全て初期化されるため、実行には注意が必要である。