Swift Simctl
这是一个小巧的工具(SimctlCLI)和库(Simctl),用 Swift 编写,用于自动化模拟器中的 xcrun simctl
命令来进行单元和 UI 测试。
它使您可以进行可靠的全自动测试,包括具有动态内容的推送通知,并由您控制的 UI 测试驱动。
🚧 架构
Swift Simctl 由两部分组成。 SimctlCLI
和 Simctl
。
Simctl
是一个 Swift 库,可以添加到您的项目测试包中。它提供了一个与通常只通过 xcrun simctl
从测试代码内部可用的命令的接口。为了调用这些命令,Simctl
通过本地网络连接与 SimctlCLI
进行通信。
SimctlCLI
是一个小型命令行工具,用于启动本地服务器,监听来自 Simctl
(客户端库)的请求并执行 xcrun simctl
命令。
⌨️ 可用命令
以下命令将可用于您的(测试)目标代码中:
- 发送带有自定义有效负载的推送通知
- 授予或撤销隐私权限(例如相机、照片...)
- 设置设备 UI 桌面模式为亮或暗模式
- 设置状态栏覆盖(例如数据网络、时间...)
- 通过包标识符卸载应用
- 通过包标识符终止应用
- 重命名设备
- 触发 iCloud 同步
❔ 您为什么(或不)使用它
➕ 优点
- 封闭系统(带有 Xcode 和模拟器的 Mac)
- 不需要像 APNS 这样的系统外部依赖
- 不会在不必要地膨胀代码库(AppDelegate)的方式设置自定义测试代码
- 可以正确地模拟推送通知,并保留正常的应用程序周期
- 在 CI 机器上运行
- 您的应用程序保持为黑盒且不需要修改
➖ 缺点
- 需要在您的 Xcode 项目中进行一些配置
- 仅适用于 Xcode 11.4+
有关具体用法,请参阅示例项目 Swift Simctl 包示例 或 Swift Simctl Cocoapod 示例。
🚀 入门
以下说明将帮助您在机器上启动并运行项目的副本。
📋 必备条件
💻 使用方法
📦 Swift 包
要在 Xcode 项目中使用 Swift Simctl,请添加此包
- Xcode > 文件 > Swift 包 > 添加包依赖...
- 选择包仓库 > 搜索:
SwiftSimctl
或查找https://github.com/ctreffs/SwiftSimctl.git
- 选择
SwiftSimctl
包 >下一步
- 请记住将依赖项添加到您的(测试)目标中
- 使用
import Simctl
在您的(测试)目标中访问库。
在测试期间运行服务器
确保在测试运行期间 SimctlCLI
在您的宿主机器上运行。要使用 Xcode 自身自动化此操作,请使用以下代码段作为测试目标的预操作和后操作。
您的方案
> 测试 > 预操作 > 运行脚本
#!/bin/bash
killall SimctlCLI # cleaning up hanging servers
set -e # fail fast
# start the server non-blocking from the checked out package
${BUILD_ROOT}/../../SourcePackages/checkouts/SwiftSimctl/bin/SimctlCLI start-server > /dev/null 2>&1 &
您的方案
> 测试 > 后操作 > 运行脚本
#!/bin/bash
set -e
killall SimctlCLI
📝 代码示例 Swift 包
请参阅示例项目以获得深入的代码示例 https://github.com/ctreffs/SwiftSimctlExample
☕ Cocoapod
假设您已经有了已经设置好 Cocoapods 的项目(否则请参阅 这些说明)
- 将
pod 'Simctl', '~> 0.2.1'
添加到您的(测试)目标中的Podfile
- 运行
pod install
- 打开
<YourProject>.xcworkspace
- 使用
import Simctl
在您的(测试)目标中访问库。
在测试期间运行服务器
确保在整个测试运行期间,在您的主机机器上运行 SimctlCLI
。要使用 Xcode 自身自动化此操作,请将以下片段用作您的测试目标的预和后操作。
你的方案
> 测试 > 预操作 > 运行脚本
#!/bin/bash
killall SimctlCLI # cleaning up hanging servers
set -e # fail fast
# start the server non-blocking from the checked out pod
${PODS_ROOT}/Simctl/bin/SimctlCLI start-server > /dev/null 2>&1 &
你的方案
> 测试 > 后操作 > 运行脚本
#!/bin/bash
set -e
killall SimctlCLI
📝 代码示例 Cocoapod
请参阅示例项目以获取深入代码示例 https://github.com/ctreffs/SwiftSimctlExamplePod
🙏 赞赏
Swift Simctl 的实现离不开这些棒的库
✍️ 作者
查看参与本项目的人员列表 https://github.com/ctreffs/SwiftSimctl/graphs/contributors
🔏 许可证
本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。