Expo App Store Screenshots — Expo 应用商店截图
v0.2.0为任何 React Native / Expo 应用捕获和准备 App Store / Google Play 屏幕截图。通过深度链接驱动 iOS Simulator 和 Android 设备/模拟器,锁定状态栏到清洁的营销状态,捕获每个区域设置的标准屏幕集,并调整到商店目标尺寸。 当用户请求(重新)生成或刷新商店屏幕截图、添加新区域设置、添加新屏幕或将屏幕截图上传到 App Store Connect 或 Google Play 时使用。也可以触发相邻的短语,如“营销屏幕截图”、“商店列表屏幕截图”、“应用商店的屏幕捕获”,或当用户提到 `xcrun simctl`、`adb screencap` 或类似 `screenshots/<locale>/<device>/` 的路径时。
运行时依赖
安装命令
点击复制技能文档
App Store / Google Play 屏幕截图 一个用于营销屏幕截图的端到端 runbook,该截图将发布到 iOS App Store 和 Google Play。该技能不硬编码应用程序身份 —— 它从项目的 Expo 配置中发现深度链接方案 + iOS 包 ID + Android 包,并将其他所有内容作为参数。
所需工具 平台 需要 iOS Xcode CLI (xcrun simctl) Android Android 平台工具 (adb) 调整大小 ImageMagick 7+ (magick) 检测 jq 和 (可选) npx expo 用于 app.config.{ts,js} 项目 上传 Python 3.9+,具有 requests、pyjwt[crypto](App Store)和 google-auth(Play)
输出布局(约定) screenshots///NN--.png :BCP-47 标签 —— en-US、zh-CN、ja-JP 等 :iphone、ipad、android-phone、android-tablet NN:零填充的序号,以便文件在 Finder 和商店后台按相同顺序排序 :页面的 kebab-case 别名(sign-in、home、settings 等)
商店目标尺寸 设备 所需尺寸 备注 iphone 1284×2778 App Store 6.5" 显示屏。在 iPhone 16 Pro Max 模拟器(1320×2868)上捕获并调整大小。 ipad 2064×2752 App Store 13" 显示屏。iPad Pro 13" M4 原生捕获此尺寸。 android-phone 1440×3120 Google Play 手机(9:19.5)。Pixel 7+/8+/9 Pro 类设备原生捕获。对于其他目标,请查找当前的 Apple/Google 规范,并将大小传递给 assets/resize.sh。
脚本(所有脚本都位于 assets/ 目录下) 脚本 目的 assets/detect-app-config.sh 从 Expo 配置中发现 APP_SCHEME、IOS_BUNDLE_ID 和 ANDROID_PACKAGE。 assets/detect-routes.sh 遍历 Expo Router 应用程序树,并以 \t\t 格式打印每个路由。 assets/ios-status-bar.sh 锁定/清除 iOS 模拟器状态栏(9:41、充电、满电)。 assets/ios-capture.sh 捕获一个屏幕截图:openurl → settle → simctl io screenshot。 assets/android-status-bar.sh 进入/退出 Android 系统 UI 演示模式(清除时钟、电池、信号)。 assets/android-capture.sh 捕获一个屏幕截图:am start 深度链接 → settle → screencap + adb pull。 assets/resize.sh 批量调整 PNG 图像目录的大小到目标宽度和高度,幂等。 assets/write-summary.sh 将 summary.md 写入设备文件夹(型号、操作系统、分辨率、屏幕列表)。 assets/upload-app-store.py 通过 API 将一个(locale、设备)文件夹上传到 App Store Connect。 assets/upload-play-store.py 通过 Publisher API 将一个(locale、图像类型)文件夹上传到 Google Play。
每个脚本都接受 -h 样式的用法输入。阅读文件头以获取完整的参数列表。
如何驱动技能 捕获运行分为三个阶段:第一个阶段捕获未认证的屏幕(登录、注册等),然后您手动在所有设备上登录,然后第二个阶段捕获需要认证的屏幕。这避免了在自动化过程中重复登录流程,并保持两个状态的清洁。
脚本路径在下面的 bash 块中是相对于技能根目录(assets/...)编写的。在运行之前,请将其解析为您的代理安装技能的位置。
预飞行 在目标模拟器/设备上构建和安装应用程序(发布样式的构建看起来最好)。验证已安装的构建是最新的。过时的开发客户端或几周前缓存的 .app/.apk 将崩溃或默默地渲染旧 UI,您不会注意到,直到截图发布。
冷启动应用程序并在捕获之前通过视觉确认它与今天的源代码匹配。如果不匹配,请重新构建和重新安装(对于 Expo:pnpm --filter prebuild --clean && pnpm --filter ios && pnpm --filter android,或者您自己的管道)。
在每个设备上以已注销状态开始。如果演示帐户已经登录,请先注销 —— 第一个阶段需要未认证的屏幕。准备好演示帐户凭据。您将在第一个阶段和第二个阶段之间手动登录。
将应用程序内语言设置为与您要捕获的 匹配(或依赖于系统语言,如果应用程序继承它)。如果模拟器无法运行应用程序,请回退到真实设备。
依赖于本机模块的应用程序 Expo Go 不提供的应用程序(BLE、自定义 Stripe SDK、推送、某些摄像头/支付管道)通常不会在 Expo Go 中运行,也可能不会在新构建的模拟器上运行。计划:
Android —— adb 目标模拟器和物理手机相同;此处的每个脚本都可以通过运行 adb devices 来针对插入的 Pixel/Galaxy 等设备。
iOS —— xcrun simctl 仅适用于模拟器。对于真实的 iPhone,路径是由 Xcode 驱动的(xcrun devicectl device install,Xcode 用于深度链接启动,xcrun devicectl device screenshot 在 Xcode 16+ 上)。
首选重新构建开发客户端或将发布的 .app 安装到模拟器。
发现应用程序身份 eval "$(bash assets/detect-app-config.sh path/to/app)" echo "$APP_SCHEME $ANDROID_PACKAGE"
如果检测失败(自定义配置插件、monorepo 怪癖),请手动设置三个环境变量。
分割