iOS 真机 JS 注入 · 汇报用一页纸

iOS 妙记容器 common.getSettings 不响应 · 证据链

一页讲清:为什么难、怎么打通、怎么证明"是容器的锅"。一页总览,可直接用于汇报或团队文档。

① 背景与结论

结论先行:iOS 上妙记的网页容器(实时总结、尾窗)未响应 common.getSettings 原生接口—— 桥对象存在、消息发送成功,但回调永不触发。web 侧只能超时兜底。诉求:客户端补齐该接口,对齐视频会议容器行为。

② 为什么难(这不是"打开控制台"那么简单)

iOS 17 改了真机调试的底层通道 开发者服务从 lockdownd 迁到 RemoteXPC:要先建 IPv6 隧道、过更严配对加密,老式直连一律作废。

③ 常规工具为什么全废(两类死因)

A
老工具没跟上架构 iwdp 依赖已废弃的 lockdownd 门 → 直接连不上。
B
新工具不成熟 / 链路太脆 webinspector cdp 自身 asyncio bug;inspector_session 特权隧道会话拉不稳、吊死。

④ 最终方案:js-shell --userspace

自带进程内轻隧道 纯 Python 网络栈(PyTCP),无 root、无内核网卡、无单独守护进程;隧道自用自洽,最少环节最稳。
苹果原生 WebKit Inspector 协议送 JS 天然兼容 iOS 17 新架构;只需设备开 Web Inspector。

工程细节(可略):需 pty 伪终端模拟真终端、方向键字符模拟选页、动手前 opened-tabs 备份 URL 防导航翻车。已固化为可复用驱动脚本。

⑤ 决定性证据:两步走探针 + 三方对照

探针设计(跨会话解耦发/读)

第一枪:发 common.getSettings + 埋信箱 window.__PROBE_R__={state:'waiting'},回调命中改 done; 第二枪隔几秒读信箱。独立会话,不存在"没等够"。

容器(同一探针/账号/设备)结果
飞书视频会议·会中 · iOS✓ 秒回 done(证明探针本身对)
妙记 · Android(同接口)✓ 约 8ms 回
妙记 · iOS✕ 永远 waiting

逻辑:三方唯一变量是"哪个容器",其余全相同 → 排除 web 侧嫌疑 → 锁定妙记 iOS 容器未注册该接口

一句话结论

"同一探针在视频会议容器秒回、妙记 iOS 永不回、妙记 Android 8ms 回——三方对照排除 web 侧问题, 实锤妙记 iOS 容器没接 common.getSettings。诉求:客户端补齐,对齐视频会议容器。影响:目前主要影响测试用的版本标签(fail-safe 不显示、线上无感),但后续按 settings 做开关都走这条桥,建议一并补。"


一手记录:飞书「版本 Tag 真机验证全流程与调试脚本」节点 Z7zGwGZJziKqOrkfDzGcF2vpnJf