跳到正文
cccskills
免费在 GitHub 公开中文介绍

mobile-sim-verification

在 iOS 模拟器中操作真实应用,使用本地 API 或中继服务检查改动、连接故障与恢复、多语言和文字大小,并用截图或录屏记录结果。

原文查看原文说明

Verify apps/mobile behavior end-to-end on the iOS simulator against a local API and relay, with Maestro for input and a stand-in host instead of a second machine. Use when asked to verify, reproduce, screenshot, or edge-test a mobile change in the real app rather than in tests.

ParadevAI/Paradev星标 15,720(GitHub 15,720 + cccskills 0)

实测评分 未实测

查看安装方法

适用场景

  • 复现移动应用问题
  • 检查断连和恢复时的表现
  • 确认多语言和大字号显示
  • 录制启动时的短暂显示异常

中文介绍

功能

mobile-sim-verification 会在 iOS 模拟器中操作真实应用,检查改动是否按预期运行。它使用 Maestro 输入操作,并通过本地 API 或中继服务切换应用所处状态。也可以设置一台替代主机,无需第二台机器。检查结果可用截图或录屏留作证据。

适用场景

需要复现移动端界面问题,或检查正常联网以外的表现时,可以使用此技能。检查范围可包括冷启动、依赖服务停止及恢复、应用切到后台后再返回、状态快速变化、很长的名称、多种语言和最大字号。它还会检查请求仍在等待或已经失败时,界面是否错误显示为离线或空内容。启动时一闪而过的显示问题可以通过录屏调查。

使用示例

  • “请在真实应用中确认主机列表的改动。”
  • “检查中继停止和恢复时界面的表现。”
  • “录下启动时短暂出现的显示问题并调查。”

注意事项

需要目标项目的本地服务和开发版应用。在 Mac 上会使用 Xcode 和 simctl。没有 Mac 的环境可以使用 EAS 流程,但运行期间会产生费用。检查完成后需要恢复测试数据和显示设置。

本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。

文档检查

AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。

安全性发送数据、删除文件、执行命令等是否有说明
B部分不足会写入测试数据、修改凭据并停止进程;部分操作有清理说明。
安装难易度所需工具和 API 密钥是否少且有说明
C需确认需要本地服务、开发版应用和平台工具,但前提说明不完整。

不计入评分。 由 AI(OpenAI Codex)于 2026年10月29日 评估。仅供参考,安装前请同时查看原文。

如果您认为评估有误,请申请复核

请写明哪一项有误以及原因。无需登录。我们会对照 SKILL.md 重新评估,并在此处更新结果。

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

包含的文件(1)

  • SKILL.md7.4 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Mobile Simulator Verification

The mobile counterpart to cdp-verification. There is no CDP on a phone: input goes through Maestro, evidence comes from simctl screenshots and recordings, and state comes from the real local API and relay. "Rules" is what counts as valid evidence. "Mechanics" is how to get there. apps/mobile/scripts/e2e/host-states.sh is a working example.

Rules

  1. Use the real screen. Sign in and reach the screen the way a user does. A temporary preview route that mounts one component with fixed props is diagnostic support, and must be reported as such. It hides the header, the data hooks, loading states and navigation.

  2. Drive state through real services. Change what the app sees by changing the local API or relay (register a host, open or close its socket), not by seeding the query cache.

  3. Run the edge pass before reporting "tested". The main path is not the test. At minimum: cold start, a dependency down (relay or API stopped), recovery when it returns, app backgrounded and resumed, rapid state flapping, a very long name, one long-string locale (German) and one CJK locale, and the largest text size. Say which you ran and which you did not.

  4. Never show "unknown" as a negative. A query that is pending or failed has not said "offline", "empty" or "none". Check what the screen paints in both states; this is the most common mobile bug found by this process.

  5. Catch flashes with a recording. A screenshot taken after a sleep cannot show a state that lasts half a second. Record the launch and diff the frames.

  6. Attribute failures correctly. Before reporting that a check is red on main, confirm it in CI. A fresh worktree's mobile typecheck shows errors in unrelated packages that CI does not.

