后续改进:把列表扫描阶段剩余的两个子进程也去掉了,200 个应用的 ListApplications 从 14.7s 降到约 94ms 。
1. mdls 改为直接读 bundle 。按当前界面语言依次读 Contents/Resources/<lproj>/InfoPlist.strings (中文:zh-Hans / zh_CN / zh ,英文:en / English / Base ),取 CFBundleDisplayName 或 CFBundleName ;没有本地化文件时回退 Info.plist 的同名字段,再回退目录名。
howett.net/plist 能解析 .strings 的 XML 、二进制和 OpenStep 文本三种格式,实测微信 / 熊掌记 / 飞书等中文名正确。副作用:原 mdls 返回的是 Finder 文件名(如 Alfred 5 ),现在优先 bundle 显示名( Alfred )。
2. sips 图标转换延迟到首次渲染。AppInfo 去掉 IconPNG ,新增 core.ApplicationIconPNG(ctx, appPath)。UI 层在 applicationImage 首次遇到某应用时标记 pending 并起 goroutine 转换,4 并发、单个 10s 超时,完成后通过 win.Update 写入图标缓存,期间显示头像占位。列表出现不再等图标。
累计效果( 200 个应用):
- 原始:>30s ,超时弹窗
- 保留部分结果 + 体积延迟 + ps 一次性:14.7s
- 再加 Info.plist 读名 + 图标延迟:约 94ms