多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

simslim配置实战:--except、--keep与JSON Profile如何定制你的iOS模拟器瘦身方案

simslim配置实战:--except、--keep与JSON Profile如何定制你的iOS模拟器瘦身方案 simslim配置实战--except、--keep与JSON Profile如何定制你的iOS模拟器瘦身方案【免费下载链接】simslimRun more iOS simulators on one Mac by disabling background daemons a simulator doesnt need项目地址: https://gitcode.com/gh_mirrors/si/simslimsimslim 是一个免费的 iOS 模拟器瘦身工具通过关闭模拟器里你根本用不到的约 170 个后台守护进程Siri、Spotlight、iCloud 同步、相册分析等把单台模拟器内存从约 4.0 GB 压到 0.9 GB让一台 Mac 能同时跑更多 iOS 模拟器。默认瘦身是全关但实际项目中你总得保留几个服务simslim 用三个配置旋钮来满足——--except保留整个功能分类、--keep保留单个守护进程、JSON Profile 文件把整套方案固化下来反复复用。本文手把手带你把瘦身方案定制到正好合适。先看效果一台 Mac 上的 19 台 iOS 模拟器如上图19 台瘦身后的 iOS 模拟器在 MobAI 中稳定运行。而配置--except、--keep和 Profile 的目的正是让每台模拟器只付出自己真正需要的内存代价。瘦身分类速览15 个分类与各自省下的内存simslim 把可停用的守护进程分成 15 个分类定义在 profiles.go 中完整内存对照表见 docs/category-memory.md。挑选时最需要记住的几个分类 ID说明保留它大约多占内存widgets小组件、锁屏海报、Live Activities~675 MB最大头siriSiri 与 Apple Intelligence~265 MBsearchSpotlight 与设置内搜索~50 MBstoreApp Store、推送通知、StoreKit~80 MBwebSafari 同步、通用链接~50 MBpim邮件、日历、通讯录~80 MB 注意内存数值是 iOS 26.5 净启动中位数不可简单相加。想看某分类包含哪些守护进程运行simslim profiles id。一键保留整个分类--except用法--except接受逗号分隔的分类 ID作用是这些分类完全不关。最常见的场景——你的测试需要 Spotlight 搜索simslim on udid --except search分类 ID 写错了不会静默忽略而是直接报错并提示你去查simslim profiles拼写错误当场暴露。校验逻辑在 profile_file.go 的BuildProfile中实现。如果测试需要通讯录、日历选择器也可以一次保留多个分类simslim on udid --except pim,search精确保留单个服务--keep用法有些需求细到单个守护进程launchd label级别。比如 UI 测试要验证推送通知只需要保留com.apple.apsd而整个store分类里的 App Store、StoreKit 等照样关闭simslim on udid --keep com.apple.apsd典型的--keep场景与常用 label测试场景建议保留推送通知com.apple.apsd在store分类中通用链接 Universal Linkscom.apple.swcd在web分类中完整 StoreKit 内购整个store分类用--except store保留完之后如何确认用doctor命令做 CI 预检它按功能而非分类检查所需守护进程是否都在运行坏了就返回非零退出码清单定义见 features.gosimslim doctor udid --requires push,storekit,universal-links输出类似BROKEN storekit — com.apple.storekitd disabled一眼定位问题。可复用方案JSON Profile 文件配置命令行参数适合临时调整而团队和 CI 需要可提交、可校验的方案。simslim 的 Profile 是一个极简的 JSON 文件except和keep两个字段与同名参数一一对应{ name: ci, description: UI test runs, except: [search, store], keep: [com.apple.apsd] }应用只需一条命令simslim on udid --profile ci.jsonProfile 机制的几个关键设计实现在 profile_file.go错字大声失败未知字段、未知分类 ID、任何分类都不管理的 label都会被拒绝解析拼错一个字母配置就应用不了不存在静默跑歪。单一事实来源--profile与--except/--keep不能混用避免参数互相打架文件说什么就是什么。多方案并存同一个项目里ci.json和dev.json可以瘦身得完全不同——CI 用更激进的方案本地开发保留搜索和推送。用 verify 防止配置悄悄漂移瘦身状态是每台模拟器自己的本地状态设备删除重建、换用新系统镜像的模拟器都会默默回到未瘦身状态没有任何报错。verify命令专门捕捉这种漂移可以写进 CI 或脚本里自动修复simslim verify udid --profile ci.json || simslim on udid --profile ci.jsonverify回答这台模拟器是否恰好处于我配置好的状态发现漂移时列出差异并以非零码退出后面的on是幂等的只补齐缺失的差量。不想手写 JSON试试 profile 交互式向导运行simslim profile ci.json可进入交互式构建器代码在 cmd/simslim/wizard.go先输入 Profile 名称和描述用方向键移动空格勾选要保留启用的整个分类没勾的都会被瘦身按→进入某个分类精细勾选要保留的单个守护进程每行还带用途说明a全选、n全不选、回车保存指向目录即保存为名称.json省略路径则打印到 stdout。适合第一次摸清我的项目到底需要哪些服务勾完导出成 JSON 提交即可。三种方案选型建议场景推荐配置命令要点CI 批量跑测试JSON Profile verify 自动修复on --profile ci.json本地日常开发保留搜索on --except search推送/内购/链接专项测试精准保留on --keep com.apple.apsd等xcodebuild 并行测试克隆体自动监听 即启即瘦身watch --except web,store最后一个场景值得一提xcodebuild并行测试会临时克隆一批满配模拟器simslim watch会在它们开机瞬间自动按同一套--profile/--except/--keep配置瘦身省下的内存在整个测试运行期间一直有效。常见坑与排查清单参数互斥报错--profile与--except/--keep同时出现会直接报错二选一即可。分类 ID 写错unknown category seach之类的报错会明确提示参考simslim profiles。--keep的 label 不在白名单只能保留某个分类确实会关闭的守护进程核心工作服务如sharingd本来就不关无需保留。erase / 重建后变胖了属正常现象重跑simslim on或用verify || on兜底。旧系统版本iOS 17.x / 18.3 无法持久化瘦身需用on --no-reboot且每次开机后重跑status会提示这种情况。CI 机器慢simslim on默认 10 分钟总时限慢 runner 上加全局参数--boot-timeout 15m或设置SIMSLIM_BOOT_TIMEOUT环境变量。小结simslim 的定制体系只有三层由粗到细--except按分类放行、--keep按守护进程放行、JSON Profile 把整套方案文件化。配合verify防漂移和doctor做预检你可以为 CI、开发机、并行测试各自维护一份刚刚好的 iOS 模拟器瘦身方案——关得越多同一台 Mac 能并行跑的模拟器就越多。想深入了解分类内存测量方法可阅读 docs/category-memory.md完整命令一览见 README.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),仅供参考
返回列表