create-zleap-app 0.10.0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +24 -2
- package/lib/scaffold.js +10 -0
- package/package.json +4 -4
- package/skills/zleap-cloud-app/SKILL.md +6 -6
- package/skills/zleap-cloud-app/references/app-runtime.md +82 -75
- package/skills/zleap-cloud-app/references/cloud-functions.md +230 -43
- package/skills/zleap-cloud-app/references/console-database.md +8 -0
- package/skills/zleap-cloud-app/references/console-members.md +44 -30
- package/skills/zleap-cloud-app/references/limits.md +57 -56
- package/skills/zleap-cloud-app/references/manifest.md +36 -35
- package/skills/zleap-cloud-app/references/permissions.md +40 -47
- package/skills/zleap-cloud-app/references/sdk-database-files.md +116 -49
- package/skills/zleap-cloud-app/references/status-codes.md +126 -94
- package/skills/zleap-cloud-app/references/triggers.md +24 -24
- package/skills/zleap-cloud-app-release/SKILL.md +5 -2
- package/skills/zleap-cloud-app-release/references/app-center-install.md +64 -52
- package/skills/zleap-cloud-app-release/references/app-center-publish.md +118 -49
- package/skills/zleap-cloud-app-release/references/console-functions.md +12 -4
- package/skills/zleap-cloud-app-release/references/console-legacy-release.md +5 -2
- package/skills/zleap-cloud-app-release/references/console-members.md +44 -30
- package/skills/zleap-cloud-app-release/references/console-release.md +39 -28
- package/skills/zleap-cloud-app-release/references/console-workspace.md +32 -16
- package/skills/zleap-cloud-app-release/references/dev-to-production.md +330 -113
- package/skills/zleap-cloud-app-release/references/permissions.md +40 -47
- package/skills/zleap-cloud-app-release/references/status-codes.md +126 -94
- package/templates/react-ts/AGENTS.md +2 -2
- package/templates/react-ts/README.md +1 -1
- package/templates/react-ts/package.json +3 -0
- package/templates/react-ts/scripts/zleap.mjs +25 -3
- package/templates/react-ts/src/cloud/client.ts +2 -2
|
@@ -55,19 +55,19 @@
|
|
|
55
55
|
|
|
56
56
|
### 字段说明
|
|
57
57
|
|
|
58
|
-
| 字段
|
|
59
|
-
|
|
|
60
|
-
| `id`
|
|
61
|
-
| `cron`
|
|
62
|
-
| `timezone`
|
|
63
|
-
| `event`
|
|
64
|
-
| `capability`
|
|
65
|
-
| `data`
|
|
66
|
-
| `description`
|
|
67
|
-
| `enabled`
|
|
68
|
-
| `user_configurable` |
|
|
69
|
-
| `overlap`
|
|
70
|
-
| `misfire`
|
|
58
|
+
| 字段 | 必填 | 说明 |
|
|
59
|
+
| ------------------- | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
60
|
+
| `id` | ✅ | 触发器标识,控制台启用时按它找到这条声明。只能用小写字母、数字、下划线,小写字母开头,≤64(`^[a-z][a-z0-9_]{0,63}$`),**不能含 `-`**:上传时不检查,但启用时会被拒 |
|
|
61
|
+
| `cron` | 定时 | 五段 cron 表达式 |
|
|
62
|
+
| `timezone` | 定时 | IANA 时区名,如 `Asia/Shanghai` |
|
|
63
|
+
| `event` | 事件 | 事件名称 |
|
|
64
|
+
| `capability` | ✅ | 要调用的能力 ID |
|
|
65
|
+
| `data` | | 传给能力的输入,**≤8 KiB** |
|
|
66
|
+
| `description` | | 说明文字 |
|
|
67
|
+
| `enabled` | | 初始值,实际由控制台管理 |
|
|
68
|
+
| `user_configurable` | | `true` 时线上(生产环境)的**每个使用者**都能自己开关这个任务,见下文[线上定时任务](#线上定时任务-使用者自己开关);不写或 `false` 时只在开发环境由开发者使用。只能是布尔值 |
|
|
69
|
+
| `overlap` | | 可省略;写了只能是 `"forbid"` |
|
|
70
|
+
| `misfire` | | 可省略;写了只能是 `"skip"` |
|
|
71
71
|
|
|
72
72
|
`scheduled` 和 `events` 各**最多 32 个**。
|
|
73
73
|
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
1. 触发器指向的**后台能力已启用**:在应用窗口「权限」的「后台能力(定时任务 / 云函数)」里勾选,
|
|
117
117
|
或在 后台能力面板(文档站 /console/functions#后台能力) 点「允许后台运行」(安装时后台能力一律是停用);
|
|
118
118
|
2. 如果该能力的 provider 是云函数(`managed_function`),当前安装还要绑定**就绪并已激活**的发布
|
|
119
|
-
|
|
119
|
+
(appid 应用在版本管理(文档站 /console/release)页下方「开发环境:云函数激活」),否则执行时报 `FUNCTION_RELEASE_REQUIRED`;
|
|
120
120
|
3. Manifest 里**确实声明了**这个触发器;
|
|
121
121
|
4. `background.modes` 包含对应模式。
|
|
122
122
|
|
|
@@ -207,14 +207,14 @@
|
|
|
207
207
|
|
|
208
208
|
规则:
|
|
209
209
|
|
|
210
|
-
| 项
|
|
211
|
-
|
|
|
212
|
-
| 谁能开
|
|
213
|
-
| 以谁的身份运行
|
|
214
|
-
| 时间、参数
|
|
215
|
-
| 没开放的任务
|
|
216
|
-
| 新版本取消了开放
|
|
217
|
-
| 撤销后台授权 / 版本升级后授权变化 | 任务暂停,与开发环境相同
|
|
210
|
+
| 项 | 说明 |
|
|
211
|
+
| --------------------------------- | ---------------------------------------------------------- |
|
|
212
|
+
| 谁能开 | 所有安装了应用的使用者(包括应用成员),各开各的,互不影响 |
|
|
213
|
+
| 以谁的身份运行 | 开启它的使用者本人:用他的后台授权,读写他能访问的数据 |
|
|
214
|
+
| 时间、参数 | 都用声明里的 `cron`、`timezone`、`data`,使用者不能改 |
|
|
215
|
+
| 没开放的任务 | 生产环境里启用会被拒(`TRIGGER_NOT_USER_CONFIGURABLE`) |
|
|
216
|
+
| 新版本取消了开放 | 使用者已开启的任务在下次到点时自动停用 |
|
|
217
|
+
| 撤销后台授权 / 版本升级后授权变化 | 任务暂停,与开发环境相同 |
|
|
218
218
|
|
|
219
219
|
开发环境的触发器仍在云开发控制台里管理,不需要 `user_configurable`。
|
|
220
220
|
|
|
@@ -378,7 +378,7 @@
|
|
|
378
378
|
|
|
379
379
|
### 报 `TRIGGER_MODE_NOT_DECLARED`
|
|
380
380
|
|
|
381
|
-
`background.modes` 里没有 `"scheduled"`(或 `"events"
|
|
381
|
+
`background.modes` 里没有 `"scheduled"`(或 `"events"`)。补上后上传新版本、把安装更新到该版本,再到「版本管理」页下方「开发环境:云函数激活」重新激活(云函数类能力需要)。
|
|
382
382
|
|
|
383
383
|
### 报 `TRIGGER_NOT_DECLARED`
|
|
384
384
|
|
|
@@ -400,7 +400,7 @@ Manifest 里找不到这个触发器 ID、ID 重复,或它的 `capability` 指
|
|
|
400
400
|
|
|
401
401
|
1. 后台能力是「已允许后台运行」吗?显示「授权给的是之前安装的版本」时触发器会暂停,需要重新授权。
|
|
402
402
|
切换版本后:应用中心「更新」只会让**权限变宽**的能力需要重新确认;CLI `zleap-app update` / `rollback` 会**停用全部**后台能力;
|
|
403
|
-
2. 云函数类能力:当前安装绑定了就绪发布吗?运行记录里出现 `FUNCTION_RELEASE_REQUIRED`
|
|
403
|
+
2. 云函数类能力:当前安装绑定了就绪发布吗?运行记录里出现 `FUNCTION_RELEASE_REQUIRED` 就到「版本管理」页下方「开发环境:云函数激活」完成激活;
|
|
404
404
|
3. 「接下来」的时间是不是还没到?
|
|
405
405
|
4. 数据库是否正在冻结(备份/恢复中)?
|
|
406
406
|
5. 看卡片的「最近投递」,再到 日志(文档站 /console/logs) 按调用编号查有没有执行记录。
|
|
@@ -6,7 +6,7 @@ description: Ship a zleapOS 云开发 (App Cloud) app beyond the developer's own
|
|
|
6
6
|
# zleapOS 云开发应用:从开发到上线
|
|
7
7
|
|
|
8
8
|
前置:应用已能用 `npm run deploy`(或 `zleap-app publish` + `install`)装到开发者自己的桌面并读写数据——那部分见 skill `zleap-cloud-app`。
|
|
9
|
-
下文的 `npx zleap-app` 指项目里安装的 `@zleap-
|
|
9
|
+
下文的 `npx zleap-app` 指项目里安装的 `@zleap-ai/app-cli`;不在这样的项目里时换成 `npx @zleap-ai/app-cli`。本 skill 处理之后的事:签名激活、后台能力、生产环境、分享给同事、版本迭代。完整版流程:references/dev-to-production.md。
|
|
10
10
|
|
|
11
11
|
## 0. 先看应用类型:appid 应用直接用「版本管理」
|
|
12
12
|
|
|
@@ -27,7 +27,10 @@ manifest 里是 `"appid": "zl…"`(控制台「创建应用」得到的平台
|
|
|
27
27
|
- 成员可在「版本管理」用「我也用这个」切到任一成员上传的版本(含同事未发布的版本);开发版本只对成员可见。
|
|
28
28
|
- 接口(成员):`GET /api/v1/app-cloud/apps/{app_id}/versions`、`POST /api/v1/app-cloud/apps/{app_id}/publish` `{version_id, notes?}`。
|
|
29
29
|
**发布影响全企业使用者:只有用户明确说「发布 / 上线 / 回退到 x」时才执行,执行前复述要发布的版本号。**
|
|
30
|
-
-
|
|
30
|
+
- 带云函数的版本在开发环境调试时,用 `npx zleap-app prepare <app_id> --version-id <本人上传的 version_id>`:对 appid 应用它**只准备开发环境**
|
|
31
|
+
(开发库、开发授权并启用声明的后台能力;有 headless 能力时再建候选、签名、激活到开发),**不碰生产**,回执 `"environment": "dev"`;
|
|
32
|
+
之后 `npx zleap-app invoke <app_id> --capability <id> --environment dev` 调试。等价的界面操作是「版本管理」下方的「开发环境:云函数激活」(只列本人上传的版本),步骤同下文第 3 节。
|
|
33
|
+
只能准备本人上传的版本,否则 403「只能准备本人上传的版本」。
|
|
31
34
|
|
|
32
35
|
旧 `app_key` 命名空间应用(`com.example.xxx`)继续按下文走「版本与激活」(references/console-legacy-release.md)。
|
|
33
36
|
|
|
@@ -16,13 +16,12 @@
|
|
|
16
16
|
>
|
|
17
17
|
> 「安装」装的是目录里该应用的**当前版本**:
|
|
18
18
|
>
|
|
19
|
-
> -
|
|
20
|
-
> -
|
|
19
|
+
> - **平台 `appid` 应用**:装成员在控制台 [版本管理](console-release.md#版本管理) 里发布的**线上版本**;还没发布过线上版本时,只有应用成员能使用开发版本;
|
|
20
|
+
> - **旧 `app_key` 应用**:有企业可见版本时是最新的企业可见版本;从未发布到企业目录时,是最近上传的版本(只有上传者自己能装)。
|
|
21
21
|
>
|
|
22
|
-
> 用平台 `appid` 创建的应用,装的是成员在控制台 [版本管理](console-release.md#版本管理) 里发布的**线上版本**;
|
|
23
22
|
> 创建了但还没上传过任何版本的应用是草稿,不会出现在应用中心。
|
|
24
23
|
>
|
|
25
|
-
> 想装其他版本,先装上,再用「更新」或 CLI `update`
|
|
24
|
+
> 想装其他版本,先装上,再用「更新」或 CLI `update` 切换;应用成员也可以在控制台「版本管理」里用「我也用这个」直接切换到某个开发版本。
|
|
26
25
|
|
|
27
26
|
### 安装确认框
|
|
28
27
|
|
|
@@ -32,21 +31,21 @@
|
|
|
32
31
|
|
|
33
32
|
说明下方逐行列出这个版本声明的权限,文案来自 `apps.json` 的 `apps.installPermissions.*`:
|
|
34
33
|
|
|
35
|
-
| 声明的能力
|
|
36
|
-
|
|
|
37
|
-
| `cloud.database.read`
|
|
38
|
-
| `cloud.database.write`
|
|
39
|
-
| `cloud.storage.read`
|
|
40
|
-
| `cloud.storage.write`
|
|
41
|
-
| `storage.kv`
|
|
42
|
-
| `space.read`
|
|
43
|
-
| `space.write`
|
|
44
|
-
| `notify.send`
|
|
45
|
-
| `clipboard.write`
|
|
46
|
-
| `workspace.files`
|
|
47
|
-
| `workspace.images.read`
|
|
34
|
+
| 声明的能力 | 确认框里的文案 |
|
|
35
|
+
| -------------------------------------------- | ---------------------------------------------------------------- |
|
|
36
|
+
| `cloud.database.read` | 读取本应用数据库 |
|
|
37
|
+
| `cloud.database.write` | 写入本应用数据库 |
|
|
38
|
+
| `cloud.storage.read` | 读取本应用存储文件 |
|
|
39
|
+
| `cloud.storage.write` | 写入本应用存储文件 |
|
|
40
|
+
| `storage.kv` | 读写本应用设置 |
|
|
41
|
+
| `space.read` | 读取本应用数据空间 |
|
|
42
|
+
| `space.write` | 写入本应用数据空间 |
|
|
43
|
+
| `notify.send` | 发送应用通知 |
|
|
44
|
+
| `clipboard.write` | 写入剪贴板 |
|
|
45
|
+
| `workspace.files` | 读取及整理选定空间文件夹内的文件 |
|
|
46
|
+
| `workspace.images.read` | 显示原始 ID(暂无中文文案):读取选定文件夹里的图片 |
|
|
48
47
|
| `user.profile` / `user.phone` / `user.email` | 使用时可能申请你的头像和昵称 / 手机号 / 邮箱(由你决定是否同意) |
|
|
49
|
-
| `os.agent.complete`
|
|
48
|
+
| `os.agent.complete` | 调用已授权的助手能力 |
|
|
50
49
|
|
|
51
50
|
列表的来源是 Manifest 的 `capabilities`、`storage.capabilities`、`host_api.requires` 和 `runtime.capabilities.requires[].id`。
|
|
52
51
|
没有对应文案的能力(例如 `os.todos.read`)直接显示能力 ID。
|
|
@@ -67,8 +66,8 @@
|
|
|
67
66
|
| 安装之后 | 还需要什么 |
|
|
68
67
|
| ----------------------- | --------------------------------------------------------------------------------------------------------------------- |
|
|
69
68
|
| 云数据库 / 存储能读写 | 云环境、数据库、集合已就绪(声明了集合的应用安装时会自动创建开发环境并开通,通常一分钟内),且仍要过数据面的 ACL 检查 |
|
|
70
|
-
| 后台任务 / 云函数会运行 | **不会自动启动**:安装时后台能力被预置为「停用」,需要就绪发布 + 激活 + 在应用窗口「权限」里勾选
|
|
71
|
-
| 定时任务
|
|
69
|
+
| 后台任务 / 云函数会运行 | **不会自动启动**:安装时后台能力被预置为「停用」,需要就绪发布 + 激活 + 在应用窗口「权限」里勾选 |
|
|
70
|
+
| 定时任务 | 开发者开放了的定时任务,在「权限」里对应后台能力下面有开关,自己决定开不开;时间和内容由开发者定 |
|
|
72
71
|
| Agent 能调用你的应用 | 安装不授予 Agent 调用权限 |
|
|
73
72
|
|
|
74
73
|
所以「装上了但读不到数据」通常是云资源还没准备好,而不是没授权。排查顺序见 [从开发到上线](dev-to-production.md)。
|
|
@@ -106,7 +105,7 @@
|
|
|
106
105
|
>
|
|
107
106
|
> 移除你的应用安装和桌面入口。应用数据会保留,不会删除。
|
|
108
107
|
|
|
109
|
-
系统核心 /
|
|
108
|
+
系统核心 / 系统基础应用(tier `os-core` / `os-base`)、空间站点没有「卸载」按钮。
|
|
110
109
|
|
|
111
110
|
> **卸载完成的提示**(提示)
|
|
112
111
|
>
|
|
@@ -137,8 +136,8 @@
|
|
|
137
136
|
|
|
138
137
|
- 成员在控制台「版本管理」里发布新版本(或回退到旧版本)后,**不是应用成员的使用者下次打开应用时**,
|
|
139
138
|
宿主发现线上版本和自己装的不一样,会先把安装切到线上版本,显示「**正在更新到最新版本…**」,再加载应用;
|
|
140
|
-
-
|
|
141
|
-
|
|
139
|
+
- **已经开着的窗口不会立刻被打断**:宿主每 20 秒检查一次更新,先通过 `zl.app.getUpdateManager()` 通知应用,应用可以用 `onUpdateReady` 提示用户、调用 `applyUpdate()` 立即切换,见 版本更新与授权登录(文档站 /reference/app-runtime#版本更新);
|
|
140
|
+
- 但宽限期只有 **24 小时**:新线上版本发布 24 小时后,**非成员**的旧窗口会被强制切换并重新加载,提示「**这个版本已超过 24 小时的使用期限,正在更新到最新版本…**」;
|
|
142
141
|
- 应用成员(管理员 / 开发者)**从不被自动切换**,他们在控制台「版本管理」里用「我也用这个」自己选版本。
|
|
143
142
|
|
|
144
143
|
下面的「更新」页、回滚和 CLI 切换照常可用。
|
|
@@ -158,20 +157,29 @@
|
|
|
158
157
|
|
|
159
158
|
**预检结果**(`appversion/read.go`、`continuity.go`):
|
|
160
159
|
|
|
161
|
-
| 代码 | 类型 | 界面文案
|
|
162
|
-
| ------------------------------------------- | ---- |
|
|
163
|
-
| `RELEASE_NOT_PUBLISHED` | 阻断 |
|
|
164
|
-
| `
|
|
165
|
-
| `
|
|
166
|
-
| `
|
|
167
|
-
| `
|
|
168
|
-
| `
|
|
169
|
-
|
|
160
|
+
| 代码 | 类型 | 界面文案 |
|
|
161
|
+
| ------------------------------------------- | ---- | -------------------------------------------------------------- |
|
|
162
|
+
| `RELEASE_NOT_PUBLISHED` | 阻断 | 该版本尚未签发发布:切过去后云函数等后台能力无法激活。 |
|
|
163
|
+
| `COLLECTION_PARTITION_IMMUTABLE` | 阻断 | 集合作用域(私有/共享)不可变更,开通会被数据面拒绝。 |
|
|
164
|
+
| `COLLECTION_SCHEMA_NOT_APPLIED` | 警告 | 已存在集合的结构不会更新,新版本若依赖新字段可能被旧约束拒绝。 |
|
|
165
|
+
| `COLLECTION_NO_LONGER_DECLARED` | 警告 | 新版本不再声明该集合;已建集合不会被删除,数据仍在。 |
|
|
166
|
+
| `CAPABILITY_CONSENT_REQUIRED` | 警告 | 这些能力的权限变宽,需要你重新确认后才能继续调用。 |
|
|
167
|
+
| `CONTINUITY_UNKNOWN` / `DATA_DELTA_UNKNOWN` | 警告 | 旧版本清单不可解析…… / 数据声明无法比对,请人工确认集合变更。 |
|
|
168
|
+
|
|
169
|
+
另外,「更新」页在调用预检之前还会读取当前账号可切换的版本列表。如果目标版本不在列表里
|
|
170
|
+
(已下架、不可见,或官方资源版本状态异常),前端会直接阻止升级:
|
|
171
|
+
|
|
172
|
+
| 代码 | 类型 | 界面文案 |
|
|
173
|
+
| ----------------------- | ---- | ------------------------------------------ |
|
|
174
|
+
| `VERSION_NOT_AVAILABLE` | 阻断 | 该版本当前不可切换(可能已下架或不可见)。 |
|
|
175
|
+
|
|
176
|
+
`VERSION_NOT_AVAILABLE` 是**前端版本列表的阻断**(`upgrade-model.ts` 的 `resolveUpgradeBlock`,界面 key 为 `upgradeBlockedUnavailable`),
|
|
177
|
+
不会出现在服务端预检结果里。遇到时先在「发现」里重新搜到该应用(刷新目录),或让发布者确认该版本仍然可见。
|
|
170
178
|
|
|
171
179
|
> **目标版本必须有「就绪」的发布**(注意)
|
|
172
180
|
>
|
|
173
|
-
>
|
|
174
|
-
>
|
|
181
|
+
> 应用中心前端还会检查目标版本的 `release_id`:为空时显示「该版本尚未发布(release)。切过去后云函数等后台能力无法激活,请先由发布者签发该版本。」并阻止升级——包括没有云函数的纯前端应用(服务端预检对纯前端应用其实不拦,这是前后端判定不一致)。
|
|
182
|
+
> 所以发布新版本给同事前,先在控制台的版本页把它签发到「就绪」:平台 `appid` 应用在「版本管理」的「开发环境:云函数激活」里做,旧 `app_key` 应用在「版本与激活」里做。
|
|
175
183
|
|
|
176
184
|
**更新时授权怎么处理**(`appversion/apply.go`):
|
|
177
185
|
|
|
@@ -218,18 +226,18 @@ CLI 走的是开发会话接口(`appinstallation/version.go` 的 `SwitchVersio
|
|
|
218
226
|
|
|
219
227
|
打开一个上传的应用后,窗口内容区顶部有一条工具栏(靠右),从左到右:
|
|
220
228
|
|
|
221
|
-
| 按钮 | 何时出现
|
|
222
|
-
| -------------------------------- |
|
|
223
|
-
| **权限** | 应用声明了云能力或安装级权限时;两者都没声明时不显示
|
|
229
|
+
| 按钮 | 何时出现 | 作用 |
|
|
230
|
+
| -------------------------------- | ------------------------------------------------------ | ------------------------------------------- |
|
|
231
|
+
| **权限** | 应用声明了云能力或安装级权限时;两者都没声明时不显示 | 打开授权对话框,见下表 |
|
|
224
232
|
| **已授权信息** | 你在授权框里同意过把头像昵称、手机号或邮箱给这个应用时 | 查看和撤销,见下文[已授权信息](#已授权信息) |
|
|
225
|
-
| **重新加载应用**(旋转箭头图标) | 所有上传的应用
|
|
233
|
+
| **重新加载应用**(旋转箭头图标) | 所有上传的应用 | 重新取运行会话并重载 iframe |
|
|
226
234
|
|
|
227
235
|
「权限」按钮打开哪个对话框,取决于应用声明了什么:
|
|
228
236
|
|
|
229
|
-
| 应用声明
|
|
230
|
-
|
|
|
231
|
-
| 用了 Cloud:有 `runtime.backend`,或 `requires` 里有 `cloud.*` / `os.agent.complete`
|
|
232
|
-
| 只声明了安装级权限(`storage.kv` / `space.read` / `space.write` / `notify.send`)
|
|
237
|
+
| 应用声明 | 点「权限」 |
|
|
238
|
+
| ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- |
|
|
239
|
+
| 用了 Cloud:有 `runtime.backend`,或 `requires` 里有 `cloud.*` / `os.agent.complete` | 打开「应用权限」对话框(见下文);若还声明了安装级权限,对话框底部有「**管理其他权限**」,进入「数据权限」对话框 |
|
|
240
|
+
| 只声明了安装级权限(`storage.kv` / `space.read` / `space.write` / `notify.send`) | 直接打开「数据权限」对话框 |
|
|
233
241
|
|
|
234
242
|
两类授权对应服务端两套独立闸门,**不要混为一谈**。
|
|
235
243
|
|
|
@@ -237,15 +245,19 @@ CLI 走的是开发会话接口(`appinstallation/version.go` 的 `SwitchVersio
|
|
|
237
245
|
|
|
238
246
|
**标题**:应用权限
|
|
239
247
|
|
|
248
|
+
(截图:安装后打开应用,点窗口顶部「权限」打开的「应用权限」对话框,见文档站)
|
|
249
|
+
|
|
250
|
+
「应用权限」对话框:显示当前数据域、四项 Cloud 数据授权和「保存并重新加载」。
|
|
251
|
+
|
|
240
252
|
**说明**:
|
|
241
253
|
|
|
242
254
|
> 授权本应用读写它在应用云空间里的数据和文件。私有集合里的数据在应用里只对你本人展示;共享集合里的数据,本应用的其他使用者也能看到;应用的开发者可以在云开发控制台查看和管理这些数据。保存会关闭旧会话并重新打开应用。
|
|
243
255
|
|
|
244
256
|
下面一行显示**当前数据域**(由宿主决定,对话框里**没有**切换环境的选择器):
|
|
245
257
|
|
|
246
|
-
| 数据域 | 文案
|
|
247
|
-
| ------------ |
|
|
248
|
-
| dev(调试) | 当前数据域:调试 —— 应用开发者调试用的数据,与正式使用的数据相互隔离。
|
|
258
|
+
| 数据域 | 文案 | 何时使用 |
|
|
259
|
+
| ------------ | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
|
|
260
|
+
| dev(调试) | 当前数据域:调试 —— 应用开发者调试用的数据,与正式使用的数据相互隔离。 | 部署**未开放**生产环境时所有人;已开放但应用还没有生产环境时的发布者本人 |
|
|
249
261
|
| prod(生产) | 当前数据域:正式 —— 本应用全体使用者的数据,共享集合按规则对其他使用者可见。 | 部署**已开放**生产环境时的其他使用者;应用有生产环境后也包括发布者本人 |
|
|
250
262
|
|
|
251
263
|
**四个复选框**:
|
|
@@ -277,15 +289,15 @@ CLI 走的是开发会话接口(`appinstallation/version.go` 的 `SwitchVersio
|
|
|
277
289
|
|
|
278
290
|
声明了安装级权限的应用,对话框底部还有一行「设置存储、空间文件、通知等其他权限」和「**管理其他权限**」按钮,点开即下文的「数据权限」对话框。
|
|
279
291
|
|
|
280
|
-
| 提示 | 含义
|
|
281
|
-
| ---------------------------------------------- |
|
|
282
|
-
| 当前安装未申请此能力,或你无权访问应用云空间。 | 读取授权失败。常见原因:在 dev
|
|
283
|
-
| 授权保存未确认,请重新读取后核对。 | 保存失败或结果不明,关掉重开对话框核对当前状态
|
|
292
|
+
| 提示 | 含义 |
|
|
293
|
+
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
294
|
+
| 当前安装未申请此能力,或你无权访问应用云空间。 | 读取授权失败。常见原因:在 dev 数据域下你不是开发团队成员——dev 默认只对 `appid` 应用成员 / 旧应用该版本的上传者开放 |
|
|
295
|
+
| 授权保存未确认,请重新读取后核对。 | 保存失败或结果不明,关掉重开对话框核对当前状态 |
|
|
284
296
|
|
|
285
297
|
> **生产未开放时,同事用不了 Cloud 数据**(注意)
|
|
286
298
|
>
|
|
287
|
-
> 部署未开放生产环境时,所有人都走 dev 数据域,而 dev
|
|
288
|
-
>
|
|
299
|
+
> 部署未开放生产环境时,所有人都走 dev 数据域,而 dev 默认**只允许开发团队**(`appid` 应用成员 / 旧应用该版本的上传者)访问(部署可另行放开)。
|
|
300
|
+
> 此时你把应用发布出去(旧应用发布到企业目录、`appid` 应用发布为线上版本),同事能安装、能打开,但云数据读写会被拒绝。这属于「平台未开放」,不是你的代码写错了。
|
|
289
301
|
|
|
290
302
|
### 「数据权限」(安装级权限)
|
|
291
303
|
|
|
@@ -357,5 +369,5 @@ CLI 走的是开发会话接口(`appinstallation/version.go` 的 `SwitchVersio
|
|
|
357
369
|
- 应用中心界面总览(文档站 ./overview)
|
|
358
370
|
- [上传与发布应用](app-center-publish.md)
|
|
359
371
|
- [权限与授权](permissions.md) — 权限模型完整说明
|
|
360
|
-
- [云开发控制台 ·
|
|
372
|
+
- [云开发控制台 · 版本管理 / 版本与激活](console-release.md) — 就绪发布与激活
|
|
361
373
|
- [状态与错误码](status-codes.md)
|
|
@@ -4,20 +4,30 @@
|
|
|
4
4
|
|
|
5
5
|
这一篇讲左侧导航「**我的发布**」里与应用包有关的全部操作,以及与之等价的 `zleap-app` 命令行操作。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
先分清两条上线路径——**用哪种应用,就走哪条路**:
|
|
8
|
+
|
|
9
|
+
| 应用类型 | 上传后是什么 | 怎么让同事用上 |
|
|
10
|
+
| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
|
11
|
+
| **平台 `appid` 应用**(在云开发控制台创建,形如 `zl3f9a2c7e1b0d4a68`) | **开发版本**,可见性 `members`:只有应用成员(管理员 / 开发者)能看到和安装 | 在云开发控制台「**发布 → 版本管理**」里点「**发布为线上版本**」;应用中心的「发布到企业目录」对它不适用 |
|
|
12
|
+
| **旧 `app_key` 应用**(形如 `com.example.my-app`) | 默认「仅自己可见」(`private`);从应用中心上传时,如果已有企业可见版本则会继承 | 在应用中心点「**发布到企业目录**」;撤回也用应用中心 |
|
|
8
13
|
|
|
9
14
|
```
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
appid 应用:
|
|
16
|
+
上传(应用中心 / CLI)──▶ 开发版本(members,仅应用成员可见)──▶ 控制台「版本管理」发布为线上版本 ──▶ 全企业可见
|
|
17
|
+
|
|
18
|
+
旧 app_key 应用:
|
|
19
|
+
上传 ──▶ 仅自己可见(private)──▶ 发布到企业目录(enterprise)──▶ 同事在「发现」安装
|
|
20
|
+
│ │
|
|
21
|
+
└─ 你自己可以直接安装调试 └─ 可随时「撤回企业目录」
|
|
13
22
|
```
|
|
14
23
|
|
|
15
|
-
>
|
|
24
|
+
> **几个容易混淆的「发布」**(提示)
|
|
16
25
|
>
|
|
17
26
|
>
|
|
18
|
-
> - **上传**:把 ZIP
|
|
19
|
-
> -
|
|
20
|
-
> -
|
|
27
|
+
> - **上传**:把 ZIP 变成一个固定版本。`appid` 应用得到的是「开发版本」,只有应用成员看得到、装得上;旧 `app_key` 应用默认只有你自己看得到。
|
|
28
|
+
> - **发布为线上版本**(仅 `appid` 应用,CLI 叫 `release`):在云开发控制台「版本管理」里把**某一个开发版本**设为线上版本,全企业可见。**没有审核步骤**。
|
|
29
|
+
> - **发布到企业目录**(仅旧 `app_key` 应用,CLI 叫 `market-publish`、「上架」):把**某一个版本**改成企业可见。**没有审核步骤**。
|
|
30
|
+
> - **云开发版本页 / 激活**(发布候选、签名、激活):决定云函数 / 后台任务能不能跑。`appid` 应用在控制台「版本管理」的「开发环境:云函数激活」里做,旧 `app_key` 应用在「版本与激活」里做;和目录可见性是两回事。
|
|
21
31
|
>
|
|
22
32
|
|
|
23
33
|
## 面板结构
|
|
@@ -32,14 +42,18 @@
|
|
|
32
42
|
- 主按钮「**上传应用包**」和「**刷新**」;
|
|
33
43
|
- 应用卡片列表:**按应用分组**,同一个 `appid` 的多个版本收在一张卡片里。
|
|
34
44
|
|
|
45
|
+
(截图:「我的发布 → 自建应用 → 应用包」:应用卡片、目录状态与「管理版本」「⋯」按钮,见文档站)
|
|
46
|
+
|
|
47
|
+
「我的发布」按应用分组;卡片右侧的「管理版本」展开版本列表,「⋯」里是云开发控制台、编辑资料和删除。
|
|
48
|
+
|
|
35
49
|
没有上传过任何应用包时显示「你还没有发布应用包。」,并附一个「上传应用包」按钮。
|
|
36
50
|
|
|
37
51
|
## 上传应用包
|
|
38
52
|
|
|
39
|
-
>
|
|
53
|
+
> **平台 appid 应用:先在控制台创建应用**(提示)
|
|
40
54
|
>
|
|
41
|
-
>
|
|
42
|
-
>
|
|
55
|
+
> 使用平台 `appid` 时,上传前应用必须已在 [云开发控制台「创建应用」](console-members.md#创建应用),并把生成的 `appid` 写进 `manifest.json`;
|
|
56
|
+
> 上传者必须是这个应用的成员(管理员或开发者)。旧 `app_key` 应用不需要这一步,按原有命名空间上传即可。
|
|
43
57
|
|
|
44
58
|
### 操作步骤
|
|
45
59
|
|
|
@@ -47,6 +61,9 @@
|
|
|
47
61
|
2. 选择 `.zip` 文件。
|
|
48
62
|
3. 等待上传完成,成功提示:「**应用包已上传,可继续发布到企业目录。**」
|
|
49
63
|
|
|
64
|
+
`appid` 应用请忽略提示里的「发布到企业目录」——这只对旧 `app_key` 应用成立;`appid` 应用请去控制台「版本管理」发布线上版本,
|
|
65
|
+
也可以点版本行上的「**去版本管理发布**」直接打开。
|
|
66
|
+
|
|
50
67
|
前端预检不通过(不是 `.zip`、空文件、超过 20 MiB)时提示:
|
|
51
68
|
|
|
52
69
|
> 「请选择非空 ZIP 应用包,大小不超过 20 MiB。」
|
|
@@ -63,21 +80,21 @@
|
|
|
63
80
|
|
|
64
81
|
以下限制来自 `zleap-service/internal/services/apparchive`:
|
|
65
82
|
|
|
66
|
-
| 要求
|
|
67
|
-
|
|
|
68
|
-
| ZIP 本身 ≤ 20 MiB、非空
|
|
69
|
-
| 根目录有 `manifest.json`,且 ≤ 1 MiB
|
|
70
|
-
| JSON 合法、**不含重复键**
|
|
71
|
-
| 根目录有**非空** `LICENSE`
|
|
72
|
-
| `appid` 是控制台生成的应用标识(旧应用为 `app_key` 命名空间,≤ 64 字符)
|
|
73
|
-
| `appid` 与 `app_key` 同时写时必须一致
|
|
74
|
-
| `runtime.ui.type` 是 `iframe`
|
|
75
|
-
| `runtime.ui.entry` 指向包内存在的 `.html` / `.htm`
|
|
76
|
-
| 仅旧 `app_key` 应用:如写了 `publisher.publisher_id`,必须是你当前的用户 ID(`appid` 应用忽略 `publisher`) | 发布者声明不属于当前登录用户
|
|
77
|
-
| 条目数 1–2000
|
|
78
|
-
| 单文件 ≤ 20 MiB;解压总大小 ≤ 80 MiB
|
|
79
|
-
| 单文件压缩比 ≤ 100
|
|
80
|
-
| 不含符号链接、加密条目、`..` 等越界路径
|
|
83
|
+
| 要求 | 不满足时的服务端提示 |
|
|
84
|
+
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
|
|
85
|
+
| ZIP 本身 ≤ 20 MiB、非空 | 应用包必须是非空 ZIP,且不能超过 20 MiB |
|
|
86
|
+
| 根目录有 `manifest.json`,且 ≤ 1 MiB | 应用包根目录必须包含 manifest.json / manifest.json 超过 1 MiB 上限 |
|
|
87
|
+
| JSON 合法、**不含重复键** | manifest.json 必须是有效 UTF-8 JSON,且不能包含重复键 |
|
|
88
|
+
| 根目录有**非空** `LICENSE` | 应用包根目录必须包含非空 LICENSE 文件 |
|
|
89
|
+
| `appid` 是控制台生成的应用标识(旧应用为 `app_key` 命名空间,≤ 64 字符) | manifest app_key 必须使用包含发布者前缀的小写命名空间 |
|
|
90
|
+
| `appid` 与 `app_key` 同时写时必须一致 | manifest 的 appid 与 app_key 不一致 |
|
|
91
|
+
| `runtime.ui.type` 是 `iframe` | 上传UI只支持iframe |
|
|
92
|
+
| `runtime.ui.entry` 指向包内存在的 `.html` / `.htm` | manifest entry 必须指向存在的包内 HTML 文件 |
|
|
93
|
+
| 仅旧 `app_key` 应用:如写了 `publisher.publisher_id`,必须是你当前的用户 ID(`appid` 应用忽略 `publisher`) | 发布者声明不属于当前登录用户 |
|
|
94
|
+
| 条目数 1–2000 | 应用包条目数量必须在 1 至 2000 之间 |
|
|
95
|
+
| 单文件 ≤ 20 MiB;解压总大小 ≤ 80 MiB | 应用包单文件大小超过上限 / 应用包解压总大小超过上限 |
|
|
96
|
+
| 单文件压缩比 ≤ 100 | 应用包压缩比超过上限 |
|
|
97
|
+
| 不含符号链接、加密条目、`..` 等越界路径 | 应用包不允许符号链接或特殊文件 等 |
|
|
81
98
|
|
|
82
99
|
> **两个最常见的失败原因**(危险)
|
|
83
100
|
>
|
|
@@ -98,24 +115,24 @@
|
|
|
98
115
|
|
|
99
116
|
### 版本号规则
|
|
100
117
|
|
|
101
|
-
| 情况
|
|
102
|
-
|
|
|
103
|
-
| `appid` 还没在控制台创建
|
|
104
|
-
| 你不是这个应用的成员
|
|
105
|
-
| 旧 `app_key` 已被**其他人**的应用包占用 | 拒绝:「不能覆盖其他发布者的应用标识」(仅旧 `app_key` 应用)
|
|
106
|
-
| 应用已被删除
|
|
107
|
-
| 同一版本号、**内容完全相同**的 ZIP
|
|
108
|
-
| 同一版本号、内容不同
|
|
118
|
+
| 情况 | 结果 |
|
|
119
|
+
| --------------------------------------- | ------------------------------------------------------------------------------- |
|
|
120
|
+
| `appid` 还没在控制台创建 | 拒绝:40400「appid 不存在」——先在云开发控制台「创建应用」 |
|
|
121
|
+
| 你不是这个应用的成员 | 拒绝:40300「你不是这个应用的开发者」——请管理员在控制台「成员」里把你加为开发者 |
|
|
122
|
+
| 旧 `app_key` 已被**其他人**的应用包占用 | 拒绝:「不能覆盖其他发布者的应用标识」(仅旧 `app_key` 应用) |
|
|
123
|
+
| 应用已被删除 | 拒绝:「该应用已删除,不能使用原应用标识重新上传」 |
|
|
124
|
+
| 同一版本号、**内容完全相同**的 ZIP | 视为重复上传,直接返回已有的那个包 |
|
|
125
|
+
| 同一版本号、内容不同 | 拒绝:「该版本已经存在,请更换版本号」——**改代码就要升版本号** |
|
|
109
126
|
|
|
110
127
|
### 上传后会自动发生什么
|
|
111
128
|
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
- CLI `zleap-app publish
|
|
115
|
-
-
|
|
129
|
+
- 新版本的**可见性**由应用类型决定:
|
|
130
|
+
- **平台 `appid` 应用**:无论从应用中心「上传应用包」还是用 CLI `zleap-app publish` 上传,得到都是**开发版本**,可见性固定为 `members`——只有应用成员能看到和安装。它**不会**继承企业可见,也**不会**自动变成线上版本。
|
|
131
|
+
- **旧 `app_key` 应用**:应用中心「上传应用包」时,如果这个应用**已经有企业可见的版本**,新版本会**直接继承为企业可见**;否则为「仅自己可见」。CLI `zleap-app publish` **总是**「仅自己可见」,不继承(同版本号已公开时返回「该版本已公开,请使用新版本号上传private候选」)。
|
|
132
|
+
- 如果部署配置了发布信任策略,会为这个版本自动建一个**发布候选(草稿)**,在控制台的版本页里继续签名。详见 [版本管理](console-release.md)。
|
|
116
133
|
- 上传**不会**替你安装,也**不会**授予任何权限。
|
|
117
134
|
|
|
118
|
-
>
|
|
135
|
+
> **旧 app_key 应用:从应用中心上传新版本,可能立即对同事可见**(注意)
|
|
119
136
|
>
|
|
120
137
|
> 如果你已经把旧版本发布到了企业目录,再从应用中心上传新版本时,它默认就是「企业可见」,同事可以在「更新」里升级到它。
|
|
121
138
|
> 想先自己验证再放出去,请用 `zleap-app publish`(固定 private),验证后再发布。
|
|
@@ -124,7 +141,8 @@
|
|
|
124
141
|
|
|
125
142
|
卡片头部:应用名、`appid`(旧应用为 `app_key`)、「最近上传 x.y.z · 大小 · 上传于 日期时间」。
|
|
126
143
|
|
|
127
|
-
|
|
144
|
+
右侧「**目录状态**」统计:`appid` 应用是「**企业 n**」「**开发版本 n**」,旧 `app_key` 应用是「**企业 N**」「**私有 N**」;
|
|
145
|
+
有停用版本时再加「**停用 N**」,以及「**N 个版本**」。
|
|
128
146
|
|
|
129
147
|
右侧按钮:
|
|
130
148
|
|
|
@@ -134,6 +152,7 @@
|
|
|
134
152
|
### 版本列表
|
|
135
153
|
|
|
136
154
|
展开后标题「**版本列表**」,说明:「目录上下架作用于单个版本;云开发负责运行环境、发布候选与生产门禁。」
|
|
155
|
+
`appid` 应用的说明是:「这是 appid 应用:每次上传都是只有应用成员可见的开发版本,在云开发控制台「版本管理」里发布为线上版本后全企业可见。」
|
|
137
156
|
|
|
138
157
|
每一行:
|
|
139
158
|
|
|
@@ -141,13 +160,60 @@
|
|
|
141
160
|
| ---- | ------------------------------------------------------------------------ |
|
|
142
161
|
| 左 | 版本号;最新上传的那一行带「**最近上传**」标记 |
|
|
143
162
|
| 中 | 上传时间、包大小 |
|
|
144
|
-
| 状态 |
|
|
145
|
-
| 按钮 | 「**云开发**」→
|
|
146
|
-
| 按钮 |
|
|
163
|
+
| 状态 | 「**仅自己可见**」「**仅成员可见**」或「**企业可见**」;已停用的版本另有「**已停用**」 |
|
|
164
|
+
| 按钮 | 「**云开发**」→ 打开控制台的版本页并定位到这个版本(旧应用,以及 `appid` 应用已发布的版本) |
|
|
165
|
+
| 按钮 | 「**发布到企业目录**」(旧应用当前私有)或「**撤回企业目录**」(旧应用当前企业可见);`appid` 应用的成员版本是「**去版本管理发布**」 |
|
|
166
|
+
|
|
167
|
+
已停用的版本没有发布 / 撤回 / 去版本管理发布按钮,「云开发」按钮也不可点。
|
|
168
|
+
|
|
169
|
+
> **平台 appid 应用在「我的发布」里看到什么**(提示)
|
|
170
|
+
>
|
|
171
|
+
> `members` 版本显示「**仅成员可见**」,卡片统计为「**企业 n / 开发版本 n**」。版本列表上方会有提示:
|
|
172
|
+
> 「这是 appid 应用:每次上传都是只有应用成员可见的开发版本,在云开发控制台「版本管理」里发布为线上版本后全企业可见。」
|
|
173
|
+
> 成员版本没有「发布到企业目录」,只有「**去版本管理发布**」(打开控制台「版本管理」);
|
|
174
|
+
> 发布为线上版本后,版本可见性变为 **enterprise(企业可见)**,显示「**企业可见**」并保留「**云开发**」按钮。
|
|
175
|
+
|
|
176
|
+
## appid 应用:发布为线上版本
|
|
177
|
+
|
|
178
|
+
平台 `appid` 应用的上线**只在云开发控制台里完成**,不走应用中心的「发布到企业目录」。
|
|
179
|
+
|
|
180
|
+
1. 打开云开发控制台(系统内置应用,启动台「更多工具」里,或搜索「云开发」直接打开),在顶部应用切换器选中你的应用。
|
|
181
|
+
2. 侧栏点「**发布 → 版本管理**」。
|
|
182
|
+
3. 页面上方是「**线上版本**」:没发布过时显示「还没有发布过线上版本,只有成员能使用开发版本」。
|
|
183
|
+
4. 在下方版本列表里找到要上线的开发版本(每个版本都标出上传者和上传时间),点「**发布为线上版本**」。可以填写「发布说明(可选)」。
|
|
184
|
+
5. 确认「把 v{版本} 发布为线上版本?」。
|
|
185
|
+
|
|
186
|
+
(截图:云开发控制台「版本管理」:线上版本、发布说明、版本列表与「发布为线上版本」,见文档站)
|
|
147
187
|
|
|
148
|
-
|
|
188
|
+
「版本管理」上方是线上版本和发布说明,下方列出全部成员上传的开发版本,每个版本都可以「发布为线上版本」或「回退到此版本」。
|
|
149
189
|
|
|
150
|
-
|
|
190
|
+
发布后**全企业可见**:新安装装的就是它,不是应用成员的使用者下次打开应用时自动更新。**回退**就是把一个旧版本再「发布为线上版本」,按钮文案是「回退到此版本」。
|
|
191
|
+
|
|
192
|
+
> **带云资源的版本第一次发布**(注意)
|
|
193
|
+
>
|
|
194
|
+
> 带数据库集合、`cloud.*` 能力或云函数的版本**第一次**发布时,平台会以上传者身份自动准备生产环境(生产授权、签名、激活、生产集合)。
|
|
195
|
+
> 此时要求**上传者当前安装的就是这个版本**,否则返回 40900 `UPLOADER_NOT_ON_VERSION`「发布带云资源的版本前,上传者需要正在使用这个版本」。
|
|
196
|
+
> 先让上传者在控制台「版本管理」里对这个版本点「我也用这个」(或重新 `npm run deploy`),再发布。
|
|
197
|
+
> 已经发布过的版本再次发布直接复用已有的生产准备,不再要求。只用宿主能力、没有云资源的应用直接发布,不需要签名或激活。
|
|
198
|
+
|
|
199
|
+
### CLI 等价操作(appid 应用)
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
zleap-app releases APP_ID # 列出全部成员上传的开发版本、当前线上版本和发布记录
|
|
203
|
+
zleap-app release APP_ID --version-id VERSION_ID --notes "这次更新了什么"
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
- `release` 必须用 `--version-id` 明确指定版本,不会自动挑最新;
|
|
207
|
+
- 回退同样用 `release` 指向一个旧版本;
|
|
208
|
+
- 脚手架项目里是 `npm run versions` / `npm run release`;
|
|
209
|
+
- 上传(`zleap-app publish`)只生成开发版本,发布线上版本要再执行 `release`。
|
|
210
|
+
|
|
211
|
+
## 发布到企业目录(仅旧 app_key 应用)
|
|
212
|
+
|
|
213
|
+
> **appid 应用不适用**(注意)
|
|
214
|
+
>
|
|
215
|
+
> 这一节只适用于旧 `app_key` 应用。平台 `appid` 应用调用「发布到企业目录」(或 CLI `market-publish`)会被服务端拒绝:
|
|
216
|
+
> 409 `USE_VERSION_MANAGEMENT`「这个应用请在云开发控制台「版本管理」里发布或回退」。请用上一节的「发布为线上版本」。
|
|
151
217
|
|
|
152
218
|
点某个版本行的「**发布到企业目录**」,确认框:
|
|
153
219
|
|
|
@@ -168,7 +234,7 @@
|
|
|
168
234
|
> 发布的是**这一个版本**,不是整个应用。别人安装后,他们的安装就固定在这个版本,直到他们自己在「更新」里升级。
|
|
169
235
|
> 你之后发布更新的版本,已安装的同事会在「更新」里看到「已安装 旧 → 最新 新」。
|
|
170
236
|
|
|
171
|
-
### CLI
|
|
237
|
+
### CLI 等价操作(旧 app_key 应用)
|
|
172
238
|
|
|
173
239
|
```bash
|
|
174
240
|
zleap-app publish ./out/my-app.zip --target https://os.example.com
|
|
@@ -177,12 +243,15 @@ zleap-app market-publish <package_id> --app-key zl3f9a2c7e1b0d4a68 # 设为
|
|
|
177
243
|
zleap-app market-unpublish <package_id> --app-key zl3f9a2c7e1b0d4a68 # 撤回为仅自己可见
|
|
178
244
|
```
|
|
179
245
|
|
|
246
|
+
- `market-publish` 只适用于**旧 `app_key` 应用**;`appid` 应用请用 `zleap-app release`(见上一节);
|
|
180
247
|
- `market-publish` 的参数是 **package_id**(固定版本),不是 app_id;
|
|
181
248
|
- 只能操作**本人**、**当前登录限域的 appid** 下的应用包;与应用中心按钮走同一个可见性服务,同样没有审核;
|
|
182
249
|
- 需要带 `package.own.market` 权限的开发会话;旧会话请重新 `zleap-app auth login`;
|
|
183
250
|
- 网络超时返回 unknown 时,先 `zleap-app status` 查该 package_id 的实际 visibility,不要盲目重试。
|
|
184
251
|
|
|
185
|
-
##
|
|
252
|
+
## 撤回企业目录(仅旧 app_key 应用)
|
|
253
|
+
|
|
254
|
+
`appid` 应用没有「撤回企业目录」这一步:让线上版本回到旧版本,是在控制台「版本管理」里对旧版本点「回退到此版本」。下面只适用于旧 `app_key` 应用。
|
|
186
255
|
|
|
187
256
|
点「**撤回企业目录**」,确认框:
|
|
188
257
|
|
|
@@ -230,7 +299,7 @@ zleap-app market-unpublish <package_id> --app-key zl3f9a2c7e1b0d4a68 # 撤回
|
|
|
230
299
|
## 管理员下架
|
|
231
300
|
|
|
232
301
|
平台管理员可以在「应用管控」里把整个应用**下架**:对所有非管理员隐藏,已安装用户也看不到。
|
|
233
|
-
|
|
302
|
+
下架与你的发布互相独立——你重新发布到企业目录(旧应用)或重新发布线上版本(`appid` 应用)**不会**解除管理员下架。
|
|
234
303
|
|
|
235
304
|
## 操作结果不确定时
|
|
236
305
|
|
|
@@ -252,6 +321,6 @@ zleap-app market-unpublish <package_id> --app-key zl3f9a2c7e1b0d4a68 # 撤回
|
|
|
252
321
|
|
|
253
322
|
- 应用中心界面总览(文档站 ./overview)
|
|
254
323
|
- [安装与卸载](app-center-install.md) — 安装即授权、更新 / 回滚、应用窗口的授权入口
|
|
255
|
-
- [云开发控制台 ·
|
|
324
|
+
- [云开发控制台 · 版本管理 / 版本与激活](console-release.md) — 发布候选、签名、激活与生产门禁
|
|
256
325
|
- Manifest v2 配置(文档站 /reference/manifest)
|
|
257
326
|
- [从开发到上线](dev-to-production.md)
|