27
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

iOSで簡単に容量不足をエミュレートする方法

Last updated at Posted at 2023-01-11

概要

iOS開発をしている際に容量不足になった場合の動作を確認したい場合の方法です。
エミュレーターで少ない容量でマウントするだけです。

やり方

エミュレーターを用意する

XCodeを起動し、メニューの「Window」 -> 「Devices And Simulators」 を選択

左下の「+」を選択して、エミュレーターを作ります。Identifier はあとでパスで使います。

Macにイメージを作り、マウントする

以下のように /tmp/iosDummy.dmg にイメージを作ります。
-sizeで、iOSで利用する容量を指定します。この例では1GBの容量を作ってます。OSとアプリが入る大きさの容量は指定しておきましょう。

$ hdiutil create -size 1g -fs APFS /tmp/iosDummy.dmg

エミュレーターのMac上のパスに移動し、そこに上で作ったイメージをマウントします。

$ cd ~/Library/Developer/CoreSimulator/Devices/<上の画像のidentifier>
$ hdiutil attach /tmp/iosDummy.dmg -mountpoint .

アプリをインストール

対象のアプリをインストールします

確認する

Settingsアプリ起動 -> 「General」 -> 「About」 -> Capacityが役1GBであれば成功

上記のエミュレーターに埋め尽くしたい容量のファイルを置く

ddコマンドでファイルを作り、エミュレーター上に配置します。bsで容量を指定できます。この場合は200Mです。

$ cd data/Downloads
$ dd if=/dev/zero of=a.dummy bs=200M count=1

dd: a.dummy: No space left on device と出た場合は容量が足りない。少なめにして指定すると成功する。その後、少しづつ容量を増やしていくと成功することがある。

テキスト入力レベルで試したい場合は、data/Documents内にファイルを作れば、その分容量を使うので、細かい単位で調整できると思います。

マウント解除など

マウント解除します。dfコマンドでマウントされている箇所を探し、それをunmountします。

$ df -H
・・・
/dev/disk5s1     839M    47M   789M     6%     102    7701520    0%   ~/Library/Developer/CoreSimulator/Devices/<上の画像のidentifier>

$ diskutil unmount /dev/disk5s1
Volume untitled on disk5s1 unmounted

イメージファイルを削除しときます。

$ rm -rf /tmp/iosDummy.dmg

 使わなくなったエミュレーターを削除

$ rm -rf ~/Library/Developer/CoreSimulator/Devices/<上の画像のidentifier>

トラブルシューティング

アプリをインストールしようとしたら、「Unable to boot device because it cannot be located on disk.」と表示された

$ xcrun simctl erase all
27
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?