simslim深度解析:launchd白名单与delta机制,一次性关闭170个iOS后台守护进程
simslim深度解析launchd白名单与delta机制一次性关闭170个iOS后台守护进程【免费下载链接】simslimRun more iOS simulators on one Mac by disabling background daemons a simulator doesnt need项目地址: https://gitcode.com/gh_mirrors/si/simslimSimSlim 精简后的模拟器在同屏批量运行左侧为设备列表一台Mac到底能塞下几台iOS模拟器做 iOS 开发的同学都有体会一台新启动的 iOS 模拟器会拉起约180 个后台服务——Siri、Spotlight 索引、照片分析、News、iCloud 同步……跑 UI 测试或 CI 时它们一个都用不上却实打实地吃掉约 4 GB 内存。simslim是一个 Go 编写的命令行工具附赠一个 SwiftUI 桌面 App它通过关闭模拟器里开发用不到的后台守护进程把每台模拟器的内存压缩到约 1/4精简前精简后进程数25870内存phys_footprint4.0 GB0.9 GB同一台 16 GB 的 M1 Pro 上从开 5 台就开始交换内存变成满屏都是模拟器。这篇文章深入 simslim 的两个核心机制——launchd 白名单与delta 差量讲清楚它如何一次性、安全地关掉 170 个后台守护进程。白名单机制只许动这170个标签simslim 的全部可操作范围由一份硬编码白名单定义见 profiles.go。它把 launchd 守护进程标签按用户可感知的功能分成15 个类别Siri、Spotlight、iCloud、推送、照片、健康、遥测……每个标签就是一个com.apple.xxxd形式的 daemon 名。白名单中的每个类别都附带保留它会占多少内存的实测估值白名单有三层设计这是理解一切安全性的前提SlimmableSet()15 个类别所有标签的去重并集约 170 个——一个标签可以属于多个类别比如支付面板相关的 daemon 同时出现在store和icloud里managedSet()在可精简集合之外再并入各类别声明的AlwaysEnabled兼容服务如 com.apple.sharingd——系统共享面板依赖它。这些标签只允许被修回启用绝不允许被禁用禁区清单测试文件 profiles_test.go 维护了一份forbiddenLabels断言任何一关就把模拟器卡死的 daemon 永远不能出现在白名单里。一句话白名单之外的标签simslim 一个字节都不会碰你的 Mac 本体更不会被触碰——所有操作都通过simctl spawn打进你指定的那台模拟器内部。delta机制只改差异从不重启空气白名单回答了能动谁delta() 回答要动谁。它的逻辑非常干净toDisable 期望禁用 ∩ 白名单 − 当前已禁用 该关还没关的 toEnable 当前已禁用 ∩ 白名单 − 期望禁用 该开却被关的两个关键性质范围被白名单锁死不在managedSet()里的标签无论当前是什么状态直接忽略——这是绝不越权的代码级保证空 delta 零操作如果当前状态已经等于期望状态delta返回空整个命令只花一次读取就结束不执行任何launchctl调用也不重启。这就是simslim on幂等的原因。两条落地路径逐条launchctl还是直接改写存储在线路径8 并发池 3 轮重试最朴素的做法是启动模拟器对每个标签执行一次simctl spawn launchctl disable。170 个标签串行跑下来约2 分 14 秒。applyDelta() 的优化是iOS 模拟器内部没有 shell运行时的bin里只有df和launchctl无法用一条脚本批量下发于是用一个 8 个 worker 的并发池让simctl spawn的启动延迟互相重叠配合每轮最多 3 次遍历、单次调用 2 分钟超时冷启动后 launchd 可能卡顿失败的标签下一轮重试。170 个标签从 2 分 14 秒压到38 秒。离线快路径绕过全部 launchctl 调用真正让 simslim 快一个数量级的是一个未被公开文档记录的 CoreSimulator 细节每台模拟器的launchd_sim其实是Mac 宿主上的进程它的禁用覆盖存储并不在设备数据目录里而是在 disabled_store.go 指到的这个位置/private/var/tmp/com.apple.CoreSimulator.SimDevice.UDID/disabled.plistlaunchd_sim启动时会读取这个 plist。于是 ensureOffline() 的做法是直接读取该 plist与期望状态算delta把差异合并写回原子写入临时文件 renamelaunchd_sim永远读不到写一半的文件合并而非覆盖保留 runtime 自己写的显式启用项启动模拟器一次——开机即精简。效果iPhone 17 Pro / iOS 26.5 上首次精简从 2 分 14 秒降到33 秒几乎全是启动耗时对一台已开机、本来就要重启的模拟器精简全程只需17 秒。而针对已开机设备的流程是先读实时状态 → delta 为空就返回 → 不为空就先把它欠着的那次关机提前付掉转成离线路径。这里有个值得学习的工程态度这个 plist 属于未公开细节所以启动后一定会用launchctl print-disabled读回验证见 readDisabled而不是相信写入。任何不生效的情况都会退回launchctl路径存储出问题永远不会以命令失败的形式暴露给用户。完整流程走查一次 simslim on 发生了什么ensure() 是整个流程的中枢simslim on udid --except search # 精简但保留 Spotlight simslim on udid --keep com.apple.apsd # 只豁免单个推送守护进程 simslim status udid # 查看受管标签状态 simslim measure udid # 实测内存占用确认 iOS 版本 ≥ 18.5更早的版本不持久化禁用覆盖会明确报错并指路--no-reboot离线路径写disabled.plist→ 启动一次 → 读回验证读回不符 → 自动回退在线路径8 并发 重试重启后再读回有丢失就报错绝不虚报成功。安全模型为什么敢让它直接动 launchdsimslim 的安全边界可以总结成一张表设计保护对象白名单 禁区测试系统核心 daemon、你 Mac 的宿主环境delta双侧限定managedSet()非管理标签即使已禁用也不碰离线存储合并而非覆盖runtime 自己的显式启用项启动后强制读回未公开机制失效时的静默错误erase/off随时可回到标准状态你的实验可逆顺带一提verify命令专门对付状态悄悄漂移删机重建、换 runtime 都会让模拟器无声无息地回到臃肿状态simslim verify udid --profile ci.json能对比出偏差并以非零码退出配合一行|| simslim on ...就能在 CI 里自动修复。代价清单哪些功能会失效精简是有意的取舍。按 README 的说明值得知道的有search类别Spotlight 和设置内搜索搜不到东西store类别推送通知apsd和 StoreKit 测试失效web类别Universal Links 失效swcd联系人/照片/日历选择器可能依赖各自类别的服务。用--except 类别或--keep 标签精调即可simslim profiles可查看全部类别与每个 daemon 的说明文案来自 service_descriptions.go。源码地图想深入该读哪些文件文件职责profiles.go15 个类别的 launchd 白名单、delta()差量计算slim.goensure()中枢与ensureOffline()离线快路径disabled_store.go离线disabled.plist的解析与原子合并写入simctl.go唯一的xcrun simctl封装、8 并发applyDeltafeatures.go更细粒度的功能目录供doctor做 CI 预检docs/category-memory.md各类别内存估值的测量方法核心思路回顾白名单圈出能动的 170 个标签delta 只输出该动的差异离线存储把逐条下发变成一次写入 一次启动读回验证兜住一切未公开机制的不确定性。四步走完一台模拟器的内存从 4 GB 掉到 0.9 GB——而这就是 simslim 敢在一台 Mac 上同时开 19 台模拟器的底气。【免费下载链接】simslimRun more iOS simulators on one Mac by disabling background daemons a simulator doesnt need项目地址: https://gitcode.com/gh_mirrors/si/simslim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

