清理 iPhone 模拟器

Posted

技术标签:

【中文标题】清理 iPhone 模拟器【英文标题】:Cleaning up the iPhone simulator 【发布时间】:2010-10-16 01:52:14 【问题描述】:

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

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

【问题讨论】:

模拟器支持AppleScript吗? 是的。我编写了一个 AppleScript 来遍历每个设备和操作系统版本的所有 ios 模拟器并重置它们的内容和设置:github.com/michaelpatzer/ResetAllSimulators 【参考方案1】:

来自 Apple 开发资源:

要将模拟器的用户内容和设置设置为出厂状态并删除已安装的应用程序,请选择 设备 > 删除所有内容和设置

(在旧版本上:iPhone 模拟器 > 重置内容和设置。)

【讨论】:

这个好像没有清理 SQLite 例如这不会清除浏览器的缓存 现在这个设置位于Hardware > Reset Content and Settings 此设置现在位于Device > Erase All Content and Settings【参考方案2】:

终端中的以下运行将清除所有模拟器,就像您刚刚安装它们一样。

$xcrun simctl erase all

我在运行模拟器/xcode 之前关闭它。

【讨论】:

【参考方案3】:

如果您使用的是 Xcode 9 -> 菜单栏 -> 硬件 -> 删除所有内容和设置

【讨论】:

【参考方案4】:

对于 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

【讨论】:

【参考方案5】:

在 XCode 中,转到 Window 菜单选项,选择 Devices,然后您可以删除不再需要的那些。

【讨论】:

【参考方案6】:

正如我在validated answer 下的评论中解释的那样:

我正在测试添加和删除日历订阅。在真实设备上,您可以在 SettingsAccounts 中删除日历订阅,但 iOS 模拟器中不存在此菜单,我不想重置整个模拟器。

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

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

所以步骤是:

    在 iOS 模拟器上安装您的应用程序并做您必须做的事情 在~/Library/Developer/CoreSimulator/Devices/ 中识别您的设备并对其执行cd,然后git init 创建一个git 存储库 一旦你想保存状态,执行git commit -a "Message" 对设置进行任何更改(例如:添加日历订阅)并执行测试 关闭模拟器 做git reset --hard HEAD 启动模拟器,git commit 之后所做的所有更改都消失了。

【讨论】:

【参考方案7】:

Mac OS X Lion 上 iOS 5 之后,你可以试试:

    创建一个名为 RemoveSimulatorApps.command 的脚本,其中包含:
    rm -rf "$HOME/Library/Application Support/iPhone Simulator/5.0/Applications/*"
    
    将此脚本保存到您的PATH 中的目录中。 使文件可执行,例如:
    chmod +x RemoveSimulatorApps.command

假设

您可能希望从键盘的收藏按钮调用它,例如在带有可编程键的 Logitech 或 Microsoft 键盘上(因此,将其保存为 .command 文件而不是 .sh) 您可以在 iOS 模拟器中彻底摆脱一切(如果您只是在积极地开发一个应用程序,这是理想的选择) 其他人的所有注释都适用于成为一个好的可升级应用程序等。(我个人认为这很有用,但是 b/c 我有开发模式开关,可以在特定状态下重新加载数据库我试图做一些一致的鲁棒性/错误处理)

【讨论】:

这个完美运行,只要记住将你正确的IOS版本添加到路径中:) 添加~而不是绝对路径有意义吗?【参考方案8】:

这适用于 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 "

【讨论】:

【参考方案9】:

模拟器将应用安装到:

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

同时检查:

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

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

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

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

此外,XCode 似乎会更改它在每个构建中使用的 GUID(我的应用所在的目录在 XCode 中的构建之间会发生变化),因此尝试始终删除同一个目录是行不通的。如果您一次只使用一个应用程序,则可以选择清除整个目录。

【讨论】:

请务必查看下方@idStar 的回答。它更新了有关 Lion/Xcode4 的信息和一个不错的小脚本,以帮助实现自动化。 我正在测试添加/删除日历订阅。在真实设备上,您可以在“设置”>“帐户”中删除日历订阅,但 iOS 模拟器上不存在此菜单,我不想重置整个模拟器。因此,我最终使用 git 对我的 Device 文件夹进行本地版本控制,并在添加日历订阅后执行 git reset HEAD --hard && git clean -f 删除它。【参考方案10】:

清除 Xcode 缓存;

Command+Option+Shift+K

Command+Shift+K

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

清除派生数据内容;

菜单栏 -> 窗口 -> 管理器 -> 项目 -> 选择您的项目

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

清除模拟器缓存;

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

【讨论】:

【参考方案11】:

从 Xcode 6 开始:

xcrun simctl erase <sim udid>

【讨论】:

【参考方案12】:

从 Xcode 6 开始,您可以从命令行执行此操作: xcrun simctl 擦除

此外,iOS Simulator 应用程序(Xcode 6 版本和旧版本)有一个名为“重置内容和设置”的菜单项,可用于擦除当前启动的设备。

【讨论】:

但它可以在每次构建时自动执行?例如测试? 假设您正在使用脚本进行测试,您当然可以在适当的地方添加 'xcrun simctl erase ' 到该脚本...... 是的,我就是这么说的。【参考方案13】:

对于 Xcode

我将以下内容添加到我的~/.bash_profile

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

它只会破坏 sim 卡上的所有应用程序。

【讨论】:

这不再适用于 Xcode 6 及更高版本。【参考方案14】:

这可能有点矫枉过正,但是..

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

【讨论】:

【参考方案15】:

我这样做的方法是在模拟器中简单地单击并按住我的应用程序的图标 - 然后当它开始摆动时单击黑色和白色 (x)。将弹出一条消息,询问您是否真的要删除,然后单击“是”。下次您构建和部署您的应用程序时,它将顺利使用新的 sqlite db,您不必在文件系统中四处乱窜。

【讨论】:

这似乎不起作用 - 它实际上并没有从模拟器中删除数据? 我的错误 - 这很好用(通过阅读已接受答案中的目录确认。我只是忘记了 Apple 对用户不友好的 NSUserDefaults 设计(未以任何明智的方式报告未设置的值) @quadelirus,我认为你的回答在这种情况下是最合适的。 这正是我所做的,但我不确定如何关闭已经在模拟器中打开的应用程序。除非我关闭应用程序,否则我无法控制模拟器。 @WannaCoffee 见***.com/questions/18519799/…【参考方案16】:

如果您更改了架构,您真正想做的是清除数据库。一种方法是检查你的 sqlite 表的版本,如果它发生了变化,然后丢弃旧文件并使用捆绑包中的那个。

当您发布具有新架构的新版本时,寻找清理模拟器的方法无助于解决如何清理客户 iPhone 的现实问题。

额外的一点是,在确定遇到旧架构后,您可能希望复制新数据库而不破坏旧数据库,并将任何有趣的数据从旧数据库加载到新数据库中。然后吹掉旧数据库。这样您就可以保留用户对数据库的添加。

【讨论】:

一般来说,当你谈到版本升级时,我同意你的看法,但是在任何特定版本的开发过程中,这远远超过了必要的开销。数据库模式可以在每次构建的基础上更改,并且需要为每个构建编写转换代码是错误的。

以上是关于清理 iPhone 模拟器的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 模拟器让应用程序在 Build and Run 上运行

NSLog 在 iphone 模拟器上运行时输出到控制台,但在设备上运行时不输出

如何清理 xcode 构建缓存?

关于 iPhone 本地化

text 清理数据库和加载模拟器算法

dyld:库未加载:@rpath/libswiftCore.dylib