ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

simslim watch实战:让xcodebuild并行测试的iOS模拟器克隆自动瘦身,CI提速必备

simslim watch实战:让xcodebuild并行测试的iOS模拟器克隆自动瘦身,CI提速必备 simslim watch实战让xcodebuild并行测试的iOS模拟器克隆自动瘦身CI提速必备【免费下载链接】simslimRun more iOS simulators on one Mac by disabling background daemons a simulator doesnt need项目地址: https://gitcode.com/gh_mirrors/si/simslimsimslim 是一个让单台 Mac 跑更多 iOS 模拟器的开源工具通过关闭模拟器用不到的后台守护进程把每个模拟器的内存占用砍掉约 4 倍。本文聚焦它的simslim watch命令——专为 xcodebuild 并行测试而生每个测试 worker 克隆出的全新模拟器一开机watch 就立即免重启瘦身让整个测试运行期都省下约 70% 的内存是 CI 提速的必备环节。为什么并行测试的克隆体没法提前瘦身用xcodebuild做并行测试时Xcode 会为每个 worker 动态克隆一台全新的 iOS 模拟器跑完再删掉克隆体是出厂默认stock状态自带约 180 个后台服务Siri、Spotlight 索引、iCloud 同步、照片分析……simctl clone不会继承瘦身时写入的禁用覆盖配置所以你想预先瘦身也没有可操作的对象结果就是几台 stock 模拟器同时开跑内存迅速吃紧共享 CI runner 上更是频繁出现 swap 抖动、构建变慢而一台 stock 模拟器在 M1 Pro 上开机后约占用 4.0 GB 内存258 个进程用 simslim 瘦身后只剩约 0.9 GB70 个进程。并行测试 worker 越多这笔差价就越值回票价。simslim watch 是什么开机即瘦身的自动哨兵watch正是补上这个缺口的命令它轮询设备集合每台模拟器一启动就立刻以 no-reboot 方式瘦身之后不再打扰直到它再次开机。一个在几分钟测试中开机几秒后被瘦身的克隆体会在剩余整个运行期保住省下的内存。simslim watch --except web,store xcodebuild test -scheme App -parallel-testing-enabled YES -parallel-testing-worker-count 4 ...第一条命令放后台运行、持续监听按 Ctrl-C 停止第二条正常执行你的并行测试。就这么两行。快速上手一条命令接入现有测试流程watch支持的全部参数见 cmd/simslim/app.go与on命令同源参数作用--profile ci.json应用 JSON 配置文件与--except/--keep互斥--except web,store保留指定分类完全启用如网页推送、StoreKit--keep com.apple.apsd保留某个具体守护进程--interval 3s扫描间隔默认 3 秒--set name额外的设备集合全局参数默认会扫描default和testing两个设备集合恰好覆盖 Xcode 并行测试常用的位置如果你的 Xcode 使用了自定义并行测试设备集把--set指过去即可。CI 场景推荐提交一份 JSON 配置文件如ci.json让每次运行的瘦身状态可复现、可审查{ name: ci, description: UI test runs, except: [search, store], keep: [com.apple.apsd] }simslim watch --profile ci.json xcodebuild test -scheme App -parallel-testing-enabled YES ...配置文件写法与校验规则详见 profile_file.go。它如何做到又快又稳3秒轮询 并发瘦身 自动重试核心逻辑在 watch.go 中值得了解三个设计点轮询发现默认每 3 秒扫描一次设备列表DefaultWatchInterval只处理状态为Booted的模拟器——克隆体一开机就会被捕获并发处理每台设备在独立 goroutine 中瘦身watch.go一台设备瘦身慢不会阻塞下一台克隆体被发现失败自动重试某次launchctl操作失败会被记录并在下一轮扫描重试不会让克隆体带着 stock 状态跑完整场测试测试结束克隆体被删除后自然退出观察范围另外在 iOS 18.5 之前的运行时上no-reboot 瘦身的效果随重启消失所以一台关机后又开机的模拟器会被 watch 再次瘦身——这一点有专门的单元测试覆盖watch_test.go。实测效果内存降 4 倍并行容量跟着翻倍单台模拟器、同一设备型号M1 Pro 16 GB 上的实测数据来自 README.mdStockSlim进程数25870内存phys_footprint4.0 GB0.9 GB也就是说同样的机器原本开 4 个并行 worker 就开始抖动瘦身后 12 台模拟器都能稳定运行。每类服务的内存估算方法与依据见 docs/category-memory.md。使用注意与常见问题哪些功能会受影响Spotlight 搜索、推送apsd、StoreKit、Universal Links 等依赖对应服务按需保留即可--except search,store或--keep com.apple.apsdCI 慢 runner 超时共享 runner 上如遇context deadline exceeded可用全局参数--boot-timeout 15m/--spawn-timeout 5m放宽验证瘦身是否生效simslim measure udid查看内存占用simslim verify udid --profile ci.json校验配置漂移测试跑完后无需收尾克隆体由 Xcode 自动删除你自己的模拟器则可用simslim off udid恢复出厂状态安装与更多命令见 README.md本地构建 CLI 可用make cliMakefile写在最后并行测试的瓶颈往往不是脚本本身而是每台克隆体默默吃掉的数 GB 内存。simslim watch用开机即瘦身的哨兵模式把这件事变成一行后台命令克隆体越多、测试越长省下的内存和时间就越多。想深入了解整体架构与安全边界可参考 CLAUDE.md 和磁盘清理说明 docs/disk-cleanup.md。【免费下载链接】simslimRun more iOS simulators on one Mac by disabling background daemons a simulator doesnt need项目地址: https://gitcode.com/gh_mirrors/si/simslim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表