simctl:从命令行控制iOS模拟器

在开发iOS应用程序时,模拟器是开发人员的最好朋友。 这是在开发过程中测试应用程序的快速简便的方法,因为我们可以使用GUI与iOS模拟器进行交互。 苹果公司关于模拟器入门的文档很棒,我们几乎可以通过使用图形用户界面来学习有关控制模拟器的所有知识。

尽管模拟器很容易与GUI一起使用,但是脚本模拟器交互要在Continuous Integration服务器上运行有点痛苦。 幸运的是,Apple有一个不错的命令行实用程序,名为“ simctl”。

在本文中,让我们看看如何使用’simctl’与iOS模拟器进行交互。 我们将介绍以下内容

  • 创建,删除和引导模拟器
  • 将照片和视频添加到模拟器
  • 在模拟器中安装/卸载,启动/终止应用程序
  • 捕获截图并录制模拟器视频
  • 收集模拟器日志和其他技巧

simctl

Apple具有“ simctl”二进制文件,可从命令行与iOS模拟器进行交互。 它与Android的adb非常相似。 再次,这是Apple记录不足的另一个实用程序,但是我们可以在/Applications/Xcode.app/Contents/Developer/usr/bin/simctl中找到二进制文件,并将其与xcrun实用程序一起使用。 我们可以使用help命令访问所有可用选项

  $ xcrun simctl帮助 

我们可以使用’simctl’在iOS模拟器上执行各种操作,包括创建新模拟器,擦除模拟器,在模拟器内部安装应用,向模拟器添加照片/视频等等。 让我们详细研究其中的几个。

列出所有可用的模拟器

我们可以使用命令轻松列出所有可用的模拟器

  $ xcrun simctl列表 

该命令将列出运行时所有可用的模拟器。 如果已经在运行,它还将显示“已启动”模拟器。

在模拟器上的CRUD操作

我们可以使用simctl创建,擦除,删除,引导,关闭和升级模拟器。

创建

我们可以使用命令在现有的iPhone7(iOS 10.3)模拟器之上轻松创建名为“ My-iPhone7”的新模拟器。

  $ xcrun simctl创建My-iphone7 com.apple.CoreSimulator.SimDeviceType.iPhone-7 com.apple.CoreSimulator.SimRuntime.iOS-10-3 

我们可以看到使用列表选项新创建的模拟器,并且拥有模拟器’C86A559A-1F50–40D1–8D84–954EDFBBCE18’的UUID

关机/擦除/启动

正如我们已经看到的那样,已经启动了另一个模拟器,让我们关闭它并擦除其内容。 这里的顺序很重要,我们不能在引导状态下擦除模拟器,我们需要先关闭然后再擦除。

  $ xcrun simctl关闭C8C050F3–062D-4444-A888-BBEC783E31BD 
  $ xcrun simctl擦除C8C050F3–062D-4444-A888-BBEC783E31BD 

开机

现在,让我们使用新的UUID引导新创建的模拟器

  $ xcrun simctl引导C86A559A-1F50–40D1–8D84–954EDFBBCE18 

到此为止,我们已经学习了如何关闭,引导和擦除模拟器。 让我们通过使用打开任何模拟器

  $打开/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/ 

您可以看到模拟器正在启动。

将照片/视频添加到模拟器

iOS模拟器默认有5张图像,但是我们可以使用simctl addmedia功能添加更多图像或视频。 让我们在模拟器中添加一张照片(png)和视频(gif),该模拟器保存在桌面上。

  $ xcrun simctl addmedia启动〜/ Desktop / shashi.png 

现在,模拟器将有另一张照片。 同样,我们也可以添加视频。

  $ xcrun simctl addmedia已启动〜/ Desktop / simctl_list.gif 

在模拟器中安装/卸载应用

如果我们已经有从派生数据指向.app文件的路径,则可以从命令行轻松地将应用程序安装在模拟器中。 让我们用Xcode创建一个新的单视图应用程序,并将其命名为“ CLI”并将其保存在桌面上。 我们需要使用xcodebuild构建应用程序,以在派生数据中获取CLI.app。

  $ xcodebuild build build -scheme“ CLI” CODE_SIGN_IDENTITY =”” CODE_SIGNING_REQUIRED = NO 

