Edited at

iOS/Androidで容量ギリギリでアプリの動作を確認するTips

More than 3 years have passed since last update.


目的

ストレージが逼迫してくると思わぬ動作をすることがあります。

そこで、端末の容量に応じた挙動やエラー処理を確認したかったので、逼迫させる方法をまとめました。


動作環境

MacOSX 10.10


アクション



  1. ddコマンド

  2. ダミーファイルの転送


ddコマンドとは

cpみたいなものですが、これを使うと柔軟に好きなファイルのサイズを作ることができます。


ダミーファイルを作る

~ ❯❯❯ dd if=/dev/zero of=/tmp/test.txt bs=1048576 count=100

100+0 records in
100+0 records out
104857600 bytes transferred in 0.130478 secs (803642577 bytes/sec)

これで、1024^2 * 100つまり100MBのダミーファイルを作ることができました。


オプションの説明


  • if → input path

  • of → output path

  • bs → 単位バイトサイズ

  • count → 単位バイトサイズをいくつ書き込むか


端末の容量を調べる

各OSの設定から確認してください。容量に応じてダミーファイルを作成していきます。


ダミーファイルを転送する


Android

adb push /tmp/test.txt /storage/sdcard0/

のようなコマンドで転送可能です。指定可能なディレクトリは権限通りです。

試したところ、

1. 18G空いてる

2. 18Gのファイル送る

3. 一瞬、容量が200MBくらいになる

4. 500MBくらいに増える

5. 500MBのダミーファイルを再度送る

6. 200MBくらいになる

と、3~5を繰り返していったら1MBくらいまで減らせました。tmpのパージとかがあるのでしょう。ちなみに容量1MB未満にしてテスト対象のアプリを起動したら、強制終了でした(´;ω;`)ブワッ


iOS

iTunes経由でファイルを転送できるアプリをインストールすれば誰でも転送できます。

Send AnyWhereというアプリを自分は使いました。


動作確認の結果


  1. Androidの場合、設定画面で表記される容量通りの挙動をしました。私のテスト対象アプリは起動時強制終了だった(´;ω;`)ブワッ

  2. iOSの場合、設定では0バイトと表記されていながら、下記のコードでは200MBという値が取得されました。写真を撮ることも可能だったので、標準アプリ用に確保されているのかも。また、0バイトと表記された後はファイル転送ができないので写真を撮るなりして追い詰めるしかないようです。

long get_space

{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error:nil];
return [[dictionary objectForKey: NSFileSystemFreeSize] longValue];
}