mcp2cli智能排序揭秘:按使用频率自动排列工具,--list令牌成本直降98%

mcp2cli智能排序揭秘:按使用频率自动排列工具,--list令牌成本直降98%

mcp2cli智能排序揭秘:按使用频率自动排列工具,--list令牌成本直降98% 【免费下载链接】mcp2cli Turn any MCP, OpenAPI, or GraphQL server into a CLI — at runtime, with zero codegen 项目地址: https://gitcode.com/gh_mirrors/mc/mcp2cli m…

2026/10/4 4:28:18 阅读更多 →
虚拟机网速从 400M 提升到 2000M:一次 QEMU 网卡模型排查与优化复盘

虚拟机网速从 400M 提升到 2000M:一次 QEMU 网卡模型排查与优化复盘

NAS 上的 Windows 11 虚拟机,宿主机万兆网口实测能跑 2000M,虚拟机却只有 400M。根因不在交换机、不在桥接配置,而在虚拟机的网卡模型——原网卡是 QEMU 对 Intel 82540EM 的纯软件模拟实现(e1000),每个数据包都要靠 CPU 逐位模拟收发,400M 附近就是它的天花板。将网卡替…

2026/10/4 4:28:18 阅读更多 →
MRAM与PIC18F57Q43的工业存储方案:掉电不丢数据

