如何从命令行从 iOS 8 模拟器中删除应用程序?

Posted

技术标签:

【中文标题】如何从命令行从 iOS 8 模拟器中删除应用程序?【英文标题】:How do I remove app from iOS 8 Simulator from command line? 【发布时间】:2014-12-11 05:47:27 【问题描述】:

我在 ios 模拟器中运行了一个自动化,我必须在再次运行之前将其删除。如何通过命令行从 iOS 模拟器中删除应用?

对于每个模拟器设备目录(位于~/Library/Developer/CoreSimulator/Devices/*),我 试图删除./data/Containers/Bundle/Application/./data/Containers/Data/Application/

即使我试图通过在模拟器中长按应用程序(应用程序变得不稳定)来删除应用程序并单击 X 按钮,用户默认设置也没有被清除。我希望应用程序状态 100% 干净。

我找到了解决这个问题的好办法。

【问题讨论】:

【参考方案1】:

对于 Xcode 6.1,要卸载应用程序,请使用以下命令:

xcrun simctl uninstall booted com.example.apple-samplecode.UICatalog

其中com.example.apple-samplecode.UICatalog 是您要卸载的应用程序的捆绑标识符。

【讨论】:

这是一个更简洁的实现,尤其是包含 'booted' 如果没有启动模拟器,有没有办法静默失败? 我想我可以简单地做xcrun simctl uninstall booted com.example.apple-samplecode.UICatalog || true 同时在多台模拟器设备上运行时,未定义卸载应用程序的设备。在这种情况下,请使用设备的 UDID 而不是 booted(使用 xcrun simctl list 获取可用的 UDID) 正是我们所需要的!我搜索了在每次开始开发 UITests 时擦除所有内容的方法。【参考方案2】:

我们发现删除用户默认值的一种方法是删除./data/Library/Preferences/* 中的所有文件,以及删除应用程序和数据目录。

但是,在 Xcode 6 中,命令 xcrun 有一个名为 simctl 的新子命令,它允许我管理 iOS 模拟器,包括重置模拟器和安装应用程序。

我想出的解决方法是使用命令

xcrun simctl erase [device ID]

示例

如果xcrun simctl list() 返回

9DDA0CFE-7CEC-40B6-A343-1EC01F282B22 (active, disconnected)
    Watch: Apple Watch Series 2 - 42mm (88474523-163E-4021-B591-2AECBFA26997) (Shutdown)
    Phone: iPhone 7 Plus (5785E680-15CD-42D3-82AB-597286A270C5) (Shutdown)

然后运行这两个命令

xcrun simctl erase 88474523-163E-4021-B591-2AECBFA26997
xcrun simctl erase 5785E680-15CD-42D3-82AB-597286A270C5

() 设备ID可以通过运行获取

xcrun simctl list

这将重置模拟器(相当于iOS Simulator > Reset Contents and Settings... 菜单项)。

在 Xcode 6.0.1(Build 6A317)中,存在错误或行为变化,当您卸载应用程序时,不会删除用户默认设置。

Usage: simctl [--noxpc] [--set <set path>] <subcommand> ... | help [subcommand]
Command line utility to control the iOS Simulator

For subcommands that require a <device> argument, you may specify a device UDID
or the special "booted" string which will cause simctl to pick a booted device.
If multiple devices are booted when the "booted" device is selected, simctl
will choose one of them.

Subcommands:
    create        Create a new device.
    delete        Delete a device.
    erase         Erase a device's contents and settings.
    boot          Boot a device.
    shutdown      Shutdown a device.
    rename        Rename a device.
    getenv        Print an environment variable from a running device.
    openurl       Open a URL in a device.
    addphoto      Add a photo to the photo library of a device.
    install       Install an app on a device.
    uninstall     Uninstall an app from a device.
    launch        Launch an application by identifier on a device.
    spawn         Spawn a process on a device.
    list          List available devices, device types, or runtimes.
    notify_post   Post a darwin notification on a device.
    icloud_sync   Trigger iCloud sync on a device.
    help          Prints the usage for a given subcommand.

【讨论】:

如果你只想删除单个应用,你应该使用卸载而不是擦除。 在 Xcode 6.0.1 中,即使你使用了卸载命令,用户默认值仍然保持不变(这是一个 bug)。这就是为什么我建议使用擦除。 啊,是的。好点,但这不是 Xcode 6.0.1 的问题,而是 iOS 8.0 的问题。如果您在模拟的 7.x 设备上使用“删除”,它将正常工作。【参考方案3】:

在单个命令中重置所有内容和设置

    退出 iPhone 模拟器

    在终端中,运行:

    xcrun simctl erase all
    

这将为 Xcode 的活动版本(xcode-select -p 引用的那个)重置所有模拟器的内容和设置。

【讨论】:

【参考方案4】:
xcrun simctl uninstall simulatorIdentifier appBundleId

【讨论】:

以上是关于如何从命令行从 iOS 8 模拟器中删除应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行从 pdf 中删除隐藏的裁剪元素?

从命令行从 iOS 中的测试套件运行单个/可选测试用例(XCTestCase)

如何使用 python 命令行从文件中运行 python 函数?

java命令行从编译到打jar包到执行

如何通过命令行从多个文件夹中获取完整文件名到 csv

Xamarin Forms (iOS) - 从选取器中删除快捷方式栏