清理iPhone模拟器


107

在为iPhone模拟器构建时,有没有一种简单的方法可以清理xcode在其中部署应用程序的目录?我有一个sqlite数据库,如果需要,可以在启动时将其复制到Documents文件夹中。问题是我可能会更改架构,但是不会复制新数据库,因为已经存在一个数据库。

理想情况下,每次构建时,它都会核对以前的内容。这可能吗,还是我必须手动进行?


模拟器是否支持AppleScript?
罗格

是的,它确实。我已经编写了AppleScript,以针对每个设备和操作系统版本遍历所有iOS模拟器,并重置其内容和设置:github.com/michaelpatzer/ResetAllSimulators
mpatzer 2014年

Answers:


91

模拟器会将应用程序安装到:

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

还要检查:

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

GUID文件和目录与模拟器的已安装应用程序匹配。

手动删除所有这些文件/目录,以从模拟器中删除所有应用程序。

我知道有一些方法可以在XCode的构建过程中添加脚本。

同样,看起来XCode似乎更改了它使用的每个版本的GUID(我的应用所在的目录在XCode中的版本之间都发生了变化),因此尝试一直删除同一目录将不起作用。如果您一次只使用一个应用程序,则可以清除整个目录。


2
请务必在下面查看@idStar的答案。它更新了有关Lion / Xcode4的信息,并提供了一个不错的小脚本来帮助自动化。
PyjamaSam 2012年

我正在测试添加/删除日历订阅。在真实设备上,您可以在“设置”>“帐户”中删除日历订阅,但是iOS Simulator中不存在此菜单,并且我不想重置整个模拟器。因此,我最终使用git 在本地对Device文件夹进行了版本控制,并git reset HEAD --hard && git clean -f在添加日历后执行删除日历订阅。
Thibault D.

132

来自Apple开发资源:

要将模拟器的用户内容和设置恢复为出厂状态并删除已安装的应用程序,请选择“ iPhone模拟器>重置内容和设置”

类似于:

iOS重置


3
这似乎并没有清除SQLite
Asped

1
例如,这不会清除浏览器的缓存
Mau

1
现在,此设置位于Hardware > Reset Content and Settings
Haseeb Eqx '19

22

我这样做的方法是简单地单击并按住模拟器中我的应用程序的图标,然后在它开始摆动时单击黑白(x)。将会弹出一条消息,询问您是否真的要删除,只需单击“是”即可。下次构建和部署应用程序时,它将使用新的sqlite数据库,而不会造成麻烦,并且您不必在文件系统中乱搞。


这似乎不起作用-它实际上不能从模拟器中删除数据吗?
亚当

1
我的错误-可以正常工作(通过阅读接受的答案中的目录来确认。我只是忘记了Apple用户不友好的NSUserDefaults设计(未以任何明智的方式报告未设置的值)
Adam

@quadelirus,我认为您的回答在这种情况下最合适。
datnt

这正是我所做的,但是我不确定如何关闭已经在模拟器中打开的应用程序。除非关闭应用程序,否则我无法控制模拟器。
Wanna Coffee


12

在Mac OS X Lion上运行iOS 5之后,您可以尝试:

  1. 创建一个RemoveSimulatorApps.command包含以下内容的脚本:
    rm -rf“ $ HOME /库/应用程序支持/ iPhone Simulator / 5.0 / Applications / *”
    
  2. 将此脚本保存到您的目录中PATH
  3. 使文件可执行,例如:
    chmod + x RemoveSimulatorApps.command

假设条件

  • 您可能想从键盘收藏夹按钮(例如在具有可编程键的Logitech或Microsoft键盘上)调用此功能(因此,将其另存为.command文件而不是.sh)。
  • 可以销毁iOS模拟器中的所有功能(如果您只是在积极地开发一个应用程序,则非常理想)
  • 其他人的所有说明都适用于成为一个良好的可升级应用程序等。(尽管如此,我个人还是觉得这很有用b / c我有开发模式开关,可以在特定状态下重新加载数据库,而我正尝试对其进行一些一致的鲁棒性/错误处理)

1
这是一个完美的作品,只记得将正确的IOS版本添加到路径中:)
13年

1
添加〜而不是绝对路径是否有意义?
Nikita Leonov 2014年

8

这可能是过分的,但是..

您还可以使用菜单和“重置内容和设置...”


7

如果更改了架构,您真正要做的是清除数据库。一种方法是,从长远来看,当您开始发布应用程序的2.0、3.0等版本时,它会使您更快乐,这是检查sqlite表的版本,如果它已更改,则丢弃旧文件,然后使用您捆绑包中的文件。

找到一种清理模拟器的方法并不能解决现实世界中当您使用新架构发布新版本时如何清理客户的iPhone的问题。

值得一提的是,在确定遇到了旧模式之后,您可能想要复制新数据库而不破坏旧数据库,然后将任何有趣的数据从旧数据库中加载到新数据库中。然后吹走旧数据库。这样,您可以保留用户对数据库的添加。


通常,在谈论发行版升级时,我同意您的看法,但是在开发任何特定版本的过程中,这远远超出了必要的开销。数据库模式可以在每个构建的基础上进行更改,并且需要为每个构建编写转换代码是错误的。
特拉维斯·詹森

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->硬件->删除所有内容和设置


5

从Xcode 6开始,您可以使用以下命令从命令行执行此操作:xcrun simctl

另外,iOS Simulator应用程序(Xcode 6版本和较早版本)都有一个名为“重置内容和设置”的菜单项,可用于擦除当前引导的设备。


但是可以在每个构建中自动执行吗?例如测试?
Daniel Gomez Rico 2014年

假设您正在使用脚本进行测试,则可以在适当的地方向该脚本添加“ xcrun simctl擦除<UDID>” ...
Jeremy Huddleston Sequoia

是的,那正是我说的。
Jeremy Huddleston Sequoia 2014年

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 {}"


1

清除Xcode缓存;

Command + Option + Shift + K

Command + Shift + K

(同时使用它们,因为它们具有不同的功能)

清除派生数据内容;

菜单栏->窗口->组织者->项目->选择项目

右窗格显示文件夹的名称,右侧的删除按钮也允许您删除所有派生的数据内容。

清除模拟器缓存;

菜单栏-> iOS模拟器->重置内容和设置


1

正如我在经过验证的答案的评论中所解释的:

我正在测试添加和删除日历订阅。在实际设备上,您可以在“设置”,“ 帐户”中删除日历订阅但是iOS模拟器中不存在此菜单,并且我不想重置整个模拟器。

因此,我最终使用git对Device文件夹进行了本地版本控制,并在添加日历后执行以下命令来删除日历订阅:

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

因此,步骤如下:

  1. 在iOS Simulator上安装应用程序,然后执行所需的操作
  2. 识别设备~/Library/Developer/CoreSimulator/Devices/cd对其进行处理,然后git init创建一个git存储库
  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/*'

它只是破坏了SIM卡上的所有应用程序。


1
这不再适用于Xcode 6及更高版本。
杰里米·哈德斯顿红杉2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.