应用市场游戏开发
发布错误参考
应用市场发布路径能返回的每一个错误码,带触发条件和到修复的链接。一步步的修复,见 修复一次发布失败。
| 码 | 触发 | 修复 |
|---|
invalid-repo | 你在发布弹窗里输入的仓库字段无法解析为 owner/name。仅手动发布 | 用 owner/name 或完整的 https://github.com/owner/name URL |
repo-not-found | 我们的清单拉取返回一个 404。你的仓库是私有的、缺失的、缺 caputchin-game topic、或在预期路径处没有 caputchin.json | 把仓库设为公开 + 加上 topic + 推一个清单 |
manifest-error | 你的 caputchin.json 没通过校验。详情字符串点名那个具体字段。见 manifest-error 子码 | 修详情点名的那个字段 |
bundle-fetch-failed | 由 entry 和/或 npm 钉住的包 URL 拉取不了、返回一个非 2xx、或超过 12MB | 核实包 URL 和大小 |
run-not-conforming | 可选的 run 工件的冒烟检查(带一个确定性的种子跑一次)没返回一个合规的裁定。你的游戏仍被列出,只是显示不可回放且无法设关卡 | 让你的模拟确定性 |
rate-limited | 过去 60 秒里来自你 IP 的发布请求太多 | 等 60 秒再重试 |
当你收到一个 manifest-error 时,详情字符串以那个失败的字段开头。用这张表找到对的修复。
| 详情里的字段 | 含义 | 修复 |
|---|
terms_accepted | 字段缺失或不是字面量 JSON 布尔 true | 读了提交条款之后把它设为 true |
license | 缺失、畸形、或点名一个批准清单之外的 SPDX 标识符 | 从批准清单里挑一个标识符 |
(root) | 这个 JSON 文件没解析为一个对象(你有一个顶层数组、字符串或 null) | 把它裹进 { ... } |
marketplace | marketplace 块存在但不是一个对象 | 要么把它做成一个对象,要么移除它(仅自托管的游戏省略这个块) |
marketplace.name / description / preview | 字段不是一个字符串 | 字符串化或移除 |
marketplace.author | 块存在但不是一个对象 | 用 { name?, url?, email? } 形状 |
marketplace.author.name / url | 子字段不是一个字符串 | 字符串化或移除 |
marketplace.author.email | 不是一个字符串 或 没通过邮件形状检查 | 修这个地址或移除这个字段 |
entry | 单一游戏既没有 entry 也没有 npm,或这个值含有穿越(../)、绝对斜杠、Windows 分隔符、查询字符串或空白 | 提供一个干净的相对路径 |
npm | 不是一个字符串,或没通过 npm-name 正则 | 用一个有效的 npm 包名 |
entry/npm+games | 在同一层级同时声明了 entry/npm 和 games | 挑一个:单一游戏用 entry/npm;集合包装器用 games |
entry/npm | 单一游戏两个都没有 | 加一个 |
games | 不是一个数组、含有非字符串条目、含有穿越/绝对路径、或含有 . / ./(那会自引用仓库根) | 修这个数组 |
games[i] | 一个具体的子路径无效 | 修那个条目 |
run / run.entry / run.modules[i].* | 可选的拆分 run 声明畸形 | 按模式修 |
只有 license 字段求值为这个清单上一个 SPDX 标识符的 caputchin.json 清单通过许可证关卡。具有约束力的版本见 应用市场提交条款第 4 节。
| SPDX ID | 名称 |
|---|
MIT | MIT License |
MIT-0 | MIT No Attribution |
Apache-2.0 | Apache License 2.0 |
BSD-2-Clause | BSD 2-Clause "Simplified" |
BSD-3-Clause | BSD 3-Clause "New" / "Revised" |
0BSD | BSD Zero Clause |
ISC | ISC License |
Zlib | zlib License |
Unlicense | The Unlicense (public-domain dedication) |
BSL-1.0 | Boost Software License 1.0 |
NCSA | University of Illinois / NCSA Open Source License |
PostgreSQL | PostgreSQL License |
Python-2.0 | Python License 2.0 |
PHP-3.01 | PHP License 3.01 |
Ruby | Ruby License |
TCL | Tcl/Tk License |
MS-PL | Microsoft Public License |
AFL-3.0 | Academic Free License 3.0 |
MulanPSL-2.0 | Mulan Permissive Software License v2 |
WTFPL | Do What The Fuck You Want To Public License |
| SPDX ID | 名称 |
|---|
MPL-2.0 | Mozilla Public License 2.0 |
MS-RL | Microsoft Reciprocal License |
| SPDX ID | 名称 |
|---|
CC0-1.0 | Creative Commons Zero v1.0 |
CC-BY-3.0 | Creative Commons Attribution 3.0 |
CC-BY-4.0 | Creative Commons Attribution 4.0 |
OFL-1.1 | SIL Open Font License 1.1 |
MIT:光秃秃的标识符;必须出现在上面。
MIT OR Apache-2.0:一个 OR 的任一分支必须出现在上面。
MIT AND CC-BY-4.0:一个 AND 的每个分支必须出现在上面。
Apache-2.0 WITH LLVM-exception:WITH 子句不被接受。
LGPL-2.1+:+(或更新)后缀不被接受。
| 类别 | 例子 | 为什么 |
|---|
| 强 copyleft | GPL-*、AGPL-* | 病毒式;AGPL 第 13 条的网络触发尤其尖锐,因为我们就是那个网络宿主。(GPL-2.0-only 只对由 Caputchin 发布的第一方游戏被接受,不对第三方提交。) |
| 带捆绑歧义的库 copyleft | LGPL-* | “传递这个库”对 JavaScript 和 WebAssembly 包读起来含义不明 |
| 资源上的相同方式共享 | CC-BY-SA-*、CC-BY-NC-*、CC-BY-ND-* | 相同方式共享会污染嵌入站点的集成;NC 排除了商业部署 |
| 源可得(非 OSI) | BUSL-1.1、SSPL-1.0、Elastic-2.0 | 使用领域限制、再分发限制,或两者 |
注意 BSL-1.0(Boost Software License)是宽松的且被接受;BUSL-1.1(Business Source License)不是。解析器逐字对着 SPDX 规范字符串比较,所以两者绝不冲突。