Mechanics

Services

Start each in a Paradev terminal so it outlives the tool call. --local is required; without it the command returns nothing.

superset terminals create --local --workspace "$SUPERSET_WORKSPACE_ID" --command "<cmd>"
  • API: cd apps/api && bun run dev. A 500 with password authentication failed means this worktree's Neon branch was deleted by the daily cleanup. Recreate it as .superset/lib/setup/steps.sh does and rewrite the three lines under # Workspace Database in .env.
  • Relay: run it in a loop. wrangler dev exits with an empty ✘ [ERROR] when a client aborts a request, which every app relaunch does. Durable Object state survives the restart.
    cd apps/relay && while true; do CI=1 WRANGLER_SEND_METRICS=false node_modules/.bin/wrangler dev \
      --port "$RELAY_PORT" --var NEXT_PUBLIC_API_URL:http://localhost:$API_PORT --local; sleep 1; done
    
  • Realtime: bun dev:realtime. It runs the Worker on this worktree's REALTIME_PORT and restarts it when it exits. Without it, the app falls back to polling and nudges go nowhere.
  • Metro: cd apps/mobile && CI=1 bunx expo start --dev-client --port 8081. CI=1 turns off file watching, so restart Metro after editing code. The first bundle after a dependency change takes minutes and the dev client gives up waiting: warm it first by fetching launchAsset.url from curl -H 'expo-platform: ios' localhost:8081.

App

  • A dev-client build must be installed on the simulator. Reuse one from DerivedData only if native dependencies have not changed since; otherwise bunx expo prebuild -p ios, then xcodebuild -workspace ios/Superset.xcworkspace -scheme Superset -configuration Debug -sdk iphonesimulator -derivedDataPath <scratch> and xcrun simctl install. JavaScript-only changes need no rebuild. ios/ is gitignored.
  • Silence the first-run developer menu: xcrun simctl spawn booted defaults write sh.superset.mobile EXDevMenuIsOnboardingFinished -bool YES.
  • Sign in: maestro test apps/mobile/.maestro/flows/sign-in.yml (JAVA_HOME=/opt/homebrew/opt/openjdk/libexec/openjdk.jdk/Contents/Home).
  • The dev account has no plan, so Home shows the paywall. Give its org a temporary one on this worktree's Neon branch, and delete the row afterwards. Confirm DATABASE_URL_UNPOOLED is the workspace branch first.
    insert into subscriptions (id, plan, reference_id, status, stripe_subscription_id, period_start, period_end, seats)
    values (gen_random_uuid(), 'pro', '<org id>', 'active', 'sub_temp_mobile_e2e', now(), now() + interval '2 days', 1);
    

Hosts without a second machine

apps/mobile/scripts/e2e/stand-in-host.ts registers a host through host.ensure, holds the relay control socket open to make it online, reads its presence, and deletes it through host.delete. It refuses to run against a non-local API. While online it receives the app's stream:dial tickets and answers none, so lists behind that host keep loading.

Evidence

xcrun simctl status_bar booted override --time "9:41" --batteryState charged --batteryLevel 100
xcrun simctl io booted screenshot shot.png
xcrun simctl io booted recordVideo --codec h264 launch.mov   # stop with SIGINT
ffmpeg -i launch.mov -vf fps=10 frames/f%03d.png
xcrun simctl spawn booted defaults write "Apple Global Domain" AppleLanguages -array de-DE   # then relaunch
xcrun simctl ui booted content_size extra-extra-extra-large

Count requests in the relay log to prove polling behavior (for example none while backgrounded). Reset the locale, text size and status bar, stop the services, and delete test hosts and the temporary plan when done.

