Tag: simctl

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引导新创建的模拟器 […]

用simctl运行XCTest包

我有一个XCTest包,我可以通过使用simctl在模拟器上运行xcode。 我正在使用带有以下环境variables的iPhone 6 iOS 9.1模拟器: export SIMCTL_CHILD_TestBundleLocation="/Users/User/ios_app/DerivedData/primus/Build/Products/Debug-iphonesimulator/Tests.xctest" export SIMCTL_CHILD_XCInjectBundle="/Users/User/ios_app/DerivedData/primus/Build/Products/Debug-iphonesimulator/Tests.xctest" export SIMCTL_CHILD_XCInjectBundleInto="/Users/User/ios_app/DerivedData/primus/Build/Products/Debug-iphonesimulator/ios_app.app/ios_app" export SIMCTL_CHILD_XCTestConfigurationFilePath="/Users/User/ios_app/DerivedData/primus/Build/Products/Debug-iphonesimulator/Tests.xctest/Tests-7025D700-AA6C-4343-9C7A-92F9CC3A1C42.xctestconfiguration" export SIMCTL_CHILD_DYLD_LIBRARY_PATH="/Users/User/ios_app/DerivedData/primus/Build/Products/Debug-iphonesimulator:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks" export SIMCTL_CHILD_DYLD_FRAMEWORK_PATH="/Users/User/ios_app/DerivedData/primus/Build/Products/Debug-iphonesimulator:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks" 该应用程序已经安装在模拟器上,模拟器正在运行,我运行: xcrun simctl launch booted uk.co.company.ios.app -NSTreatUnknownArgumentsAsOpen NO -ApplePersistenceIgnoreState YES -XCTest All 应用程序启动,从模拟器日志中我可以看到,XCTest包加载,但testing不运行。 我注销了似乎停止的地方,并有一个私人方法_checkForTestManager ,更具体地说_checkManagerForDaemonStateAndConnectIfAvailable 。 从我可以告诉XCTest试图连接到testmanagerd但失败。 所以我试着在模拟器上用kickstarting testmanagerd : xcrun simctl spawn booted launchctl kickstart system/com.apple.testmanagerd 但是这似乎对运行的testing没有影响,但是我在模拟器日志中看到了一些额外的输出: testmanagerd[41610]: Received new test session connection (-[XCTestManager listener:shouldAcceptNewConnection:]) testmanagerd[41610]: Initial […]