# 发布分发 ## 功能 发布时可以分发 `bt-app.exe build` 生成的 `dist/{app.name}.exe`,也可以面向已安装 bt-app 的用户分发 `bt-app.exe pack` 生成的 `dist/{app.name}.btr`。独立 exe 尾部包含应用资源和运行时;BTR 只包含配置与资源,可让多个软件共用同一份 bt-app。构建目录不再生成额外的 FFI 许可证旁路文件。 ## BTR 分发 BTR 适合工具集合、企业内部软件库和统一工具条。发布方只需分发较小的 `.btr`,用户机器保留一份与系统架构匹配的 bt-app。运行命令: ```powershell bt-app.exe run .\MyTool.btr ``` Windows 第一次安装通用运行时时,在运行时最终路径执行 `bt-app.exe associate`,可为当前用户注册 `.btr` 打开命令。PATH 和文件关联是两件事:PATH 只支持终端直接输入 `bt-app`,双击需要文件关联。BTR 的 `app.file_associations` 不会在外部运行时自动注册,避免下载或临时打开的软件修改其他业务文件类型。 每次运行 BTR 都创建独立应用进程,VM、窗口、托盘、全局快捷键和退出互不影响。BTR 节省的是重复附带运行时的磁盘和分发体积;多个同时运行的软件仍可能各自创建 WebView 进程。 ## Windows Windows 用户直接双击打包后的 exe 运行。若系统缺少 WebView2 Runtime,`bt-app` 会在启动错误路径给出友好提示,用户需要安装 Microsoft Edge WebView2 Runtime。 建议发布前确认: - `dev.console` 是否为 `false`。 - `app.icon` 是否是有效 `.ico`。 - `dist/{app.name}.exe` 能在干净目录中独立运行。 - 如果分发 BTR,使用目标版本 bt-app 执行 `info` 和 `run`,并检查图标、启动参数及最低版本提示。 - `static` 模式所需资源都进入 Bundle。 - `server` 模式的端口没有和常见软件冲突。 - 配置 `app.file_associations` 时,至少启动一次打包后的 exe,并验证双击文件、启动参数和右键菜单;Windows 已存在的用户默认应用选择需由用户在系统设置中确认。 ## Linux 和 macOS Linux 官方包中的 `bt` 命令行解释器使用 `x86_64-unknown-linux-musl` 静态目标构建,部署脚本和 Web 服务时不依赖目标服务器的 glibc 版本。该静态 CLI 使用 `--no-default-features --features extensions` 构建,不包含只支持 GNU Linux 目标的 FFI;脚本可用 `BT.has('ffi')` 检测此边界。若服务器执行 `./bt -c main.bt` 报 `GLIBC_2.38 not found` 或 `GLIBC_2.39 not found`,应替换为新的 Linux 官方包中的 `bt`。 Linux 的 `bt-app` 是桌面应用引擎,仍依赖目标系统的 WebKitGTK、桌面会话和图形运行环境,不按 musl 静态方式发布。面向 Linux 桌面分发时,需要在目标发行版上做实际启动验证。 macOS 使用 Darwin/libSystem,不使用 glibc,因此不会出现 Linux 的 `GLIBC_x.y not found` 报错。macOS 分发应使用对应架构的 macOS 构建产物,并按系统要求处理签名、安全提示和运行权限。 当前项目的正式打包输出仍以 `.exe` 单文件逻辑为主,`bt-app.exe export` 是预留入口,跨平台导出能力当前版本暂未完成。需要面向 Linux 或 macOS 发布时,应以当前实际构建产物和运行环境验证结果为准,不要把 `.icns`、`.png` 平台图标写成已支持打包能力。 ## 远程应用更新 远程入口模式下,软件壳本身可以保持稳定,业务页面和 BT 脚本可以部署在服务器端。开发者更新服务器内容后,用户再次打开应用即可使用新版本功能,不一定需要重新下载安装客户端。 ```json { "app": { "mode": "remote", "entry": "https://example.com/app" } } ``` 远程页面当前可以调用 `window.bt.call()` 和窗口控制能力。发布时只应配置可信 HTTPS 地址,并注意远程页面的账号、权限和内容安全。 ## 本地打包应用更新 `static` 和 `server` 模式的本地资源已经打进 exe 或 BTR。更新页面、BT 脚本、图标或 `app.json` 后,需要重新执行对应命令: ```bash ./bt-app.exe build ./bt-app.exe pack ``` 然后把新的 `dist/{app.name}.exe` 或 `dist/{app.name}.btr` 分发给用户。 ## WebView2 依赖 Windows 桌面窗口依赖 WebView2。开发和发布测试时,如果窗口无法打开、提示 WebView 相关错误,优先检查系统是否安装 WebView2 Runtime。