现在,我们将在派生数据内部获取CLI.app,在我的情况下,它位于/Users/shashi/Library/Developer/Xcode/DerivedData/CLI-dxasphjukowuptcqxzbmyaqgpbqp/Build/Products/Debug-iphoneos/CLI.app目录中。

我们可以使用以下命令在模拟器中安装CLI.app

  $ xcrun simctl安装已启动/Users/shashi/Library/Developer/Xcode/DerivedData/CLI-dxasphjukowuptcqxzbmyaqgpbqp/Build/Products/Debug-iphoneos/CLI.app 

观看下面我们要安装CLI.app的GIF

同样,我们可以轻松地从模拟器中卸载我们的iOS应用。 我们需要知道我们应用程序的捆绑包标识符。 就我而言,这是测试。CLI我们可以使用

  $ xcrun simctl卸载启动的test.CLI 

模拟器中的启动/终止程序

与安装类似,我们可以使用simctl在命令行中启动和终止应用程序。 在启动之前,我们必须确保已安装应用程序。

  $ xcrun simctl启动启动的test.CLI 

我们可以看到该应用已启动,然后可以使用终止该应用

  $ xcrun simctl终止启动的test.CLI 

模拟器的屏幕截图和视频录制

在Xcode 8.2中,Apple引入了这一非常好的功能,可以捕获模拟器的屏幕截图和视频。 现在很容易捕获模拟器的屏幕截图。 我们可以使用捕获当前模拟器的状态

  $ xcrun simctl io启动的屏幕截图screen.png 

这会将模拟器的屏幕截图保存在当前的工作目录中,并带有文件screen.png

同样,我们可以在使用应用程序时录制模拟器的视频,然后使用

  $ xcrun simctl io引导记录视频news.mov 

这会将模拟器的视频保存到news.mov文件,该文件可以使用Quick Time播放器或类似设备播放。

收集模拟器日志

有时,将模拟器日志作为控制台输出打印会有所帮助。 我们可以通过阅读日志轻松确定模拟器的活动。 让我们打印模拟器的日志

  $ xcrun simctl生成启动日志流— level = debug 

如果您要查找特定应用的日志,我们还可以过滤日志输出

  #过滤日志输出 
  xcrun simctl生成启动日志流—谓词“ processImagePath以“ CLI”结尾” 
  xcrun simctl生成启动日志流—谓词“ eventMessage包含“错误”并且messageType == info 
  #收集日志数据 
  xcrun simctl spawn启动日志收集 
  #打开位置 
  cd`xcrun simctl getenv启动了SIMULATOR_SHARED_RESOURCES_DIRECTORY` 

杂项批量操作

当您不需要那么多模拟器时,有一些肮脏的技巧在某些情况下也可能有用。

删除所有模拟器

我们可以使用简单的命令擦除所有模拟器

  $ xcrun simctl全部清除 

删除所有模拟器

以下脚本将删除您所有的模拟器,因此请注意影响和在实际需要时使用。

  $ xcrun simctl列表|  awk -F“ [()]”'{for(i = 2; i <NF; i + = 2)print $ i}'|  grep'^ [-A-Z0–9] * $'|  xargs -I uuid xcrun simctl删除uuid 

按名称查找模拟器正则表达式

有时我们可能需要按名称查找模拟器并对该UUID执行操作。 我们可以使用名称找到该UUID,然后擦除/删除/启动模拟器。 让我们擦除包含“ Shashi”名称的模拟器

  $ xcrun simctl列表|  grep -w“ Shashi” |  awk -F“ [()]”'{for(i = 2; i <NF; i + = 2)print $ i}'|  grep'^ [-A-Z0–9] * $'|  xargs -I uuid xcrun simctl擦除uuid 

结论

使用simctl实用程序,我们可以以编程方式与iOS模拟器进行交互,并编写设置脚本以在CI服务器上执行测试。 您对“ simctl”有何经验,请在下面评论。

像XCBlog的 XCTEQ 发布的帖子一样 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 Github 搜索我们的 服务 ,开源项目, 或者在 Twitter Facebook Youtube LinkedIn 上关注我们 下载我们的 XCBlog iOS应用程序以离线阅读博客。

X CTEQ 一家专门从事基于Mobile DevOps,CI / CD,Mobile,AI / ML的测试自动化Checkout XCTEQ产品和服务的公司, 网址 http://www.xcteq.co.uk 或写信给我们info@xcteq.co。英国..