dsm-package.yaml 參考
native-go 或 binary 專案使用 dsm-package.yaml。以下範例可在使用 --with files,jobs,login --package MyApp 建立的 native-go 專案通過 check。
# 套件識別資訊與 SPK 版本:0.1.0-0001。schema: 2package: MyAppversion: "0.1.0"build: 1displayname: My Appdescription: A native DSM package with files, jobs, and login.maintainer: Your Nameos_min_ver: "7.1-42661"arches: [x86_64, aarch64]
# Go CGI 後端。binary 專案改用 kind: binary 與 files。backend: kind: go dir: backend main: ./cmd/app
# 先建置 Vue 前端,再複製靜態輸出。ui: dir: frontend/dist build: cwd: frontend command: [npm, run, build]
# CLI 的 login 對應 identity 欄位。capabilities: files: session jobs: {worker: sha256-v1} identity: standalone # 使用 synopkgland add root-ops 加入 root scripts 與能力程式碼。 # rootOps: true # 使用 synopkgland add delegate 加入 delegate 程式碼。 # delegate: # scope: install-selected # operations: [files.moveFromStaging] # destinations: [save] # lifetime: until-revoked
# 產生的專案包含訊息目錄與詞彙表。i18n: messages: i18n/messages glossary: i18n/glossary.json info: zh-TW: displayname: 我的 App description: 提供檔案、背景工作與登入功能的 DSM 套件。
# 安裝時選擇現有的共用資料夾。install: sharedFolder: mode: select key: shared permission: rw
# 選填的發行者資訊。metadata: license: MIT contact_email: you@example.com homepage: https://example.com
# 選填的入口政策;需要 Go entry gate 與適合的 API routes。# entry: app-privilege
# 使用 synopkgland add portal 啟用;需要 rootOps 或 delegate,並符合 portal 的最低 DSM 版本。# portal: {alias: my-app}
# 選填的前景服務;請提供自己的 payload 目錄。# 與 jobs 共用時,也需要 until-revoked delegate。# daemon:# exec: bin/service# targets: {x86_64: daemon/x86_64, aarch64: daemon/aarch64}# args: []# env: {}# timeouts: {start: 30, stop: 30, status: 5, uninstall: 60}# uninstall_args: [cleanup]以下預設值是解析器的預設值;模板提供的值另行標示。dsm-package.yaml 與 compose.yaml 不能共存(PROJECT_RUNTIME_EXCLUSIVE)。未知的頂層鍵會回報 STANDALONE_FIELD_UNKNOWN。處理方式請參閱錯誤碼。
| 欄位 | 型別 | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
schema | 整數 | 是 | — | 必須為 2;STANDALONE_SCHEMA_INVALID。 |
package | 字串 | 是 | — | 符合 ^[A-Za-z][A-Za-z0-9]{1,63}$;STANDALONE_PACKAGE_INVALID。 |
version | 字串 | 是 | — | 以句點分隔的一至四段數字;STANDALONE_VERSION_INVALID。在 YAML 中請加上引號。 |
build | 整數 | 是 | — | 範圍為 1–9999;補滿四位數後接在 version 後方;STANDALONE_BUILD_INVALID。 |
displayname | 字串 | 是 | — | 非空的單行文字,不含雙引號或反斜線;STANDALONE_TEXT_INVALID。 |
description | 字串 | 是 | — | 與 displayname 相同的文字規則;STANDALONE_TEXT_INVALID。 |
maintainer | 字串 | 是 | — | 與 displayname 相同的文字規則;STANDALONE_TEXT_INVALID。 |
os_min_ver | 字串 | 是 | 模板:7.1-42661 | 完整版本/組建編號,符合 ^\d+\.\d+(\.\d+)?-\d+$;STANDALONE_OS_MIN_VER_INVALID。功能的最低版本請參閱平台。 |
arches | 字串陣列 | 是 | 模板:[x86_64, aarch64] | 非空且不重複的 x86_64、aarch64、armv7 清單;STANDALONE_ARCHES_INVALID。 |
backend | 物件 | 是 | — | Go 原始碼或各架構的 CGI 執行檔;STANDALONE_BACKEND_INVALID。 |
ui | 物件 | 是 | — | 靜態輸出目錄與選填的建置指令;STANDALONE_UI_INVALID。 |
icon | 路徑 | 否 | SDK 預設圖示 | 至少 256×256 的正方形 PNG,或放 icon_<size>.png(16、24、32、48、64、72、256;必須有 icon_256.png,缺少的尺寸由它縮放)的目錄。不接受 SVG。建置時產生 PACKAGE_ICON.PNG、PACKAGE_ICON_256.PNG 與 ui/images/app_<size>.png;每個套件中心圖示不可超過套件來源的 256 KiB 上限。check 與 inspect 會標示使用自訂或預設圖示;STANDALONE_ICON_INVALID。 |
capabilities | 物件 | 否 | {} | 明確宣告能力;無效的名稱或值會回報 CAPABILITY_INVALID。 |
i18n | 物件 | 否 | 無 | 訊息目錄、詞彙表與套件中心翻譯文字;STANDALONE_I18N_INVALID。 |
daemon | 物件 | 否 | 無 | 固定的前景服務;STANDALONE_DAEMON_INVALID。 |
install | 物件 | 否 | 無 | 僅接受 sharedFolder;STANDALONE_SHARED_FOLDER_INVALID。 |
entry | 字串 | 否 | API 權限政策 | admin-only 或 app-privilege;STANDALONE_ENTRY_INVALID。 |
portal | 物件 | 否 | 停用 | {} 或 {alias: ...};STANDALONE_PORTAL_INVALID。需要 rootOps 或 delegate;STANDALONE_PORTAL_REQUIRES_EXECUTOR。 |
login_style | 物件 | 否 | CLI 預設樣式 | 登入入口的主色、桌布與標題圖;需要 portal。見下方 login_style;STANDALONE_LOGIN_STYLE_INVALID、STANDALONE_LOGIN_STYLE_IMAGE_INVALID。 |
root | 物件 | 否 | 無 | root/ 程式的設定:programs.<name>(kind、參數 schema、run 與 job 限制)、stop(套件停止與升級時 executor 執行的程式)與 state: true(只有 root 可讀、升級保留的 /volumeN/@synopkgland/<package>)。需要 capabilities.rootOps: true;STANDALONE_ROOT_PROGRAMS_INVALID。App 的 SDK executor 必須支援這些設定;EXECUTOR_ROOT_PROGRAMS_UNSUPPORTED。 |
uninstall | 物件 | 否 | 無 | purge(exec、args、env、timeout 2–120 秒、選用 root)在真正解除安裝時、executor purge 之前以套件帳號執行;state.items[].key 列出解除安裝精靈可刪除的狀態,每項需要 uninstall.state.<key> 文字。UNINSTALL_INVALID。 |
metadata | 物件 | 否 | 無 | 發行者文字、連結與螢幕截圖;無效的 metadata 會回報 STANDALONE_TEXT_INVALID。 |
reproducible | 物件 | 否 | 無 | build --verify-reproducible 的設定:inputs 列出納入依賴指紋的檔案,clean 列出第二次建置前要刪除的路徑(可用 {arch})。參閱可重現建置;REPRODUCIBLE_INVALID。 |
以下欄位使用專案內的相對路徑。
| 規則 | 驗證錯誤碼 |
|---|---|
| 路徑必須是非空字串。 | STANDALONE_PATH_INVALID |
| 路徑必須解析至專案內,且不能是絕對路徑。 | STANDALONE_PATH_OUTSIDE_PROJECT |
backend
Section titled “backend”選擇一種後端格式。
| 欄位 | 型別 | 必填 | 預設值 | 規則與驗證錯誤碼 |
|---|---|---|---|---|
kind | 字串 | 是 | — | go 或 binary;STANDALONE_BACKEND_INVALID。未知的 backend 鍵也會回報此錯誤碼。 |
dir | 路徑 | Go 必填 | — | 原始碼目錄;適用路徑規則。Go API 政策檔 backend/internal/api/permissions.json 必須有效;STANDALONE_API_PERMISSIONS_INVALID。 |
main | 字串 | 否;僅限 Go | ./cmd/app | 符合 ^\./[A-Za-z0-9_./-]*$ 且不含 ..;STANDALONE_BACKEND_INVALID。 |
files | 架構對應路徑的 map | binary 必填 | — | 必須恰好對應已宣告的架構;缺少項目:STANDALONE_BINARY_ARCH_MISSING;多出項目:STANDALONE_BACKEND_INVALID;適用路徑規則。 |
| Binary 檔案規則 | 驗證錯誤碼 |
|---|---|
| 檔案必須存在。 | STANDALONE_BINARY_MISSING |
| 必須是一般檔案,不能是符號連結或目錄。 | STANDALONE_BINARY_NOT_REGULAR |
| 解析後的檔案必須位於專案內。 | STANDALONE_PATH_OUTSIDE_PROJECT |
| 大小上限:256 MiB。 | STANDALONE_BINARY_TOO_LARGE |
| 正確位元寬度的 little-endian Linux ELF。 | STANDALONE_BINARY_NOT_ELF |
| ELF machine 必須符合架構。 | STANDALONE_BINARY_ARCH_MISMATCH |
| 靜態連結;不含動態 interpreter。 | STANDALONE_BINARY_DYNAMIC |
建置會產生套件要複製的靜態 UI 檔案。
| 欄位 | 型別 | 必填 | 預設值 | 規則與驗證錯誤碼 |
|---|---|---|---|---|
dir | 路徑 | 是 | — | 建置時必須包含 app.js 與 app.css;STANDALONE_UI_ENTRY_MISSING;適用路徑規則。 |
build | 物件 | 使用 identity 時 | 無 | capabilities.identity 需要建置宣告;CAPABILITY_COMBINATION_INVALID。 |
build.cwd | 路徑 | 使用 build 時 | — | 工作目錄;適用路徑規則。 |
build.command | 字串陣列 | 使用 build 時 | — | 非空陣列,且每個字串非空;以參數方式執行,不經過 shell;STANDALONE_UI_BUILD_INVALID。 |
capabilities
Section titled “capabilities”CLI 的 login 會寫入 identity;root-ops 會寫入 rootOps。
| 欄位 | 型別 | 必填 | 預設值 | 規則與驗證錯誤碼 |
|---|---|---|---|---|
files | 字串 | 否 | 停用 | 僅接受 session;binary 會以 CAPABILITY_UNSUPPORTED 拒絕此能力。其他值:CAPABILITY_INVALID。 |
jobs | 布林值或物件 | 否 | 停用 | true 或 {worker: sha256-v1};binary 會以 CAPABILITY_UNSUPPORTED 拒絕。無效宣告:CAPABILITY_INVALID。 |
identity | 字串 | 否 | 停用 | 僅接受 standalone;需要 UI 建置宣告(CAPABILITY_COMBINATION_INVALID);binary:CAPABILITY_UNSUPPORTED;其他值:CAPABILITY_INVALID。 |
rootOps | 布林值 | 否 | 停用 | 僅接受 true;需要有效的 root/*.sh 檔案。其他值:CAPABILITY_INVALID。執行 root 操作需要管理員核准。 |
delegate | 物件 | 否 | 停用 | 自動啟用 jobs;無效政策:CAPABILITY_INVALID;binary:CAPABILITY_UNSUPPORTED。需要管理員核准。 |
capabilities.jobs
Section titled “capabilities.jobs”true 是以下 worker 宣告的簡寫。
| 欄位 | 型別 | 必填 | 預設值 | 規則與驗證錯誤碼 |
|---|---|---|---|---|
worker | 字串 | 物件格式時 | jobs: true 時為 sha256-v1 | 必須為 sha256-v1,物件不能有其他鍵;CAPABILITY_INVALID。 |
capabilities.rootOps
Section titled “capabilities.rootOps”root/ 只能放固定的操作 script。
| 規則 | 驗證錯誤碼 |
|---|---|
| 啟用時至少需要一個 script。 | STANDALONE_ROOT_OPS_MISSING |
有 root/ 目錄時必須宣告 rootOps: true。 | STANDALONE_ROOT_OPS_UNUSED |
每個檔名符合 ^[a-z][a-z0-9_]{0,31}\.sh$;僅限一般檔案,不接受符號連結。 | STANDALONE_ROOT_OP_INVALID |
每個 script 最多 16 KiB,以 #!/bin/sh 加換行開頭;有效 UTF-8,不含 NUL。 | STANDALONE_ROOT_OP_INVALID |
最低 DSM:7.1-42661。 | STANDALONE_OS_MIN_VER_INVALID |
capabilities.delegate
Section titled “capabilities.delegate”init --with delegate 與 add delegate 會寫入 {scope: install-selected, operations: [files.moveFromStaging], destinations: [save], lifetime: until-revoked}。這是 CLI 產生的宣告,不是解析器的預設值。
| 欄位 | 型別 | 必填 | 預設值 | 規則與驗證錯誤碼 |
|---|---|---|---|---|
scope | 字串 | 是 | CLI:install-selected | home、shared:<name> 或 install-selected。共用資料夾名稱不能含斜線、反斜線、控制字元、冒號、前後空白,也不能為 ./..。install-selected 需要 until-revoked;CAPABILITY_INVALID。 |
operations | 字串陣列 | 是 | CLI:[files.moveFromStaging] | 非空且不重複。使用 until-revoked 時只能為 [files.moveFromStaging]。未使用 lifetime 與 destinations 時,可選 files.list、files.info、files.createFolder、files.checkPermission、files.write;CAPABILITY_INVALID。 |
destinations | 字串陣列 | 使用 until-revoked 時 | CLI:[save] | 1–64 個不重複的鍵,符合 ^[a-z][a-z0-9_-]{0,63}$;CAPABILITY_INVALID。省略 lifetime 時也請省略此欄位。 |
lifetime | 字串 | 使用 destinations 或 moveFromStaging 時 | CLI:until-revoked | 僅接受 until-revoked;使用其他列出的檔案操作時請省略;CAPABILITY_INVALID。 |
daemon
Section titled “daemon”宣告一個固定的前景執行檔,以及各架構的 payload 目錄。
| 欄位 | 型別 | 必填 | 預設值 | 規則與驗證錯誤碼 |
|---|---|---|---|---|
exec | 字串 | 是 | — | 相對於 payload 的路徑;最多 200 字元,不含 ./.. 區段;第一段使用英文字母、數字、_、-,後續區段也可使用 .;STANDALONE_DAEMON_INVALID。 |
targets | 架構對應路徑的 map | 是 | — | 每個已宣告架構恰好一個目錄;相對路徑、非空、位於專案內、不含 .. 區段或 NUL;STANDALONE_DAEMON_INVALID。 |
args | 字串陣列 | 否 | [] | 最多 64 個字串,每個最多 4096 bytes,不含 NUL;僅允許 ${SYNOPKG_PKGDEST} 與 ${SYNOPKG_PKGVAR} 替換;STANDALONE_DAEMON_INVALID。 |
uninstall_args | 字串陣列 | 否 | 無 | 與 args 相同的規則;提供時不能為空;解除安裝時停止服務後執行固定執行檔;STANDALONE_DAEMON_INVALID。 |
env | 字串對應字串的 map | 否 | {} | 最多 64 個項目;值適用參數字串規則;STANDALONE_DAEMON_INVALID。 |
env.<name> | 字串 | 否 | — | 鍵符合 ^[A-Z][A-Z0-9_]{0,63}$。拒絕 PATH、HOME、TMPDIR、ENV、BASH_ENV、SHELLOPTS、BASHOPTS、GODEBUG、GOTRACEBACK、LD_*、DYLD_*、SYNOPKG_*;STANDALONE_DAEMON_INVALID。 |
timeouts | 物件 | 否 | {start: 30, stop: 30, status: 5, uninstall: 60} | 僅接受下列四個鍵;STANDALONE_DAEMON_INVALID。 |
timeouts.start | 整數秒數 | 否 | 30 | start 等待 daemon 穩定運行的時間。範圍 2–120;STANDALONE_DAEMON_INVALID。 |
timeouts.stop | 整數秒數 | 否 | 30 | 送出 SIGTERM 後,daemon 有 stop - 1 秒可結束,之後送 SIGKILL。範圍 2–120;STANDALONE_DAEMON_INVALID。 |
timeouts.status | 整數秒數 | 否 | 5 | 範圍 1–10;STANDALONE_DAEMON_INVALID。 |
timeouts.uninstall | 整數秒數 | 否 | 60 | 解除安裝時,停止服務後 uninstall_args 可執行的時間,逾時送 SIGTERM。與 stop 互相獨立。範圍 2–120;STANDALONE_DAEMON_INVALID。 |
逾時請依負載中的 NAS 實測決定,不要用閒置時的數字。開機時許多套件同時啟動,忙碌的儲存空間可能讓啟動超過 5 秒、撤銷超過 9 秒。請在 NAS 忙碌時(例如資料清理或大量複製期間)量測 start、stop 與 uninstall_args 指令的時間,再取最慢時間的約兩倍,並落在上述範圍內。調高數值只會讓 DSM 在程序卡住時等得更久;很快就緒或很快結束的 daemon 不會變慢。DSM 本身的套件 unit 允許 start 與 stop 各 3600 秒;preuninst 是否另有上限未知。
| 組合或 payload 規則 | 驗證錯誤碼 |
|---|---|
Jobs 與 daemon 共存時,必須使用 delegate.lifetime: until-revoked。 | CAPABILITY_COMBINATION_INVALID |
| Payload 目錄僅含一般檔案與目錄,位於專案內,不含符號連結或 setuid/setgid 檔案,總大小最多 512 MiB。 | STANDALONE_DAEMON_PAYLOAD_INVALID |
| 執行檔必須通過 binary 檔案規則。 | 上述 binary 錯誤碼 |
install.sharedFolder
Section titled “install.sharedFolder”選擇現有的共用資料夾或建立指定名稱的資料夾;兩種模式都不會在解除安裝時刪除共用資料夾。
| 欄位 | 型別 | 必填 | 預設值 | 規則與驗證錯誤碼 |
|---|---|---|---|---|
mode | 字串 | 是 | — | select 或 create;STANDALONE_SHARED_FOLDER_INVALID。 |
key | 字串 | 是 | CLI init:shared | 符合 ^[a-z][a-z0-9_]{0,31}$;不能以 pkgwizard_、synopkg 或 change_ 開頭;STANDALONE_SHARED_FOLDER_INVALID。 |
name | 字串 | 僅 create 時 | — | 符合 ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$;拒絕 homes、users、volume1、usbshare1 等 DSM 系統名稱。select 時禁止填寫;STANDALONE_SHARED_FOLDER_INVALID。 |
permission | 字串 | 是 | CLI init:rw | ro 或 rw;select 模式需要管理員在安裝後授予套件帳號此權限。create 模式透過 DSM 授予;STANDALONE_SHARED_FOLDER_INVALID。 |
訊息目錄的 locale 與 DSM 語言代碼列於平台。
| 欄位 | 型別 | 必填 | 預設值 | 規則與驗證錯誤碼 |
|---|---|---|---|---|
messages | 路徑 | 使用 glossary 時 | 無 | 存放 <locale>.json 的目錄;適用路徑規則。缺少英文訊息檔:STANDALONE_I18N_MESSAGES_MISSING;不支援的 locale:STANDALONE_I18N_LOCALE_UNSUPPORTED。 |
glossary | 路徑 | 否 | 無 | JSON 詞彙表;需要 messages(STANDALONE_I18N_INVALID);適用路徑規則;無效檔案:STANDALONE_I18N_GLOSSARY_INVALID。 |
info | locale 對應物件的 map | 否 | {} | 支援的 locale,不包含 en;英文使用頂層文字。未知鍵或 locale:STANDALONE_I18N_INVALID。 |
info.<locale>.displayname | 字串 | 否 | 頂層文字 | 與 displayname 相同的單行文字規則;STANDALONE_TEXT_INVALID。 |
info.<locale>.description | 字串 | 否 | 頂層文字 | 與 description 相同的單行文字規則;STANDALONE_TEXT_INVALID。 |
info 也決定 App 在 DSM 中的名稱。只要有一個翻譯,建置就會為英文與每個翻譯語言寫入 ui/texts/<DSM 語言>/strings,主選單項目與視窗標題改從這些檔案取字。沒有自己 displayname 或 description 的語言顯示英文。沒有 info 時,標題維持頂層的英文 displayname。
| 訊息目錄或詞彙表欄位 | 型別 | 必填 | 預設值 | 規則與驗證錯誤碼 |
|---|---|---|---|---|
| 訊息鍵 | 字串 | 每則訊息 | — | 扁平的 JSON 物件;以句點分隔的鍵符合 ^[A-Za-z][A-Za-z0-9_-]*(\.[A-Za-z0-9_-]+)*$,值為字串;STANDALONE_I18N_CATALOG_INVALID。 |
| 訊息鍵集合 | 字串鍵 | 是 | 英文鍵 | 必須與 en.json 的鍵完全相同;STANDALONE_I18N_KEYS_MISMATCH。 |
| 訊息預留位置 | {placeholder} 集合 | 是 | 英文預留位置 | 每則翻譯訊息的預留位置必須相同;STANDALONE_I18N_PLACEHOLDER_MISMATCH。 |
terms | 物件陣列 | 詞彙表必填 | — | JSON 陣列;STANDALONE_I18N_GLOSSARY_INVALID。 |
terms[].id | 字串 | 是 | — | 詞彙識別名稱;STANDALONE_I18N_GLOSSARY_INVALID。 |
terms[].text | locale 對應字串的 map | 是 | — | 支援的 locale 與非空文字;STANDALONE_I18N_GLOSSARY_INVALID。 |
terms[].keys | 字串陣列 | 否 | [] | 已存在的英文訊息鍵;STANDALONE_I18N_GLOSSARY_INVALID。列出的每則翻譯必須包含對應 locale 的詞彙,不區分大小寫;STANDALONE_I18N_GLOSSARY_MISMATCH。 |
入口政策會補充你的 API 權限。
| 值或規則 | 效果與驗證錯誤碼 |
|---|---|
admin-only | 僅管理員可進入。管理員是所有 route 的下限,包括能力加入的 route,其他使用者也看不到啟動圖示。permissions.json 中標為 authenticated 或 public 的 route 會回報 STANDALONE_ENTRY_WIDENED。 |
| 其他值 | STANDALONE_ENTRY_INVALID。 |
app-privilege | 檢查 DSM 應用程式權限;permissions.json 至少需要一個 authenticated route,否則回報 STANDALONE_ENTRY_INVALID。 |
| 省略 | 使用 API 權限政策。 |
| 後端條件 | Go 後端必須在 main.go 接上 entry gate;缺少支援或使用 binary 後端會回報 STANDALONE_ENTRY_UNSUPPORTED。 |
portal
Section titled “portal”空物件會啟用「應用程式入口網站 (Application Portal)」,並產生預設別名。
| 欄位 | 型別 | 必填 | 預設值 | 規則與驗證錯誤碼 |
|---|---|---|---|---|
alias | 字串 | 否 | 小寫套件 ID;保留名稱則使用 app- 加穩定雜湊值 | 1–64 個小寫英文字母、數字與連字號;以英文字母或數字開頭及結尾。未知 portal 鍵或無效別名:STANDALONE_PORTAL_INVALID。 |
| 保留別名 | 字串 | — | — | 拒絕 dsfile、indexdb、mobile、oauth、scripts、sharing、ssdp、synosdsjslib、synohdpack、webapi、webman、calendar、chatplus、contacts、drive、file、photo、sso、synologymeet;STANDALONE_PORTAL_INVALID。 |
| 最低 DSM | 版本/組建編號 | 啟用時 | — | 7.1-42661;STANDALONE_PORTAL_MIN_DSM。 |
| Executor | 能力 | 啟用時 | — | capabilities.rootOps 或 capabilities.delegate;STANDALONE_PORTAL_REQUIRES_EXECUTOR。 |
login_style
Section titled “login_style”有 portal 的 App 會帶 DSM 的登入樣式:「控制台 › 登入入口 › 應用程式」顯示縮圖,別名登入頁有桌布、按鈕色與標題圖。省略 login_style 時使用 CLI 內建的中性樣式,標題圖用 App icon。check 與 inspect 會印出使用的樣式。
| 欄位 | 類型 | 必填 | 預設 | 規則與驗證錯誤 |
|---|---|---|---|---|
color | 字串 | 否 | #2F6BD8 | #RRGGBB;STANDALONE_LOGIN_STYLE_INVALID。 |
wallpaper | 路徑 | 否 | CLI 預設桌布 | 專案內的 JPEG,至少 1920×1080、最多 2 MiB;必須與 wallpaper_thumbnail 一起設定。STANDALONE_LOGIN_STYLE_IMAGE_INVALID。 |
wallpaper_thumbnail | 路徑 | 與 wallpaper 同時 | CLI 預設縮圖 | 專案內 320×200 的 JPEG;STANDALONE_LOGIN_STYLE_IMAGE_INVALID。 |
title | 路徑 | 否 | App icon | 專案內 680×124 的 PNG;STANDALONE_LOGIN_STYLE_IMAGE_INVALID。 |
沒有 portal 卻設定 login_style,或有其他鍵:STANDALONE_LOGIN_STYLE_INVALID。
metadata
Section titled “metadata”所有 metadata 欄位都可省略;無效欄位或值會回報 STANDALONE_TEXT_INVALID。
| 欄位 | 型別 | 必填 | 預設值 | 規則與驗證錯誤碼 |
|---|---|---|---|---|
long_description | 字串或 locale map | 否 | 無 | 適用下方文字規則;STANDALONE_TEXT_INVALID。 |
changelog | 字串或 locale map | 否 | 無 | 適用下方文字規則;map 的英文項目提供 INFO 文字,沒有英文時使用第一個項目;STANDALONE_TEXT_INVALID。 |
contact_email | 字串 | 否 | 無 | 網域含句點且不含空白的電子郵件地址;STANDALONE_TEXT_INVALID。 |
support_email | 字串 | 否 | 無 | 相同的電子郵件規則;未提供 support_url 時產生 mailto: 支援連結;STANDALONE_TEXT_INVALID。 |
homepage | 字串 | 否 | 無 | 適用下方 URL 規則;STANDALONE_TEXT_INVALID。 |
source_url | 字串 | 否 | 無 | 適用下方 URL 規則;STANDALONE_TEXT_INVALID。 |
issues_url | 字串 | 否 | 無 | 適用下方 URL 規則;STANDALONE_TEXT_INVALID。 |
license | 字串 | 否 | 無 | 適用下方文字規則;STANDALONE_TEXT_INVALID。 |
maintainer_url | 字串 | 否 | 無 | 適用下方 URL 規則;STANDALONE_TEXT_INVALID。 |
distributor | 字串 | 否 | 無 | 適用下方文字規則;STANDALONE_TEXT_INVALID。 |
distributor_url | 字串 | 否 | 無 | 適用下方 URL 規則;STANDALONE_TEXT_INVALID。 |
support_url | 字串 | 否 | 無 | HTTP(S) URL 或有效的 mailto: 地址;STANDALONE_TEXT_INVALID。 |
helpurl | 字串 | 否 | 無 | 適用下方 URL 規則;STANDALONE_TEXT_INVALID。 |
screenshots | 字串陣列 | 否 | 無 | 最多 12 個 HTTP(S) URL;STANDALONE_TEXT_INVALID。 |
| Metadata 規則 | 限制與驗證錯誤碼 |
|---|---|
| 文字值 | 最多 16,000 字元;不能含控制字元,但允許 tab、換行與歸位字元;STANDALONE_TEXT_INVALID。 |
| Locale map | 最多 32 個項目;鍵符合 ^[a-z]{2}(-[A-Za-z]{2})?$;值適用文字規則;STANDALONE_TEXT_INVALID。 |
| URL | HTTP(S)、最多 2048 字元、不含使用者名稱或密碼;STANDALONE_TEXT_INVALID。 |
| 整個物件 | JSON 表示法最多 32,000 字元;拒絕未知鍵;STANDALONE_TEXT_INVALID。 |