EAS: no Mac (Linux, a cloud workspace)

apps/mobile/scripts/eas-dev.sh runs the dev client on an EAS cloud simulator; see .agents/skills/mobile-eas-dev/SKILL.md. The xcrun simctl steps above become agent-device commands, and the simulator reaches this box only through local egress.

  • App. The script installs the simulator build that matches this checkout's fingerprint and builds one only after a native change.
  • Ports. It forwards Metro, the API, the relay and realtime. A port that is not forwarded fails as a network error in the app; without the relay running, Home says it cannot check the host.
  • Input. agent-device snapshot -i, press, fill, screenshot. press and fill take --settle and print what changed. The dev-menu sheet covers the first screen: press Continue, then Close.
  • Request counts. /tmp/superset-eas-egress.log names each local port the simulator reached.
  • Cloud screens. The workspace's Neon branch is a copy of production, and cloud access is a PostHog flag on the email, so the dev account sees no cloud workspaces. Prefer a test account that has the flag. Use a real account only with its owner's approval: save its auth.accounts credential password, set a temporary hash (hashPassword from better-auth/crypto), and sign in with "Sign in with email (dev)". After the test, restore the hash and delete the sessions the test created.
  • Cleanup. eas simulator:stop from apps/mobile; the session bills while it runs and stops by itself after 15 idle minutes. Stop local processes by PID: pkill -f <pattern> also matches the shell that runs it.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

10x

免费有简介

检查 Superset 的使用情况,找出适合当前工作方式但尚未使用的功能,给出建议并介绍选项;用户选定后,可协助设置定时运行、并行工作区或共享任务等功能。

  • 查找尚未使用的 Superset 功能
  • 设置定时运行的智能体
  • 在多个工作区并行处理任务
ParadevAI/Paradev1.6万2026年10月29日 更新

automate

免费有简介

把重复任务配置为 Superset 自动化,整理智能体指令、定时或事件触发条件及运行工作区。经明确确认后创建设置,检查已保存的条件,并查看首次运行结果以调整指令。

  • 按日或按周运行任务
  • GitHub 新建拉取请求时启动任务
  • 收到 Slack 指定表情反应时触发
ParadevAI/Paradev1.6万2026年10月29日 更新

browser

免费有简介

通过 Superset 工作区的浏览器查看网页、点击、输入并检查截图或控制台信息,可用于预览运行中的网页应用、检查界面操作和表单流程。

  • 预览本地网页应用
  • 截取页面图像
  • 查看控制台错误
ParadevAI/Paradev1.6万2026年10月29日 更新

依据 Stripe 官方文档和 API 参数定义实现支付、订阅、发票及 Webhook 集成,涵盖产品选择、沙盒测试和事件处理,并通过 Webhook 判断支付与订阅状态。

  • 选择定期扣费产品
  • 实现 Checkout 或发票处理
  • 排查行为异常的 Stripe 集成
ParadevAI/Paradev1.6万2026年10月29日 更新

cdp-verification

免费有简介

通过 Chrome DevTools Protocol 操作正在运行的 Electron 桌面应用,复现界面问题并验证修改。按实际操作流程检查页面跳转,记录截图,并对照路由、滚动位置、焦点元素和保存状态等信息。

  • 在运行中的应用里复现界面问题
  • 检查修复后的页面行为
  • 验证包含页面跳转的操作流程
ParadevAI/Paradev1.6万2026年10月29日 更新

ci-triage

免费有简介

分析 GitHub Actions 失败日志,定位最早的有效错误,区分代码缺陷、环境问题、间歇性失败和原有故障,并对照基准分支说明失败与 PR 的关系及后续处理建议。

  • 调查 PR 检查失败原因
  • 区分不稳定测试与代码缺陷
  • 确认基准分支是否已有故障
ParadevAI/Paradev1.6万2026年10月29日 更新

查看 ParadevAI 的全部技能

报告此技能的问题