iPhoneシミュレーターのクリーンアップ


107

iPhoneシミュレータ用にビルドするときにxcodeがアプリをデプロイするディレクトリをクリーンアップする簡単な方法はありますか?必要に応じて、起動時にDocumentsフォルダーにコピーされるsqliteデータベースを持っています。問題は、スキーマを変更する可能性があることですが、新しいデータベースは既に存在するため、コピーされません。

理想的には、ビルドするたびに、以前のコンテンツが核になるでしょう。これは可能ですか、それとも手動で行う必要がありますか?


シミュレーターはAppleScriptをサポートしていますか?
Rog

はい、そうです。各デバイスとOSバージョンのすべてのiOSシミュレーターを反復処理し、それらのコンテンツと設定をリセットするAppleScriptを作成しました:github.com/michaelpatzer/ResetAllSimulators
mpatzer '27

回答:


91

シミュレーターはアプリを次の場所にインストールします:

"$HOME/Library/Application Support/iPhone Simulator/User/Applications"

また確認してください:

"$HOME/Library/Developer/CoreSimulator/Devices"

GUIDファイルとディレクトリは、シミュレーターにインストールされているアプリと一致します。

それらのファイル/ディレクトリをすべて手動で削除して、シミュレータからすべてのアプリケーションを削除します。

XCodeのビルドプロセスにスクリプトを追加する方法があることは知っています。

また、XCodeが各ビルドで使用するGUID(XCodeのビルド間でアプリが置かれているディレクトリが異なる)を変更しているように見えるため、同じディレクトリを常に削除しようとしても機能しません。一度に1つのアプリでのみ作業している場合は、ディレクトリ全体を消去することもできます。


2
以下の@idStarの回答を必ずチェックしてください。Lion / Xcode4に関する情報と、物事を自動化するのに役立つ素敵な小さなスクリプトを更新しました。
PyjamaSam

カレンダーのサブスクリプションの追加/削除をテストしていました。実際のデバイスでは、[設定]> [アカウント]でカレンダーのサブスクリプションを削除できますが、このメニューはiOSシミュレーターには存在せず、シミュレーター全体をリセットしたくありませんでした。そのため、gitを使用してDeviceフォルダーをローカルでバージョン管理し、git reset HEAD --hard && git clean -f追加後にカレンダーサブスクリプションを削除するために実行しました
Thibault D.

132

Apples Dev Resourcesから:

シミュレーターのユーザーコンテンツと設定を工場出荷時の状態に設定し、インストールしたアプリケーションを削除するには、[iPhone Simulator]> [Reset Content and Settings]を選択します。

これは次のようになります。

iOSリセット


3
これはSQLiteをクリーンアップしていないようです
Asped

1
これは例えばブラウザのキャッシュをクリアしません
Mau

1
現在、この設定は次の場所にありますHardware > Reset Content and Settings
Haseeb Eqx

22

これを行う方法は、シミュレータでアプリのアイコンをクリックしてそのまま押し続けることです。次に、アプリが小刻みに動き始めたら、白黒(x)をクリックします。本当に削除するかどうかを尋ねるメッセージが表示され、[はい]をクリックするだけです。次回アプリをビルドしてデプロイするときは、問題なく新しいsqlite dbを使用するため、ファイルシステムをいじくり回す必要はありません。


これは機能していないようです-実際にはシミュレータからデータを削除していませんか?
アダム、

1
私の間違い-これは正常に機能します(承認された回答のディレクトリを読むことで確認されます。NSUserDefaultsのAppleのユーザーフレンドリーではないデザインを忘れてしまいました(未設定の値は賢明な方法で報告されません)
Adam

@quadelirus、あなたの答えはこの状況で最も適切だと思います。
datnt 2013年

これはまさに私がやったことですが、すでにシミュレーターで開いているアプリを閉じる方法はわかりません。アプリを閉じない限り、シミュレーターを制御できませんでした。
Wanna Coffee


12

Mac OS X LionでiOS 5を試した後、次のことを試すことができます。

  1. 以下RemoveSimulatorApps.commandを含むというスクリプトを作成します。
    rm -rf "$ HOME / Library / Application Support / iPhone Simulator / 5.0 / Applications / *"
    
  2. このスクリプトをのディレクトリに保存しますPATH
  3. 次のように、ファイルを実行可能にします。
    chmod + x RemoveSimulatorApps.command

仮定

  • プログラマブルキーを備えたLogicoolまたはMicrosoftキーボードなどのキーボードのお気に入りボタンからこれを呼び出すことができます(したがって、.shではなく.commandファイルとして保存します)。
  • iOSシミュレーターのすべてを吹き飛ばしても大丈夫です(1つのアプリで積極的に作業している場合に最適です)
  • 他の人からのすべての注意事項は、アップグレード可能な優れたアプリなどについて当てはまります(私は個人的にはこれが便利だと個人的に感じましたb / c特定の状態でデータベースをリロードする開発モードスイッチがあり、一貫性のある堅牢性/エラー処理を実行しようとしていました)

1
これは完璧に機能します。正しいIOSバージョンをパスに追加することを忘れないでください:)
Asped

