若不含第三方库只需执行步骤1即可,打包相关命令均在 release 工程目录下进行。

1. 生成安装包

  • 打包 release 版的 app:
  1. cd build-vmail-Desktop_Qt_5_12_11_clang_64bit-Release
  2. macdeployqt vmail.app -dmg

在 Qt 生成的 Release 工程目录下打开终端,运行上面的命令

如果 macdeployqt 命令不存在,就指定目录,我的是:
~/Qt/5.12.11/clang_64/bin/macdeployqt vmail.app -dmg

2. 查看依赖的动态库及路径

  • 查看依赖:
  1. otool -L vmail.app/Contents/MacOS/vmail

结果:

  1. vmail.app/Contents/MacOS/vmail:
  2. /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
  3. @rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.12.0, current version 5.12.11)
  4. @rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.12.0, current version 5.12.11)
  5. @rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.12.0, current version 5.12.11)
  6. /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
  7. /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
  8. /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
  9. /System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)
  10. /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 905.6.0)
  11. /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5)

第一行 libiconv 是用到的第三方库,需要修改路径,否则程序运行到使用该库的地方会报错。

3. 修改依赖的动态库的路径

包内:(在 vmail.app 上右键 -> 显示包内容 -> Contents -> Frameworks) 目录下,创建 utilLib 目录,将第三方库文件拷贝到该目录下:

  • 拷贝库文件:
  1. mkdir -p vmail.app/Contents/Frameworks/utilLib
  2. 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/

看下目录结构:

  1. $ tree vmail.app/Contents/Frameworks/
  2. vmail.app/Contents/Frameworks/
  3. ├── QtCore.framework
  4. ├── QtDBus.framework
  5. ├── QtGui.framework
  6. ├── QtNetwork.framework
  7. ├── QtPrintSupport.framework
  8. ├── QtQml.framework
  9. ├── QtQuick.framework
  10. ├── QtSvg.framework
  11. ├── QtVirtualKeyboard.framework
  12. ├── QtWidgets.framework
  13. └── utilLib
  14. ├── libiconv.2.4.0.dylib
  15. ├── libiconv.2.dylib
  16. └── libiconv.dylib
  • 修改路径路径:
  1. install_name_tool -change "/usr/lib/libiconv.2.dylib" "@rpath/utilLib/libiconv.2.dylib" vmail.app/Contents/MacOS/vmail

结果:

  1. $ otool -L vmail.app/Contents/MacOS/vmail vmail.app/Contents/MacOS/vmail:
  2. @rpath/utilLib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
  3. @rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.12.0, current version 5.12.11)
  4. @rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.12.0, current version 5.12.11)
  5. @rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.12.0, current version 5.12.11)
  6. /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
  7. /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
  8. /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
  9. /System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.0)
  10. /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 905.6.0)
  11. /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5)

第一行依赖的路径已经变过来了。