若不含第三方库只需执行步骤1即可,打包相关命令均在 release 工程目录下进行。
1. 生成安装包
- 打包 release 版的 app:
cd build-vmail-Desktop_Qt_5_12_11_clang_64bit-Releasemacdeployqt vmail.app -dmg
在 Qt 生成的 Release 工程目录下打开终端,运行上面的命令
如果
macdeployqt命令不存在,就指定目录,我的是:
~/Qt/5.12.11/clang_64/bin/macdeployqt vmail.app -dmg
2. 查看依赖的动态库及路径
- 查看依赖:
otool -L vmail.app/Contents/MacOS/vmail
结果:
vmail.app/Contents/MacOS/vmail:/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)@rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.12.0, current version 5.12.11)@rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.12.0, current version 5.12.11)@rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.12.0, current version 5.12.11)/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)/System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 905.6.0)/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5)
第一行 libiconv 是用到的第三方库,需要修改路径,否则程序运行到使用该库的地方会报错。
3. 修改依赖的动态库的路径
在包内:(在 vmail.app 上右键 -> 显示包内容 -> Contents -> Frameworks) 目录下,创建 utilLib 目录,将第三方库文件拷贝到该目录下:
- 拷贝库文件:
mkdir -p vmail.app/Contents/Frameworks/utilLibcp /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/tvOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libiconv.* vmail.app/Contents/Frameworks/utilLib/
看下目录结构:
$ tree vmail.app/Contents/Frameworks/vmail.app/Contents/Frameworks/├── QtCore.framework├── QtDBus.framework├── QtGui.framework├── QtNetwork.framework├── QtPrintSupport.framework├── QtQml.framework├── QtQuick.framework├── QtSvg.framework├── QtVirtualKeyboard.framework├── QtWidgets.framework└── utilLib├── libiconv.2.4.0.dylib├── libiconv.2.dylib└── libiconv.dylib
- 修改路径路径:
install_name_tool -change "/usr/lib/libiconv.2.dylib" "@rpath/utilLib/libiconv.2.dylib" vmail.app/Contents/MacOS/vmail
结果:
$ otool -L vmail.app/Contents/MacOS/vmail vmail.app/Contents/MacOS/vmail:@rpath/utilLib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)@rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.12.0, current version 5.12.11)@rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.12.0, current version 5.12.11)@rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.12.0, current version 5.12.11)/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)/System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 905.6.0)/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5)
第一行依赖的路径已经变过来了。