1
絶対パスの代わりに〜を追加することは理にかなっていますか?
Nikita Leonov

8

やり過ぎかもしれませんが…

メニューと「コンテンツと設定をリセット...」を使用することもできます


7

スキーマを変更した場合、実際に実行しようとしているのは、データベースをクリアすることです。これを行う方法の1つであり、アプリのバージョン2.0、3.0などの出荷を開始すると、長期的には幸せになります。sqliteテーブルのバージョンを確認し、変更されている場合は破棄します。古いファイルを使用して、バンドル内のファイルを使用してください。

シミュレーターをクリーンアップする方法を見つけても、新しいスキーマで新しいバージョンを出荷するときに顧客のiPhoneをクリーンアップする方法の現実的な問題には役立ちません。

追加のポイントとして、古いスキーマに遭遇したと判断した後、古いデータベースを破壊せずに新しいデータベースをコピーし、古いデータベースから興味深いデータを新しいデータベースにロードすることができます。次に、古いデータベースを一掃します。これにより、データベースへのユーザーの追加を保持できます。


一般に、リリースのアップグレードについて話しているときは同意しますが、特定のバージョンの開発の最中、これは必要以上のオーバーヘッドになります。データベーススキーマはビルドごとに変わる可能性があり、ビルドごとに変換コードを記述する必要があるのは間違いです。
Travis Jensen

7

Xcode> = 6の場合

xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -n1 xcrun simctl erase

6

Xcode 9を使用している場合-> メニューバー -> ハードウェア -> すべてのコンテンツと設定を消去

Xcode-> Hardware-> Erase All Content and Settings


5

Xcode 6以降、次のコマンドラインを使用してこれを実行できます:xcrun simctl erase

また、iOSシミュレーターアプリ(Xcode 6バージョンと以前のバージョンの両方)には、「コンテンツと設定のリセット」と呼ばれるメニュー項目があり、これを使用して現在起動しているデバイスを消去できます。


しかし、それは各ビルドで自動的に実行できますか?たとえばテスト用?
Daniel Gomez Rico 14

スクリプトを使用してテストを実行していると仮定すると、必要に応じて、そのスクリプトに 'xcrun simctl erase <UDID>'を追加するだけで済みます...
Jeremy Huddleston Sequoia

はい、それはまさに私が言ったことです。
ジェレミーハドルストンセコイア

5

これはXcode 6で動作します:

xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -I{} xcrun simctl erase {}

.bash_profileの場合

alias cleansim="xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -I{} xcrun simctl erase {}"

3

Xcode 6以降:

xcrun simctl erase <sim udid> <-シミュレータをリセットします。


1

Xcodeキャッシュをクリアします。

Command + Option + Shift + K

Command + Shift + K

(機能が異なるため、両方を使用してください)

派生データのコンテンツをクリアします。

メニューバー->ウィンドウ->オーガナイザー->プロジェクト->プロジェクトを選択

右側のペインにはフォルダの名前が表示され、右側の削除ボタンを使用すると、派生したすべてのデータコンテンツを削除できます。

シミュレータキャッシュをクリアします。

メニューバー-> iOSシミュレータ->内容と設定をリセット


1

検証された回答の下でコメントで説明していたように

カレンダーのサブスクリプションの追加と削除をテストしていました。実際のデバイスでは、[設定][ アカウント]でカレンダーのサブスクリプションを削除できますが、このメニューはiOSシミュレーターには存在せず、シミュレーター全体をリセットしたくありませんでした。

そのため、gitを使用してDeviceフォルダーをローカルでバージョン管理し、次のコマンドを実行して、追加したカレンダーサブスクリプションを削除しました。

$ git reset HEAD --hard
$ git clean -f

したがって、手順は次のとおりです。

  1. iOSシミュレーターにアプリケーションをインストールし、必要な操作を実行します
  2. デバイスを識別~/Library/Developer/CoreSimulator/Devices/cdてそれを実行し、次にgit initgitリポジトリを作成します
  3. 状態を保存したい場合は、 git commit -a "Message"
  4. 設定を変更するものは何でも(例:カレンダーのサブスクリプションの追加)、テストを実行します
  5. シミュレーターをシャットダウンする
  6. 行う git reset --hard HEAD
  7. シミュレーターを起動しgit commitます。その後に行われたすべての変更が失われます。

1

XCodeで、[ウィンドウ]メニューオプションに移動し、[デバイス]を選択すると、不要になったものを削除できます。


0

Xcode <= 5の場合

私は以下を追加しました ~/.bash_profile

alias cleansim='rm -r ~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/*'

それはシムのすべてのアプリを核にするだけです。


1
これは、Xcode 6以降では適用されなくなりました。
ジェレミーハドルストンセコイア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.