QT5.15 MacOS 打包指南
在 MacOS 上打包 QT5.15 应用程序需要几个步骤,以下是详细说明:
1. 使用 macdeployqt 工具
QT 自带的 macdeployqt
工具可以自动处理大部分依赖关系:
bash
macdeployqt YourApp.app -dmg
这会:
- 自动复制所需的 QT 框架到 YourApp.app/Contents/Frameworks
- 修正框架的路径引用
- 可选地创建 DMG 镜像(使用 -dmg 参数)
2. 手动处理可能遗漏的依赖
有时需要手动添加:
- 数据库插件
- 图像格式插件
- QML 导入文件
bash
cp -R /path/to/qt/plugins/ YourApp.app/Contents/PlugIns
cp -R /path/to/qt/qml/ YourApp.app/Contents/Resources/qml
3. 处理签名和公证(Notarization)
从 macOS 10.15 开始,应用需要签名和公证:
签名应用
bash
codesign --deep --force --verify --verbose --sign "Developer ID Application: Your Name (TeamID)" YourApp.app
创建 DMG 并签名
bash
hdiutil create -volname "YourApp" -srcfolder YourApp.app -ov -format UDZO YourApp.dmg
codesign --sign "Developer ID Application: Your Name (TeamID)" YourApp.dmg
公证
bash
xcrun altool --notarize-app --primary-bundle-id "com.yourcompany.yourapp" --username "[email protected]" --password "@keychain:AC_PASSWORD" --file YourApp.dmg
4. 检查依赖关系
使用 otool
检查是否还有未处理的依赖:
bash
otool -L YourApp.app/Contents/MacOS/YourApp
5. 创建安装程序(可选)
使用 pkgbuild 或 productbuild 创建 pkg 安装包:
bash
pkgbuild --component "YourApp.app" --install-location "/Applications" YourApp.pkg
常见问题解决
- 缺少插件:确保所有使用的 QT 插件(如 sqldrivers、imageformats)都复制到 app bundle 中
- QML 应用问题:确保所有 QML 导入文件都已打包
- 权限问题:在签名前确保所有文件有正确权限(755 或 644)
自动化脚本示例
bash
#!/bin/bash
APP_NAME="YourApp"
QT_PATH="/path/to/qt/5.15.x/clang_64"
# 构建应用
make
# 使用 macdeployqt
$QT_PATH/bin/macdeployqt build/$APP_NAME.app -dmg
# 复制额外文件
cp -R $QT_PATH/plugins/* build/$APP_NAME.app/Contents/PlugIns/
cp -R $QT_PATH/qml build/$APP_NAME.app/Contents/Resources/
# 签名
codesign --deep --force --verify --verbose --sign "Developer ID Application: Your Name (TeamID)" build/$APP_NAME.app
# 创建 DMG
hdiutil create -volname "$APP_NAME" -srcfolder build/$APP_NAME.app -ov -format UDZO build/$APP_NAME.dmg
希望这个指南对您有所帮助!根据您的具体应用可能需要调整某些步骤。