

新闻资讯
技术学院在 macOS 上打包 Avalonia 应用需通过 dotnet CLI 与 Dotnet.Bundle 工具链生成规范 .app 包:先配置 .csproj 添加 Bundle 元信息及图标,再执行 publish 命令生成 MyApp.app;随后用 codesign 签名、notarytool 公证并 stapler 钉住票证,最终可选打包为 DMG 镜像。
在 macOS 上打包 Avalonia 应用,核心是生成符合 Apple 生态规范的 .app 包,并完成签名与公证(Gatekeeper 要求)。整个流程不依赖 Xcode 图形界面,主要靠 dotnet CLI + Dotnet.Bundle 工具链完成。
这是打包前提,必须显式声明 macOS 专用属性:
Dotnet.Bundle 包引用:
中设置 Bundle 元信息(关键字段不能遗漏):MyApp MyApp com.example.myapp 1.0.0 1.0 APPL MyApp AppIcon.icns NSApplication true
AppIcon.icns 文件已放入项目根目录或 Resources/ 目录,并在 中标记为 或 并设 CopyToOutputDirectory 为 PreserveNewest
在项目根目录终端中运行:
dotnet publish -c Release -r osx-x64 --self-contained true -p:PublishTrimmed=true -p:PublishSingleFile=false
注意:
– -r osx-x64(Intel)或 -r osx-arm64(Apple Silicon)需按目标机器匹配;
– PublishSingleFile=false 是推荐选项,因 macOS Bundle 要求结构化目录(含 Contents/ 子目录),单文件模式不兼容;
– 输出路径默认为 bin/Release/net8.0/osx-x64/publish/,其中会生成 MyApp.app 文件夹。
未签名的 .app 在 macOS 10.15+ 无法启动(“已损坏”提示):
codesign --force --d
eep --sign "Developer ID Application: Your Name (ABC123)" --options runtime MyApp.app
xcrun notarytool submit MyApp.app --keychain-profile "AC_PASSWORD" --waitnotarytool 凭据)xcrun stapler staple MyApp.app
提升用户安装体验,可用脚本自动化生成带拖拽图标的 DMG:
hdiutil 创建并配置:hdiutil create -volname "MyApp" -srcfolder "MyApp.app" -ov -format UDZO MyApp.dmg
bundle.sh 脚本(支持自动检测芯片架构)完成签名和 stapling 后,双击即可正常运行,且能通过 Gatekeeper 验证。整个流程无需 Visual Studio 或 Rider,纯命令行驱动,适合 CI/CD 集成。