验收要按唯一标识选中实例,不能按名字

**跑的是刚构建的新 binary,却用应用名去激活和截图(`osascript tell application "Mewmo"` / `pgrep -x mewmo`),Launch Services 按名字解析,命中了 `/Applications/mewmo.app`(旧版、另一个 bundle id)—— 于是"验收新 UI"实际看的是旧界面。名字不是身份,唯一标识才是。**

一、现象与根因

  • 构建产物在临时 DerivedData 里,安装目录里是旧版本,两者应用名相同、bundle id 不同。
  • 按名字选进程(应用名、进程名、bundle 显示名)时,命中的是系统解析顺序里的第一个,不是你要验的那个。
  • 更危险的是:它不报错。旧版只是"长得不一样",于是结论可能是"新 UI 没生效",也可能是"通过"(把旧版截图当验收证据)。

二、做法

  1. 启动:临时 DerivedData + 唯一 PRODUCT_BUNDLE_IDENTIFIER,直接启动绝对路径的 binary,不走 open -a/应用名。
  2. 激活与截图:按该进程的精确 PID(窗口截图按精确 window id,如 screencapture -l <windowID>),不按应用名/pgrep 模糊匹配。
  3. 判断画面前:先核对 executable path / bundle id / PID 三者一致,再看画面。
  4. 多档位重复:深浅主题、compact/regular/wide 三档窗口,每一档都要重新走这套精确选择。
  5. 若确实拿不到可裁剪的本任务窗口,不拿旧版截图顶替,如实记为未验证。

三、可迁移

任何"选中一个实例"的动作——杀进程、截图、连服务、读日志——凡是用名字或模糊匹配(pgrep/pkill/tell application/默认端口)的,都可能命中另一个同名的旧实例。验收证据里必须带唯一标识(PID / bundle id / 绝对路径 / window id),否则证据无法证明它对应的是被验收的那一份。

相关