若不含第三方库只需执行步骤1即可,打包相关命令均在 release
工程目录下进行。
1. 生成安装包
- 打包 release 版的 app:
cd build-vmail-Desktop_Qt_5_12_11_clang_64bit-Release
macdeployqt 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/utilLib
cp /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)
第一行依赖的路径已经变过来了。