我们都知道在 mac 下发布 Qt 程序时, 需要拷贝 Qt 的 Frameworks 到 app 中. 这一步往往可使用 macdeployqt
这个 Qt 提供的程序实现. 当然, 也可以自己写个脚本, 把对应的 Qt Framework 拷贝过去.
在使用到 QtWebEngine 的程序中, 需要包含以下几个库: QtWebEngine, QtWebEngineCore, QtWebEngineWidgets, QtWebChannel. 除此之外, 还需要一个 QtWebEngineProcess
程序. 否则程序运行起来会报一个”找不到 QtWebEngineProcess” 的警告, 且功能异常.
这个 QtWebEngineProcess 是一个独立的程序, 在 win 下发布时, 只需要把这个 QtWebEngineProcess.exe 以及几个相关的 qtwebengine_resources_XX.pak 拷贝到 exe 同级目录下就可以了. 但是在 mac 下, 就不这么简单了. QtWebEngineProcess.app 在 QtWebEngineCore.framework/Versions/5/Helpers 目录下, 而这几个 pak 在 Resources 目录下.
我们当然可以手动把整个 QtWebEngineCore 拷贝到 you.app/Contents/Frameworks 目录下, 这样是可以运行的. 但是也引入了 QtWebEngineCore 中一些无用的文件, 我们可以做的更好.
以下是一个脚本用于实现这一过程:
#!/bin/bash
qt_dir=$1 # Qt SDK lib path
app_dir=$2 # your app path
mkdir -p "$app_dir/Contents/Frameworks/QtWebEngineCore.framework/Versions/5"
cp -rf "$qt_dir/QtWebEngineCore.framework/Versions/5/Helpers" "$app_dir/Contents/Frameworks/QtWebEngineCore.framework/Versions/5"
cp -rf "$qt_dir/QtWebEngineCore.framework/Versions/5/Resources" "$app_dir/Contents/Frameworks/QtWebEngineCore.framework/Versions/5"
cp -f "$qt_dir/QtWebEngineCore.framework/Versions/5/QtWebEngineCore" "$app_dir/Contents/Frameworks/QtWebEngineCore.framework/Versions/5"
ln -sf "$app_dir/Contents/Frameworks/QtWebEngineCore.framework/Versions/5" "$app_dir/Contents/Frameworks/QtWebEngineCore.framework/Versions/Current"
ln -sf "$app_dir/Contents/Frameworks/QtWebEngineCore.framework/Versions/5/Helpers" "$app_dir/Contents/Frameworks/QtWebEngineCore.framework/Helpers"
ln -sf "$app_dir/Contents/Frameworks/QtWebEngineCore.framework/Versions/5/Resources" "$app_dir/Contents/Frameworks/QtWebEngineCore.framework/Resources"
ln -sf "$app_dir/Contents/Frameworks/QtWebEngineCore.framework/Versions/5/QtWebEngineCore" "$app_dir/Contents/Frameworks/QtWebEngineCore.framework/QtWebEngineCore"
关键点就是在拷贝了 Helpers 和 Resources 后, 需要创建一些软链接(mac 中叫做替身), 方便 QtWebEngineProcess.app 找到这些库.
以下是执行该脚本之后的目录结构: