Skip to content

feat(desktop): add iOS Simulator panel auto-open preference - #3913

Merged
MagicLizi merged 1 commit into
makecindy:mainfrom
horizon554:codex/ios-simulator-auto-open-panel
Sep 7, 2026
Merged

feat(desktop): add iOS Simulator panel auto-open preference#3913
MagicLizi merged 1 commit into
makecindy:mainfrom
horizon554:codex/ios-simulator-auto-open-panel

Conversation

@horizon554

Copy link
Copy Markdown
Contributor

这次改了什么

摘要

在 iOS 模拟器插件详情页增加 Host 管理的“自动打开内置模拟器面板”开关,默认开启。关闭后,start_instancelaunch_app 仍照常执行,只是不再自动展开 Cindy 右侧模拟器面板;用户仍可手动打开面板,设备创建、所有权、WDA、输入、截图等能力均不受影响。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:iOS 模拟器面板展示偏好
  • 本 PR 包含:owner-scoped 本地偏好存储、受信 Renderer IPC、插件详情页开关、start_instance / launch_app 自动聚焦门禁、五语文案和回归测试。
  • 明确不包含:模拟器获取/创建/attach/所有权策略、外部 Simulator.app 路由、插件 manifest 或插件仓内容调整。
  • 用户可见变化:iOS 模拟器插件详情页新增“自动打开内置模拟器面板”开关,默认开启。
  • 是否存在 breaking change:无。

UI 变化

  • macOS / Desktop:在 iOS 模拟器插件详情页的“配置”区域增加紧凑设置卡片和 Switch。已在 CN 隔离实例的深色模式中手工验证。
  • 引用的设计规范:
    • docs/design-rules/DESIGN.md §2 Color Palette & Roles、§10 Theme System & Token Reference:颜色使用现有语义 token,支持 Light / Dark,不增加裸颜色。
    • DESIGN.md §3 Typography Rules、§4 Cards & Containers / Inputs & Forms、§5 Layout Principles:复用既有字号阶梯、圆角卡片、间距和 Switch primitive。
    • DESIGN.md §11 Voice & Content:标题描述动作,说明关闭后的行为边界;同步 zh-CN / zh-TW / en / ja / ko。

怎么验证的

自动验证

XDT_UNIT_TEST_SHARD=1/2 pnpm test:unit:related
结果:通过;包括 Desktop、Mobile 与全部 required workspace 的第 1/2 分片。

XDT_UNIT_TEST_SHARD=2/2 pnpm test:unit:related
结果:通过;包括 Desktop、Mobile 与全部 required workspace 的第 2/2 分片。两片合计覆盖完整单测集合。

pnpm --filter desktop run --if-present typecheck
结果:通过。

pnpm check:i18n-glossary
结果:通过;仅报告基线已有的 18 处 proposed 术语告警,无新增违规。

pnpm --filter desktop exec eslint <本次改动且无基线告警的 TS/TSX 文件>
结果:通过。

git diff --check
结果:通过。

node --test .tests/ios-simulator.test.mjs .tests/plugin-contract.test.mjs(插件仓)
结果:8/8 通过;插件仓保持零改动。

补充说明:未分片的全量门禁在 31,113 个 Desktop 用例并发运行时两次命中未改动的 deviceOp.test.ts 3 秒文件监听超时;该用例与同批另一个偶发用例单独复跑 106/106 通过。随后使用仓库/CI 已支持的两个顺序分片完整跑绿,未跳过覆盖,也未修改无关测试。

手工验证

  • macOS,当前 Cindy worktree 的隔离 CN 实例,iOS 26.4 / iPhone 17 Pro 测试设备。
  • 默认开启:执行 start_instance 后右侧内置模拟器面板自动打开。
  • 关闭开关并手动关闭右侧面板:复用同一任务实例再次执行 start_instance,操作成功且右侧面板未自动打开。
  • 外部 Simulator.app 可继续显示设备;设备生命周期与控制能力未发生变化。

未执行的验证

  • 未做 Light 模式实机目检;实现使用语义 token,Dark 模式已目检。
  • 未手工走 launch_app 的开关分支;Host 单测覆盖了开启时自动聚焦、关闭时不聚焦。
  • 扩大到三个含历史问题的大文件做整文件 ESLint 时仍会报告 upstream 已有的 11 条告警,均不在本次 diff 行;本 PR 未顺带修改这些基线问题。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:owner-scoped 本地展示偏好与 Host 面板自动聚焦行为。

影响与回滚

  • 影响范围:仅 Desktop Host 的 iOS 模拟器自动展示行为和插件详情 UI。偏好文件只保存一个布尔值,不包含凭证或设备数据。
  • 存量插件影响:无。未修改批准状态、指纹、manifest 校验、安装布局、包格式或 capability 契约;官方插件仓无需版本迁移。
  • 回滚 / 降级方式:回退本提交即可恢复 start_instance / launch_app 成功后始终请求打开内置面板;已写入的偏好文件会变为无害未读配置。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO
  • UI 改动已在「UI 变化」注明引用的设计规范章节(不涉及 UI 则跳过)
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档(本改动无需新增独立文档,UI 文案与测试已同步)
  • 已确认测试结果或说明未执行原因

Signed-off-by: JiangJiahao <jiangjiahao@xd.com>
@horizon554
horizon554 requested a review from a team as a code owner September 4, 2026 09:09
@greptile-apps

greptile-apps Bot commented Sep 4, 2026

