关于 ios-simulator-browser
用于在应用内浏览器查看 iOS Simulator 页面和 SwiftUI 包预览的技能。它管理模拟器镜像,并通过截图提供验证证据;包代码修改可热重载到生成的预览宿主中。
主要功能
- 01在应用内浏览器镜像模拟器
- 02启动 SwiftUI 包预览
- 03热重载包预览修改
- 04筛选要显示的预览变体
- 05截取截图作为 QA 证据
适用场景
- 01检查 iOS Simulator 中的本地页面
- 02查看包中的 SwiftUI 预览
- 03验证源码修改后的预览更新
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ openai/ plugins --skill ios-simulator-browser安装后在 Claude Code 中输入/ios-simulator-browser确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlscripts/swiftui-preview-browser.mjsscripts/lib/xcode-project.mjsscripts/templates/FocusedPreviewApp.swiftFocusedPreviewHotReloadRuntime.swiftPreviewBrowserEntries.swift详细介绍
iOS 模拟器浏览器
浏览器工作流
-
从现有 iOS 构建/运行工作流中获取明确的模拟器 UDID,或使用
xcrun simctl list devices available获取。 -
在一个长期运行且固定到该模拟器的终端中启动
serve-sim。启动前,清理该模拟器对应的任何已跟踪旧辅助进程,并安装一个陷阱,以便在此终端退出时清理辅助进程:SIM="<simulator-udid>" cleanup_serve_sim() { npx --yes serve-sim@latest --kill "$SIM" >/dev/null 2>&1 || true } trap cleanup_serve_sim EXIT INT TERM HUP cleanup_serve_sim npx --yes serve-sim@latest "$SIM" -
在 Codex 应用内浏览器中打开
serve-sim打印的确切本地预览 URL。 -
报告成功前,先确认真实画面正在渲染。页面加载完成本身并不能证明模拟器流正常。
- 使用浏览器镜像期间,请保持终端运行。完成后,停止终端并等待其退出,以便触发陷阱。
- 如果终端已消失或未正常退出,请在为该模拟器启动另一个镜像前运行
npx --yes serve-sim@latest --kill "$SIM"。 - 切勿运行不带范围限定的
serve-sim --kill;其他线程可能正在使用不同模拟器的镜像。
SwiftUI 预览工作流
如果所需预览位于可导入的 Swift 包中,请使用捆绑的启动器。将其指向包清单,并选择要显示预览的目标。它会在用户源代码树之外生成一个临时宿主项目,在模拟器中安装并启动该宿主,同时监视包的修改。
node <skill-root>/scripts/swiftui-preview-browser.mjs \
/absolute/path/to/Package.swift \
--package-target "<target>" \
--device "<simulator-udid>"
- 默认启用监视模式。修改 Swift 包源文件后,启动器会重新构建生成的 dylib,并将其热替换到正在运行的宿主中,而无需重新启动应用。
- 生成的宿主会显示在所选 Swift Package 目标中发现的所有预览变体,并提供模拟器内页面控件。若只显示部分预览,请传入
--preview-filter <regex[, ...]>;该参数会匹配显示名称和代码标识符,例如StatusRowView_Previews。 - 启动器打印所选模拟器的 UDID 后,请为同一 UDID 启动
serve-sim,并在应用内浏览器中打开它打印的 URL。
支持范围
- 通过生成的宿主支持由 Swift Package 提供的
PreviewProvider和#Preview声明。 - 不要修改用户的
.xcodeproj、.xcworkspace、Package.swift、方案或构建设置来强行支持预览。
验证依据
对于浏览器或预览 QA,请截取一张显示模拟器画面的浏览器截图。对于热重载 QA,还需报告启动器输出的 hot reloaded package preview ... in pid ...,并展示编辑后发生变化的画面。
评论
支持 Markdown