MRAM与PIC18F57Q43的工业存储方案:掉电不丢数据

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 4:28:18 阅读更多 →

最新新闻

Figma Console MCP无障碍审计实战:14项WCAG设计检查+组件记分卡+axe-core 104条代码规则

Figma Console MCP无障碍审计实战:14项WCAG设计检查+组件记分卡+axe-core 104条代码规则

Figma Console MCP无障碍审计实战:14项WCAG设计检查组件记分卡axe-core 104条代码规则 【免费下载链接】figma-console-mcp Your design system as an API. Connect AI to Figma for extraction, creation, and debugging. 项目地址: https://gitcode.com/gh_mirr…

2026/10/4 5:07:40 阅读更多 →
校园社团小程序云开发实战:从选型到上线,扔掉服务器采购单

校园社团小程序云开发实战:从选型到上线,扔掉服务器采购单

简介:这份资源是面向校园社团运营者与小程序开发学习者的完整项目源码,基于腾讯小程序云开发方案实现,无需自备服务器和域名即可部署运行。功能覆盖社团通知、社团简介、社团福利、社团章程、社团招新以及活动报名预约等核心场景,…

2026/10/4 5:07:40 阅读更多 →
改写后意思没变吗?yomiyasu AI 日语精修 diff 工具自动校验机制完整指南

改写后意思没变吗?yomiyasu AI 日语精修 diff 工具自动校验机制完整指南

改写后意思没变吗?yomiyasu AI 日语精修 diff 工具自动校验机制完整指南 【免费下载链接】yomiyasu AI生成の日本語を自然な日本語へ推敲するAgent Skill / Agent Skill for Refining AI-Generated Japanese into Natural Japanese 项目地址: https://gitcode.com…

2026/10/4 5:07:40 阅读更多 →
盐城公考培训哪家好?2026 盐城公考机构实测对比与选择指南

盐城公考培训哪家好?2026 盐城公考机构实测对比与选择指南

写在前面:为什么"盐城公考培训哪家好"没有标准答案每年省考、国考季,盐城考生问得最多的一句话就是:盐城公考培训哪家好?这个问题没有"唯一正确"的答案,因为不同基础的考生、不同备考阶段、不同预…

2026/10/4 5:07:40 阅读更多 →
把五万条失败记录做成错题本,原本放弃的任务通过率飙了三成

把五万条失败记录做成错题本,原本放弃的任务通过率飙了三成

把五万条失败记录做成错题本,原本放弃的任务通过率飙了三成 如果一个刚上岗的实习生把事情搞砸了,聪明的师傅绝不会只甩过去一句冷冰冰的「不合格,重来」,而是会停下来问两句话:你究竟在哪一步拐错了弯?如果…

2026/10/4 5:07:40 阅读更多 →
MATLAB findpeaks 峰值检测全解:从原理到实战参数配置

MATLAB findpeaks 峰值检测全解:从原理到实战参数配置

名字叫 findpeaks 的这个函数,我前后用了快六年,第一次真正把它研究明白,却是被一段满是毛刺的心电信号逼的。导师丢给我一组数据,说“把 R 波全找出来”,我盯着波形上那些高高低低的山头,下意识就想找“高…

2026/10/4 5:06:39 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →