Skip to content

dmg 没有拖拽引导,用户不知道要放进应用程序文件夹 #144

Description

@yujiezhang-ops

现象

打开 OneAgent-darwin-arm64.dmg 后,窗口里只有一个孤立的 OneAgent 图标。没有 Applications 文件夹的软链接,没有箭头,没有背景说明。用户不知道该把它放到哪里,最自然的反应是直接双击运行。

macOS 用户熟悉的样子是左边 app 图标、右边 Applications 软链接、中间一个箭头。

原因

build-artifacts.yml:155 的打包步骤只把 .app 塞进一个压缩 dmg:

hdiutil create \
  -volname OneAgent \
  -srcfolder "bin/OneAgent.app" \
  -ov \
  -format UDZO \
  "bin/OneAgent-darwin-${{ matrix.arch.ota }}.dmg"

-srcfolder 指向 app 本身,所以卷里就只有这一个条目。

为什么值得修

除了安装体验,它还有一个连带后果:从 dmg 直接运行会导致自更新静默失败#143)。macOS 对这种情况做 App Translocation,把 app 挂到只读卷上,updater 的备份步骤失败,应用退出后不会自动回来。引导越明确,用户从 dmg 里直接运行的概率越低。

也就是说这不只是观感问题,它是 #143 的上游成因之一。

修复方向

hdiutil create 之前准备一个 staging 目录,而不是直接指向 .app

mkdir -p dmg-root
cp -R "bin/OneAgent.app" dmg-root/
ln -s /Applications dmg-root/Applications
hdiutil create -volname OneAgent -srcfolder dmg-root -ov -format UDZO ...

软链接是最小可用版本,只用内置工具,无新增依赖,就能让用户看到该往哪儿拖。

进一步的图标位置、窗口尺寸和背景图需要写 .DS_Store,通常靠 create-dmg 这类工具,或者用 AppleScript 操作 Finder。后者在 CI 的无头环境里不可靠。如果引入 create-dmg,要同步 NOTICE——docs/distribution-compliance-policy.md 把第三方归属列为发布前置条件。

建议先做软链接版本:改动小、无依赖、覆盖了绝大部分收益。背景图和图标布局可以之后单独做。

验证要点

  • 两个架构的 dmg 都要检查(amd64arm64
  • 软链接必须是 /Applications 的绝对路径,相对路径在别人机器上解析不到
  • 确认加入软链接后 dmg 体积没有明显变化(软链接本身不占空间)
  • SHA256SUMS 会随之改变,属预期

相关

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions