name: asc-app-create-ui description: 通过浏览器自动化创建一个新的 App Store Connect 应用记录。当没有公共 API 用于应用创建,你需要一个代理驱动新应用表单时使用。
ASC 应用创建(UI 自动化)
使用这个技能通过驱动网页UI来创建一个新的App Store Connect应用。 这是可选的、仅限本地的自动化,要求用户已登录。
前提条件
- 浏览器自动化工具可用(Playwright、Cursor浏览器MCP或等效工具)。
- 用户已登录到App Store Connect(或可以完成登录+双重认证)。
- Bundle ID 必须已在 Apple Developer 门户注册。
- 所需输入已知:
- 应用名称(最多30个字符)
- Bundle ID(必须存在且未被其他应用使用)
- SKU
- 平台(iOS、macOS、tvOS、visionOS)
- 主要语言
- 用户访问权限(完全访问或有限访问)
安全护栏
- 绝不导出或存储cookie。
- 仅使用可见的浏览器会话。
- 在点击“创建”之前暂停以进行最终确认(对于独立脚本)。
- 失败时不自动重试创建操作。
工作流程
1. 预检:注册 Bundle ID 并验证无现有应用
# 通过公共 API 注册 Bundle ID(如果尚未注册)
asc bundle-ids create --identifier "com.example.app" --name "我的应用" --platform IOS
# 确认尚无应用记录
asc apps list --bundle-id "com.example.app" --output json
2. 打开 App Store Connect
导航到 https://appstoreconnect.apple.com/apps 并确保用户已登录。
3. 打开新应用表单
“新应用”按钮(蓝色“+”图标)打开一个下拉菜单,而不是直接对话框。
- 点击“新应用”按钮打开下拉菜单。
- 点击下拉菜单内的“新应用”菜单项。
- 创建对话框/模态框出现。
4. 填写必填字段(按顺序)
平台(复选框)
平台是复选框(不是单选按钮)。点击所需平台的复选框:
- iOS、macOS、tvOS、visionOS
- 可以选择多个。
名称(文本输入)
- 标签:
名称 - 最多30个字符。
主要语言(选择/组合框)
- 标签:
主要语言 - 使用
select_option或等效方法,语言标签(例如,“英语(美国)”)。
Bundle ID(选择/组合框)
- 标签:
Bundle ID - 这是一个
<select>下拉菜单。选项在选择平台后异步加载。 - 等待下拉菜单完成加载(初始显示“加载中…”)。
- 通过匹配标签文本选择,包括名称和标识符:
“我的应用 - com.example.app”
SKU(文本输入)
- 标签:
SKU
用户访问权限(单选按钮)——必需
- 此字段是必需的。 创建按钮在未选择一个选项前保持禁用。
- 选项:
有限访问或完全访问。 - 这些是带有
<span>覆盖的自定义单选按钮。 - 已知问题: 基于可访问性的点击可能被覆盖
<span>拦截。 - 解决方法: 首先在单选元素上使用
scrollIntoView,然后直接点击单选引用。这可以绕过覆盖拦截。
5. 点击创建
- “创建”按钮在所有必填字段填写且用户访问权限选择前保持禁用。
- 点击后,按钮文本变为“创建中”以进行处理。
- 等待导航到新应用的页面(URL模式:
/apps/<APP_ID>/...)。
6. 通过 API 验证创建
asc apps get --id "APP_ID" --output json --pretty
# 或
asc apps list --bundle-id "com.example.app" --output json
7. 移交到创建后设置
asc app-setup info set --app "APP_ID" --primary-locale "en-US"
asc app-setup categories set --app "APP_ID" --primary GAMES
asc app-setup availability set --app "APP_ID" --territory "USA,GBR" --available true
已知 UI 自动化问题
“新应用”是下拉菜单,而非直接操作
首次点击打开一个包含“新应用”和“新应用捆绑包”的菜单。必须点击菜单项,而不仅仅是按钮。
用户访问权限单选按钮有 span 覆盖
苹果的自定义单选按钮用样式化的 <span> 元素包裹 <input type="radio">。直接基于引用的点击可能因“点击目标被拦截”而失败。修复方法:
- 将单选元素滚动到视图中(
scrollIntoView)。 - 直接点击单选引用(不通过偏移或标签点击)。
Bundle ID 下拉菜单异步加载
选择平台后,Bundle ID 下拉菜单显示“加载中…”并禁用。等待其变为启用并填充后再选择。
browser_fill 可能不会触发表单验证
苹果的 Ember.js 表单使用自定义变更处理程序。browser_fill(原子设置)可能不会触发验证。如果填写所有字段后创建按钮仍保持禁用:
- 在至少一个文本字段中慢慢重新输入值(逐字符)。
- 或点击字段,清除它,并慢慢输入。
故障处理
- 如果任何字段或按钮无法定位,停止并请求用户帮助。
- 捕获截图并报告最后已知步骤。
- 不自动重试创建点击。
- 失败时,用户应检查浏览器中的验证错误(红色轮廓、内联消息)。
注意事项
- 这个技能是对缺少公共 API 的变通。苹果的文档明确指出:“不要使用此 API 创建新应用;相反,在 App Store Connect 网站上创建新应用。”
- UI 选择器可能会在无通知的情况下改变。优先使用角色/标签/文本选择器而非 CSS。
- 唯一的手动步骤应该是登录。其他一切都可以由代理驱动。