From 7d5498cc78bed597aa9a92f9d406fa2e42de6b0b Mon Sep 17 00:00:00 2001 From: JunXiaoRuo <47996900+JunXiaoRuo@users.noreply.github.com> Date: Sat, 10 Oct 2026 21:11:43 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=8F=91=E5=B8=83=20v1.7.7=20=E5=B9=B6?= =?UTF-8?q?=E6=8E=A5=E5=85=A5=20macOS=20=E7=AD=BE=E5=90=8D=E5=85=AC?= =?UTF-8?q?=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 73 +++++++++++++++++++++++-- README.md | 7 +-- README.zh-CN.md | 7 +-- docs-site/components/DownloadPanel.vue | 1 - docs-site/guide/build.md | 2 +- docs-site/guide/download.md | 3 +- docs-site/guide/installation.md | 2 +- docs-site/guide/platforms.md | 2 +- docs/update.md | 62 +++++++++++++++++++-- package-lock.json | 4 +- package.json | 5 +- public/app.css | 10 ++++ scripts/regression-check.js | 7 ++- scripts/release-artifacts-check.js | 9 +-- scripts/release-publish-assets.js | 2 +- scripts/terminal-quick-command-check.js | 2 + 16 files changed, 162 insertions(+), 36 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5f4f9e8..12cf26f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -134,7 +134,7 @@ jobs: run: npm ci - name: Build macOS packages - run: npm run dist -- --mac dmg zip --x64 --arm64 --publish never + run: npm run dist -- --mac dmg --x64 --arm64 --publish never env: CSC_IDENTITY_AUTO_DISCOVERY: false @@ -170,15 +170,76 @@ jobs: done < <(find release -path "*/${PRODUCT_FILENAME}.app/Contents/Info.plist" -type f -print) test "$app_count" -eq 2 - name: Upload macOS workflow artifacts + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: terma-macos-unsigned-x64-arm64 + overwrite: true + retention-days: 7 + if-no-files-found: error + path: release/*.dmg + + macos-sign: + name: macOS Sign and notarize + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') + needs: macos + runs-on: [self-hosted, macOS, ARM64, terma-signer] + environment: macos-signing + timeout-minutes: 60 + concurrency: + group: terma-macos-sign-${{ github.ref }} + cancel-in-progress: false + permissions: + contents: read + steps: + - name: Download unsigned macOS DMGs + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: terma-macos-unsigned-x64-arm64 + digest-mismatch: error + path: macos-unsigned + + - name: Sign and notarize macOS DMGs + shell: bash + run: | + rm -rf macos-signed + mkdir -p macos-signed + /Users/bing/terma-actions-runner/sign-terma-release.sh \ + "$GITHUB_WORKSPACE/macos-unsigned" \ + "$GITHUB_WORKSPACE/macos-signed" \ + "$GITHUB_REF_NAME" + + - name: Verify signed and notarized macOS DMGs + shell: bash + run: | + set -euo pipefail + shopt -s nullglob + dmgs=(macos-signed/*.dmg) + test "${#dmgs[@]}" -eq 2 + for dmg in "${dmgs[@]}"; do + xcrun stapler validate "$dmg" + ( + mountpoint="$(mktemp -d)" + cleanup() { + hdiutil detach "$mountpoint" -quiet >/dev/null 2>&1 || true + rmdir "$mountpoint" 2>/dev/null || true + } + trap cleanup EXIT + hdiutil attach "$dmg" -nobrowse -readonly -mountpoint "$mountpoint" >/dev/null + app="$(find "$mountpoint" -type d -name '*.app' -print -quit)" + test -n "$app" + codesign --verify --deep --strict --verbose=2 "$app" + spctl -a -vvv -t open --context context:primary-signature "$app" + ) + done + + - name: Upload signed macOS workflow artifacts uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: Terma-macos-x64-arm64 overwrite: true retention-days: 7 - path: | - release/*.dmg - release/*.zip - release/*.blockmap + if-no-files-found: error + path: macos-signed/*.dmg linux-source: name: Linux Source @@ -242,7 +303,7 @@ jobs: needs: - windows - linux - - macos + - macos-sign - linux-source runs-on: ubuntu-latest permissions: diff --git a/README.md b/README.md index 3d3716f..f1625bd 100644 --- a/README.md +++ b/README.md @@ -131,7 +131,7 @@ The desktop app is an Electron container around the same Web UI and Node.js serv | Platform | Desktop | Web mode | Release artifacts | | --- | --- | --- | --- | | Windows 10/11 | Supported | Supported | Installer and portable executable | -| macOS | Supported | Supported | DMG and installation-free ZIP | +| macOS | Supported | Supported | Signed and notarized DMG | | Linux | Supported | Supported | AppImage, DEB, and RPM | | Termux / headless Linux | Not recommended | Supported | Run from source | @@ -263,15 +263,14 @@ npm run dist -- --win nsis portable --x64 --publish never npm run dist -- --linux AppImage deb rpm --x64 --publish never # macOS: Intel and Apple Silicon -npm run dist -- --mac dmg zip --x64 --arm64 --publish never +npm run dist -- --mac dmg --x64 --arm64 --publish never ``` Build output is written to `release/`: - Windows installer: run `*-installer.exe` and follow the wizard; run `*-portable.exe` directly for the portable build. - Linux: run `chmod +x release/*.AppImage` before launching an AppImage; install DEB and RPM packages with the system package manager. -- macOS DMG: open the `.dmg` for the machine architecture and drag Terma to Applications. -- macOS ZIP: extract and run `Terma.app` without installation. “Installation-free” applies to the app bundle only; runtime data is still stored in the system user-data directory. Choose `x64` for Intel or `arm64` for Apple Silicon. +- macOS DMG: release packages are signed and notarized; open the `.dmg` for the machine architecture and drag Terma to Applications. Choose `x64` for Intel or `arm64` for Apple Silicon. Pushing a `v*` tag starts the Release workflow, which builds and verifies Windows, Linux, and macOS artifacts separately. diff --git a/README.zh-CN.md b/README.zh-CN.md index fe322b2..16b1f71 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -131,7 +131,7 @@ Electron 桌面端 ─┐ | 平台 | 桌面端 | Web 模式 | 发布产物 | | --- | --- | --- | --- | | Windows 10/11 | 支持 | 支持 | 安装版、便携版 | -| macOS | 支持 | 支持 | DMG 安装镜像、ZIP 免安装运行包 | +| macOS | 支持 | 支持 | 已签名并公证的 DMG | | Linux | 支持 | 支持 | AppImage、DEB、RPM | | Termux / 无图形 Linux | 不建议 | 支持 | 源码运行 | @@ -263,15 +263,14 @@ npm run dist -- --win nsis portable --x64 --publish never npm run dist -- --linux AppImage deb rpm --x64 --publish never # macOS:Intel 与 Apple Silicon -npm run dist -- --mac dmg zip --x64 --arm64 --publish never +npm run dist -- --mac dmg --x64 --arm64 --publish never ``` 构建结果位于 `release/`。各平台运行方式: - Windows 安装版:运行 `*-installer.exe` 并按向导安装;便携版直接运行 `*-portable.exe`。 - Linux:AppImage 执行 `chmod +x release/*.AppImage` 后即可运行;DEB、RPM 使用系统包管理器安装。 -- macOS DMG:打开与机器架构对应的 `.dmg`,将 Terma 拖入“应用程序”后启动。 -- macOS ZIP:解压后可直接运行 `Terma.app`,无需安装;它只表示应用免安装,运行数据仍保存在系统用户数据目录。Intel 选择 `x64`,Apple Silicon 选择 `arm64`。 +- macOS DMG:发布包会完成代码签名和公证;打开与机器架构对应的 `.dmg`,将 Terma 拖入“应用程序”后启动。Intel 选择 `x64`,Apple Silicon 选择 `arm64`。 推送 `v*` 标签时,Release 工作流会在 Windows、Linux 和 macOS 上分别构建并验证产物。 diff --git a/docs-site/components/DownloadPanel.vue b/docs-site/components/DownloadPanel.vue index 21151b2..c9efaf2 100644 --- a/docs-site/components/DownloadPanel.vue +++ b/docs-site/components/DownloadPanel.vue @@ -30,7 +30,6 @@ const definitions = computed(() => { const suffix = architecture.value === 'arm64' ? 'arm64' : 'x64' return [ { key: 'dmg', label: '安装镜像', extension: 'dmg', filename: `Terma-${version.value}-macos-${suffix}.dmg` }, - { key: 'zip', label: '免安装压缩包', extension: 'zip', filename: `Terma-${version.value}-macos-${suffix}.zip` }, ] } return [ diff --git a/docs-site/guide/build.md b/docs-site/guide/build.md index cb63787..32f548f 100644 --- a/docs-site/guide/build.md +++ b/docs-site/guide/build.md @@ -20,6 +20,6 @@ Windows/macOS 构建复用 Electron 头文件缓存,默认原站准备失败 npm run dist ``` -构建结果位于 `release/`。Windows 会生成安装版和便携版,Linux 会生成 AppImage、DEB、RPM,macOS 会生成 DMG 和 ZIP。 +构建结果位于 `release/`。Windows 会生成安装版和便携版,Linux 会生成 AppImage、DEB、RPM,macOS 会生成 DMG;正式发布时由专用 macOS 签名机完成代码签名和公证。 发布前应在目标平台验证启动、SSH、终端、SFTP、远程桌面和更新检查,并保留对应的第三方许可证文件。 diff --git a/docs-site/guide/download.md b/docs-site/guide/download.md index 7be0dfb..b5fbbc3 100644 --- a/docs-site/guide/download.md +++ b/docs-site/guide/download.md @@ -12,8 +12,7 @@ import DownloadPanel from '../components/DownloadPanel.vue' - **Windows 安装版**:通过安装向导安装,可选择安装目录。 - **Windows 便携版**:无需安装,直接运行;运行数据仍会保存到 Terma 的数据目录。 -- **macOS DMG**:将 Terma 拖到“应用程序”目录。Intel 选择 `x64`,Apple Silicon 选择 `arm64`。 -- **macOS ZIP**:解压后直接运行 `Terma.app`。 +- **macOS DMG**:发布包已完成代码签名和公证;将 Terma 拖到“应用程序”目录。Intel 选择 `x64`,Apple Silicon 选择 `arm64`。 - **Linux AppImage / DEB / RPM**:按发行版选择;AppImage 需要先执行 `chmod +x`。 - **SHA256SUMS**:发布文件的校验和,不是安装包。 diff --git a/docs-site/guide/installation.md b/docs-site/guide/installation.md index 1fdbfd1..f835b52 100644 --- a/docs-site/guide/installation.md +++ b/docs-site/guide/installation.md @@ -5,7 +5,7 @@ 从 [GitHub Releases](https://github.com/zmide/Terma/releases) 下载对应平台的安装包: - Windows:安装版或便携版。 -- macOS:DMG 或 ZIP;Intel 选择 `x64`,Apple Silicon 选择 `arm64`。 +- macOS:已签名并公证的 DMG;Intel 选择 `x64`,Apple Silicon 选择 `arm64`。 - Linux:AppImage、DEB 或 RPM。 首次启动后,在“设置 > 安全”中配置 Web 密码或访问 Token(自托管 Web 模式尤其重要)。 diff --git a/docs-site/guide/platforms.md b/docs-site/guide/platforms.md index f53ad38..bee3e1f 100644 --- a/docs-site/guide/platforms.md +++ b/docs-site/guide/platforms.md @@ -7,7 +7,7 @@ | 平台 | 桌面端 | Web 模式 | 发布产物 | | --- | --- | --- | --- | | Windows 10/11 | 支持 | 支持 | 安装版、便携版 | -| macOS | 支持 | 支持 | DMG、ZIP | +| macOS | 支持 | 支持 | 已签名并公证的 DMG | | Linux | 支持 | 支持 | AppImage、DEB、RPM | | Termux / 无图形 Linux | 不建议 | 支持 | 源码运行 | diff --git a/docs/update.md b/docs/update.md index a7471de..c0d9737 100644 --- a/docs/update.md +++ b/docs/update.md @@ -2,12 +2,12 @@ ## Next release draft / 下一版草稿 -[English](#v1-7-7-english) · [简体中文](#v1-7-7-zh) +[English](#v1-7-8-english) · [简体中文](#v1-7-8-zh) - + ### English -> The v1.7.7 draft continues recoverable-session, interoperability, and cross-platform remote desktop acceptance. +> The v1.7.8 draft continues recoverable-session, interoperability, and cross-platform remote desktop acceptance. #### Planned @@ -15,10 +15,10 @@ - Expand terminal AI interoperability tests with additional OpenAI-compatible gateways while keeping command execution and MCP approval boundaries unchanged. - Complete real TigerVNC/noVNC/system-client clipboard acceptance for text, Chinese, and image transfer on all three desktop platforms. - + ### 简体中文 -> v1.7.7 草稿继续推进可恢复会话、互操作场景和跨平台远程桌面验收。 +> v1.7.8 草稿继续推进可恢复会话、互操作场景和跨平台远程桌面验收。 #### 计划 @@ -26,6 +26,58 @@ - 使用更多 OpenAI 兼容网关扩展终端 AI 互操作测试,同时保持命令执行和 MCP 确认边界不变。 - 完成 TigerVNC、noVNC、系统客户端在三种桌面平台上的文本、中文和图片剪贴板验收。 +## v1.7.7 + +[English](#v1-7-7-english) · [简体中文](#v1-7-7-zh) + + +### English + +> macOS releases now use signed and notarized DMG files, and the mobile terminal shortcut bar is more compact. The macOS ZIP package is no longer generated. + +#### Important fixes + +- macOS Gatekeeper startup issue tracked in [Issue #36](https://github.com/zmide/Terma/issues/36) is addressed with signed and notarized release DMGs for both Intel and Apple silicon. + +#### Important additions + +- macOS releases now provide only signed and notarized x64 and arm64 DMG files; the less-used ZIP package is no longer generated. + +#### Other improvements + +- Mobile terminal shortcut buttons use a more compact layout while keeping horizontal scrolling available. + +#### Changes in this release + +- [PR #56](https://github.com/zmide/Terma/pull/56) — corrected release documentation, by [@JunXiaoRuo](https://github.com/JunXiaoRuo). +- [PR #57](https://github.com/zmide/Terma/pull/57) — added the Gatekeeper temporary-workaround prerequisite, by [@JunXiaoRuo](https://github.com/JunXiaoRuo). + +**Full Changelog**: [v1.7.6...v1.7.7](https://github.com/zmide/Terma/compare/v1.7.6...v1.7.7) + + +### 简体中文 + +> macOS 新版现在使用已签名并公证的 DMG,移动端终端快捷键栏也更加紧凑;使用较少的 macOS ZIP 包不再生成。 + +#### 重要修复 + +- [Issue #36](https://github.com/zmide/Terma/issues/36) 跟踪的 macOS Gatekeeper 启动问题已通过 Intel 和 Apple 芯片均使用已签名并公证的发布包得到处理。 + +#### 重要新增 + +- macOS 新版只提供已签名并公证的 x64 和 arm64 DMG,不再生成使用较少的 ZIP 包。 + +#### 其他优化 + +- 移动端终端快捷键按钮改为更紧凑的布局,同时保留横向滚动操作。 + +#### 本次变更 + +- [PR #56](https://github.com/zmide/Terma/pull/56) —— 修正文档发布说明,贡献者:[[@JunXiaoRuo](https://github.com/JunXiaoRuo)]。 +- [PR #57](https://github.com/zmide/Terma/pull/57) —— 补充 Gatekeeper 临时处理前置步骤,贡献者:[[@JunXiaoRuo](https://github.com/JunXiaoRuo)]。 + +**完整变更**:[v1.7.6...v1.7.7](https://github.com/zmide/Terma/compare/v1.7.6...v1.7.7) + ## v1.7.6 [English](#v1-7-6-english) · [简体中文](#v1-7-6-zh) diff --git a/package-lock.json b/package-lock.json index 42a5674..6bf22b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "terma", - "version": "1.7.6", + "version": "1.7.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "terma", - "version": "1.7.6", + "version": "1.7.7", "license": "GPL-3.0-only", "dependencies": { "@novnc/novnc": "^1.7.0", diff --git a/package.json b/package.json index f43d85e..4678c74 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "terma", - "version": "1.7.6", + "version": "1.7.7", "releaseRevision": 1, "private": true, "license": "GPL-3.0-only", @@ -203,8 +203,7 @@ } ], "target": [ - "dmg", - "zip" + "dmg" ] } } diff --git a/public/app.css b/public/app.css index 77e830b..48e300b 100644 --- a/public/app.css +++ b/public/app.css @@ -1821,6 +1821,16 @@ body.sftp-task-center-open .notification-stack { z-index:9; } .terminal-quick-command-bar.compact .terminal-quick-command-name { max-width:86px; font-size:11px; } .terminal-quick-command-bar.compact .terminal-quick-command small { display:none; } .terminal-quick-command-bar.compact .terminal-quick-command-manage { top:9px; right:5px; width:24px; min-width:24px; height:24px; min-height:24px; } +@media (max-width:760px) { + .terminal-quick-command-bar:not(.compact) .terminal-quick-command-list { flex-wrap:nowrap; align-items:center; overflow-x:auto; overflow-y:hidden; padding:2px 37px 3px 5px; gap:4px; } + .terminal-quick-command-bar:not(.compact) .terminal-quick-command { min-width:72px; min-height:30px; padding:2px 6px 2px 3px; gap:3px; } + .terminal-quick-command-bar:not(.compact) .terminal-quick-command.no-badge { min-width:56px; } + .terminal-quick-command-bar:not(.compact) .terminal-quick-command-drag { height:20px; } + .terminal-quick-command-bar:not(.compact) .terminal-quick-command-badge { width:19px; height:19px; font-size:9px; } + .terminal-quick-command-bar:not(.compact) .terminal-quick-command-name { max-width:86px; font-size:11px; } + .terminal-quick-command-bar:not(.compact) .terminal-quick-command small { display:none; } + .terminal-quick-command-bar:not(.compact) .terminal-quick-command-manage { top:9px; right:5px; width:24px; min-width:24px; height:24px; min-height:24px; } +} .snippet-quick-settings { min-width:0; margin:12px 0; padding:10px 12px 12px; border:1px solid var(--line); border-radius:5px; background:color-mix(in srgb,var(--field) 70%,var(--panel)); } .snippet-quick-settings legend { padding:0 5px; font-size:12px; font-weight:700; } .snippet-quick-grid { margin-top:9px; } diff --git a/scripts/regression-check.js b/scripts/regression-check.js index acc45c3..12a2dcf 100644 --- a/scripts/regression-check.js +++ b/scripts/regression-check.js @@ -168,7 +168,7 @@ async function main() { const expectedReleaseArtifacts = { windows: ["Terma-1.2.3-windows-x64-installer.exe", "Terma-1.2.3-windows-x64-portable.exe"], linux: ["Terma-1.2.3-linux-x86_64.AppImage", "Terma-1.2.3-linux-amd64.deb", "Terma-1.2.3-linux-x86_64.rpm"], - macos: ["Terma-1.2.3-macos-x64.dmg", "Terma-1.2.3-macos-x64.zip", "Terma-1.2.3-macos-arm64.dmg", "Terma-1.2.3-macos-arm64.zip"], + macos: ["Terma-1.2.3-macos-x64.dmg", "Terma-1.2.3-macos-arm64.dmg"], "linux-source": ["Terma-1.2.3-linux-source-noarch.tar.gz"] }; let mismatchedReleaseTagRejected = false; @@ -191,6 +191,11 @@ async function main() { && releaseWorkflow.includes("Terma-windows-x64") && releaseWorkflow.includes("Terma-linux-x64") && releaseWorkflow.includes("Terma-macos-x64-arm64") + && releaseWorkflow.includes("terma-macos-unsigned-x64-arm64") + && releaseWorkflow.includes("macos-sign") + && releaseWorkflow.includes("--mac dmg --x64 --arm64 --publish never") + && !releaseWorkflow.includes("--mac dmg zip --x64 --arm64 --publish never") + && releaseWorkflow.includes("if-no-files-found: error") && releaseWorkflow.includes("Terma-linux-source-noarch") ); const sftpBackend = read("src/sftp.ts"); diff --git a/scripts/release-artifacts-check.js b/scripts/release-artifacts-check.js index 82a2bc4..6ec7412 100644 --- a/scripts/release-artifacts-check.js +++ b/scripts/release-artifacts-check.js @@ -25,9 +25,7 @@ function expectedArtifacts(platform, version = packageJson.version) { if (platform === "macos") { return [ `${product}-${releaseVersion}-macos-x64.dmg`, - `${product}-${releaseVersion}-macos-x64.zip`, - `${product}-${releaseVersion}-macos-arm64.dmg`, - `${product}-${releaseVersion}-macos-arm64.zip` + `${product}-${releaseVersion}-macos-arm64.dmg` ]; } if (platform === "linux-source") { @@ -64,7 +62,10 @@ function verifyArtifacts(platform, directory, version = packageJson.version) { .filter((entry) => entry.isFile()) .map((entry) => entry.name); const relevant = relevantArtifacts(platform, names); - const allowed = new Set(expected.flatMap((name) => [name, `${name}.blockmap`])); + const allowed = new Set(expected); + if (platform === "windows" || platform === "linux") { + expected.forEach((name) => allowed.add(`${name}.blockmap`)); + } const missing = expected.filter((name) => !relevant.includes(name)); const unexpected = relevant.filter((name) => !allowed.has(name)); if (missing.length || unexpected.length) { diff --git a/scripts/release-publish-assets.js b/scripts/release-publish-assets.js index bf4eb4c..adc67a5 100644 --- a/scripts/release-publish-assets.js +++ b/scripts/release-publish-assets.js @@ -22,7 +22,7 @@ function expectedReleaseFiles(version = packageJson.version) { const core = ["windows", "linux", "macos", "linux-source"] .flatMap(platform => expectedArtifacts(platform, version)); const blockmaps = core - .filter(name => /windows-x64-installer\.exe$|macos-(?:x64|arm64)\.(?:dmg|zip)$/i.test(name)) + .filter(name => /windows-x64-installer\.exe$/i.test(name)) .map(name => `${name}.blockmap`); return [...core, ...blockmaps, `Terma-${version}-sbom.cdx.json`].sort((left, right) => left.localeCompare(right, "en")); } diff --git a/scripts/terminal-quick-command-check.js b/scripts/terminal-quick-command-check.js index e50c0f1..832213f 100644 --- a/scripts/terminal-quick-command-check.js +++ b/scripts/terminal-quick-command-check.js @@ -42,6 +42,8 @@ assert.match(styles, /\.terminal-quick-command \{[^}]*width:max-content;[^}]*max assert.match(styles, /\.terminal-quick-command-bar \{[^}]*min-height:32px/); assert.match(styles, /\.terminal-quick-command\.no-badge/); assert.match(styles, /\.terminal-quick-command-bar\.compact/); +assert.match(styles, /\.terminal-quick-command-bar:not\(\.compact\) \.terminal-quick-command \{[^}]*min-height:30px/); +assert.match(styles, /\.terminal-quick-command-bar:not\(\.compact\) \.terminal-quick-command-list \{[^}]*overflow-x:auto/); assert.match(commandSnippets, /显示在终端快速命令栏/); assert.match(commandSnippets, /无(更紧凑)/); assert.match(commandSnippets, /data-snippet-save/); From 604de9bc0695f15c4de73d0ad2ca911fa36248db Mon Sep 17 00:00:00 2001 From: JunXiaoRuo <47996900+JunXiaoRuo@users.noreply.github.com> Date: Sat, 10 Oct 2026 21:44:04 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=A1=A5=E5=85=85=20v1.7.7=20=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/release-notes/v1.7.7.md | 51 +++++++++++++++++++++++++++++++++ docs/update.md | 2 ++ 2 files changed, 53 insertions(+) create mode 100644 .github/release-notes/v1.7.7.md diff --git a/.github/release-notes/v1.7.7.md b/.github/release-notes/v1.7.7.md new file mode 100644 index 0000000..335d394 --- /dev/null +++ b/.github/release-notes/v1.7.7.md @@ -0,0 +1,51 @@ +[English](#v1-7-7-english) · [简体中文](#v1-7-7-zh) + + +### English + +> macOS releases now use signed and notarized DMG files, and the mobile terminal shortcut bar is more compact. The macOS ZIP package is no longer generated. + +#### Important fixes + +- macOS Gatekeeper startup issue tracked in [Issue #36](https://github.com/zmide/Terma/issues/36) is addressed with signed and notarized release DMGs for both Intel and Apple silicon. + +#### Important additions + +- macOS releases now provide only signed and notarized x64 and arm64 DMG files; the less-used ZIP package is no longer generated. + +#### Other improvements + +- Mobile terminal shortcut buttons use a more compact layout while keeping horizontal scrolling available. + +#### Changes in this release + +- [PR #56](https://github.com/zmide/Terma/pull/56) — corrected release documentation, by [@JunXiaoRuo](https://github.com/JunXiaoRuo). +- [PR #57](https://github.com/zmide/Terma/pull/57) — added the Gatekeeper temporary-workaround prerequisite, by [@JunXiaoRuo](https://github.com/JunXiaoRuo). +- [PR #58](https://github.com/zmide/Terma/pull/58) — published signed macOS DMGs, removed the macOS ZIP package, and compacted mobile terminal shortcuts, by [@JunXiaoRuo](https://github.com/JunXiaoRuo). + +**Full Changelog**: [v1.7.6...v1.7.7](https://github.com/zmide/Terma/compare/v1.7.6...v1.7.7) + + +### 简体中文 + +> macOS 新版现在使用已签名并公证的 DMG,移动端终端快捷键栏也更加紧凑;使用较少的 macOS ZIP 包不再生成。 + +#### 重要修复 + +- [Issue #36](https://github.com/zmide/Terma/issues/36) 跟踪的 macOS Gatekeeper 启动问题已通过 Intel 和 Apple 芯片均使用已签名并公证的发布包得到处理。 + +#### 重要新增 + +- macOS 新版只提供已签名并公证的 x64 和 arm64 DMG,不再生成使用较少的 ZIP 包。 + +#### 其他优化 + +- 移动端终端快捷键按钮改为更紧凑的布局,同时保留横向滚动操作。 + +#### 本次变更 + +- [PR #56](https://github.com/zmide/Terma/pull/56) —— 修正文档发布说明,贡献者:[[@JunXiaoRuo](https://github.com/JunXiaoRuo)]。 +- [PR #57](https://github.com/zmide/Terma/pull/57) —— 补充 Gatekeeper 临时处理前置步骤,贡献者:[[@JunXiaoRuo](https://github.com/JunXiaoRuo)]。 +- [PR #58](https://github.com/zmide/Terma/pull/58) —— 发布已签名 macOS DMG、移除 macOS ZIP 并收紧移动端终端快捷键,贡献者:[[@JunXiaoRuo](https://github.com/JunXiaoRuo)]。 + +**完整变更**:[v1.7.6...v1.7.7](https://github.com/zmide/Terma/compare/v1.7.6...v1.7.7) diff --git a/docs/update.md b/docs/update.md index c0d9737..f81c3e3 100644 --- a/docs/update.md +++ b/docs/update.md @@ -51,6 +51,7 @@ - [PR #56](https://github.com/zmide/Terma/pull/56) — corrected release documentation, by [@JunXiaoRuo](https://github.com/JunXiaoRuo). - [PR #57](https://github.com/zmide/Terma/pull/57) — added the Gatekeeper temporary-workaround prerequisite, by [@JunXiaoRuo](https://github.com/JunXiaoRuo). +- [PR #58](https://github.com/zmide/Terma/pull/58) — published signed macOS DMGs, removed the macOS ZIP package, and compacted mobile terminal shortcuts, by [@JunXiaoRuo](https://github.com/JunXiaoRuo). **Full Changelog**: [v1.7.6...v1.7.7](https://github.com/zmide/Terma/compare/v1.7.6...v1.7.7) @@ -75,6 +76,7 @@ - [PR #56](https://github.com/zmide/Terma/pull/56) —— 修正文档发布说明,贡献者:[[@JunXiaoRuo](https://github.com/JunXiaoRuo)]。 - [PR #57](https://github.com/zmide/Terma/pull/57) —— 补充 Gatekeeper 临时处理前置步骤,贡献者:[[@JunXiaoRuo](https://github.com/JunXiaoRuo)]。 +- [PR #58](https://github.com/zmide/Terma/pull/58) —— 发布已签名 macOS DMG、移除 macOS ZIP 并收紧移动端终端快捷键,贡献者:[[@JunXiaoRuo](https://github.com/JunXiaoRuo)]。 **完整变更**:[v1.7.6...v1.7.7](https://github.com/zmide/Terma/compare/v1.7.6...v1.7.7) From adff0e0b5ba6e0810b52af40eebe8d7bc643aa92 Mon Sep 17 00:00:00 2001 From: JunXiaoRuo <47996900+JunXiaoRuo@users.noreply.github.com> Date: Sun, 11 Oct 2026 00:48:28 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=AE=8C=E5=96=84=20macOS=20=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E6=A0=A1=E9=AA=8C=E4=B8=8E=E6=9C=AC=E5=9C=B0=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/release-notes/v1.7.7.md | 2 +- .github/workflows/release.yml | 3 ++- README.md | 2 +- README.zh-CN.md | 2 +- docs/update.md | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/release-notes/v1.7.7.md b/.github/release-notes/v1.7.7.md index 335d394..44d34be 100644 --- a/.github/release-notes/v1.7.7.md +++ b/.github/release-notes/v1.7.7.md @@ -7,7 +7,7 @@ #### Important fixes -- macOS Gatekeeper startup issue tracked in [Issue #36](https://github.com/zmide/Terma/issues/36) is addressed with signed and notarized release DMGs for both Intel and Apple silicon. +- macOS Gatekeeper startup issue tracked in [Issue #36](https://github.com/zmide/Terma/issues/36) is addressed with signed and notarized release DMGs for both Intel and Apple Silicon. #### Important additions diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 12cf26f..50d3783 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -228,7 +228,8 @@ jobs: app="$(find "$mountpoint" -type d -name '*.app' -print -quit)" test -n "$app" codesign --verify --deep --strict --verbose=2 "$app" - spctl -a -vvv -t open --context context:primary-signature "$app" + spctl -a -vvv -t open --context context:primary-signature "$dmg" + spctl -a -vvv -t exec "$app" ) done diff --git a/README.md b/README.md index f1625bd..ce17ebe 100644 --- a/README.md +++ b/README.md @@ -270,7 +270,7 @@ Build output is written to `release/`: - Windows installer: run `*-installer.exe` and follow the wizard; run `*-portable.exe` directly for the portable build. - Linux: run `chmod +x release/*.AppImage` before launching an AppImage; install DEB and RPM packages with the system package manager. -- macOS DMG: release packages are signed and notarized; open the `.dmg` for the machine architecture and drag Terma to Applications. Choose `x64` for Intel or `arm64` for Apple Silicon. +- macOS DMG: official release packages are signed and notarized. DMGs built locally are not guaranteed to be signed or notarized. Open the `.dmg` for the machine architecture and drag Terma to Applications. Choose `x64` for Intel or `arm64` for Apple Silicon. Pushing a `v*` tag starts the Release workflow, which builds and verifies Windows, Linux, and macOS artifacts separately. diff --git a/README.zh-CN.md b/README.zh-CN.md index 16b1f71..e2cda3c 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -270,7 +270,7 @@ npm run dist -- --mac dmg --x64 --arm64 --publish never - Windows 安装版:运行 `*-installer.exe` 并按向导安装;便携版直接运行 `*-portable.exe`。 - Linux:AppImage 执行 `chmod +x release/*.AppImage` 后即可运行;DEB、RPM 使用系统包管理器安装。 -- macOS DMG:发布包会完成代码签名和公证;打开与机器架构对应的 `.dmg`,将 Terma 拖入“应用程序”后启动。Intel 选择 `x64`,Apple Silicon 选择 `arm64`。 +- macOS DMG:官方发布包会完成代码签名和公证;使用此命令本地构建的 DMG 不保证完成签名和公证。打开与机器架构对应的 `.dmg`,将 Terma 拖入“应用程序”后启动。Intel 选择 `x64`,Apple Silicon 选择 `arm64`。 推送 `v*` 标签时,Release 工作流会在 Windows、Linux 和 macOS 上分别构建并验证产物。 diff --git a/docs/update.md b/docs/update.md index f81c3e3..54dc432 100644 --- a/docs/update.md +++ b/docs/update.md @@ -37,7 +37,7 @@ #### Important fixes -- macOS Gatekeeper startup issue tracked in [Issue #36](https://github.com/zmide/Terma/issues/36) is addressed with signed and notarized release DMGs for both Intel and Apple silicon. +- macOS Gatekeeper startup issue tracked in [Issue #36](https://github.com/zmide/Terma/issues/36) is addressed with signed and notarized release DMGs for both Intel and Apple Silicon. #### Important additions