Copy link
Copy Markdown

Greptile Summary

此 PR 为 Desktop 的 iOS Simulator 插件详情页增加 owner-scoped 的“自动打开内置模拟器面板”偏好,并将其接入 start_instancelaunch_app 成功后的自动聚焦流程。

  • 新增主进程偏好存储、参数校验和 owner 边界保护。
  • 通过受限 preload API 向 Renderer 暴露读取与更新操作。
  • 新增插件详情页 Switch,并补齐五种语言文案。
  • 保留手动打开面板、模拟器生命周期及其他控制能力的原有行为。
  • 增加存储、IPC、Host 门禁与 Renderer 交互测试。

Confidence Score: 5/5

未发现由本 PR 引入的可操作缺陷,当前实现看起来可以安全合并。

自动聚焦门禁覆盖了两个目标 Host 操作的全部成功路径,显式面板操作保持不受影响;偏好存储、IPC 和 Renderer 状态均具备相应的 owner 边界与失败保护。

Important Files Changed

Filename Overview
apps/desktop/src/main/mcp-integrations/ios-simulator-preferences.ts 新增具备默认值、规范化、原子写入和 owner scope 校验的模拟器展示偏好存储。
apps/desktop/src/main/maker-ipc/iosSimulatorHandlers.ts 新增受信偏好 IPC,并在异步操作前后校验 owner 边界及写入参数。
apps/desktop/src/main/mcp-integrations/ios-simulator.ts 将启动模拟器和启动 App 后的自动聚焦接入偏好门禁,同时保留显式聚焦路径。
apps/desktop/src/preload/preload.ts 通过窄化且类型化的 preload 方法向主 Renderer 暴露偏好读写能力。
apps/desktop/src/renderer/features/plugin/IOSSimulatorPreferences.tsx 新增带加载、乐观更新、失败回滚和重复提交保护的偏好 Switch。
apps/desktop/src/renderer/features/plugin/GhostPluginDetailView.tsx 在 iOS Simulator Host capability 的配置区域挂载新增偏好控件。

Sequence Diagram

sequenceDiagram
  participant U as 用户
  participant R as 插件详情 Renderer
  participant P as Preload
  participant M as Main IPC
  participant S as Owner-scoped 偏好存储
  participant H as iOS Simulator Host
  U->>R: 切换自动打开设置
  R->>P: setAutoOpenEmbeddedPanel(enabled)
  P->>M: 固定 IPC channel + boolean payload
  M->>M: 校验 sender、参数与 owner scope
  M->>S: 原子写入当前 owner 的偏好
  S-->>M: 返回规范化偏好
  M-->>R: 更新 Switch 状态
  H->>S: start_instance / launch_app 成功后读取偏好
  alt 自动打开已开启
    H->>R: 请求聚焦内置模拟器面板
  else 自动打开已关闭
    H-->>H: 保持面板当前状态
  end
Loading

Reviews (1): Last reviewed commit: "feat(desktop): add iOS Simulator panel a..." | Re-trigger Greptile

@MagicLizi MagicLizi added touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) awaiting-discussion 等待维护者讨论(review-pr) labels Sep 4, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

这个 PR 新增了 iOS 模拟器「自动打开内置模拟器面板」开关,属于面向用户的产品/UI 变化,需要维护者确认后才能继续合并。

请维护者直接在本 PR 上 Approve;如果要改,请 Request Changes。作者这边不用再催合并,球不在你这边。

讨论 issue:#3918

@MagicLizi

Copy link
Copy Markdown
Contributor

命中 UI 路径(apps/desktop/src/renderer/features/plugin/GhostPluginDetailView.tsx / apps/desktop/src/renderer/features/plugin/IOSSimulatorPreferences.tsx)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面(```html 代码块、.html 附件或在线预览链接),便于确认界面符合 DESIGN.md 设计规范

@horizon554

Copy link
Copy Markdown
Contributor Author

补充UI截图
image

@MagicLizi MagicLizi added awaiting-discussion 等待维护者讨论(review-pr) and removed awaiting-discussion 等待维护者讨论(review-pr) labels Sep 5, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

@horizon554 👋 这个 PR 现在在等维护者确认,确认之前流程不会合并它 —— 不是卡住了,也不是在等你再改一版(你推的改动流程都读到了,判的就是最新一版代码)。

  • 在拦的是:维护者确认门(产品 / UI 变更)。
  • 讨论 issue:维护者确认:#3913 iOS 模拟器面板自动打开偏好 #3918
  • 通过方式只有一个:维护者在本 PR 上 Approve。维护者觉得要改会直接 Request Changes,那时候球才回到你手里。
  • 这期间如果还有 review 意见没处理完、CI 没过,照常修就行,不影响这条等待。

这条是流程自动发的状态提醒(同一版代码只发一次),不用回复。

@MagicLizi MagicLizi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

同意

@MagicLizi MagicLizi added status:awaiting-author 等作者修改(review-pr 自动维护,仅展示) and removed awaiting-discussion 等待维护者讨论(review-pr) labels Sep 7, 2026
@MagicLizi
MagicLizi merged commit fe806e3 into makecindy:main Sep 7, 2026
11 checks passed
@MagicLizi MagicLizi removed the status:awaiting-author 等作者修改(review-pr 自动维护,仅展示) label Sep 7, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

合进主干了。iOS Simulator 面板现在能记住「启动实例后要不要自动打开」,默认开、详情页可关,手动 open-panel 不受影响。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants