编程语言
首页 > 编程语言> > macOS(OSX10.14, Xcode10.3)发布Qt(5.12.9)程序

macOS(OSX10.14, Xcode10.3)发布Qt(5.12.9)程序

作者:互联网

macOS(OSX10.14, Xcode10.3)发布Qt(5.12.9)程序

1. 申请应用开发证书与发布证书

https://developer.apple.com/

2. 应用的编译、签名、动态库打包

2.1 设置Qt编译环境

#查看能否使用qmake
qmake -v
#如果不能执行qmake,则在/etc/profile增加以下内容
export QTDIR=/Applications/Qt5.12.9/5.12.9/clang_64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib
export PATH=$PATH:$QTDIR/bin

2.2 Qt工程转化为Xcode工程(确保Qt工程编译和运行都没问题再做转换)

qmake xxx.pro -spec macx-xcode
# 然后在.pro文件目录下可以看到Xcode工程配置文件了

2.2 应用图标设置

2.2.1 创建.iconset文件夹

2.2.2 使用Qt添加Icon

2.2.3 使用Xcode添加Icon

2.3 Xcode设置(点击屏幕左侧的项目名)

PROJECT

TARGETS

2.3.1 General

2.3.2 Capabilities

2.3.3 Build Settings

2.3.4 Build Phases

如果不想每次编译后手动执行脚本,可以在Build Phases添加打包和签名脚本,个人推荐这么做,因为编译后手动操作打包签名后上传应用会莫名其妙地出现签名错误问题

点击左上角+,添加Run Script

添加了这个脚本每次编译前都清理一下(Product --> clean),另外这些签名方法是在编译信息里面找到的

2.3.5 Archive Post-actions (自定义生成Archive包操作)

使用Archive打包应用的优点在于比较容易在本地验证应用是否存在问题,能够在上传应用之前排除一些规范问题

APP=$BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME
/Applications/Qt5.12.9/clang_64/bin/macdeployqt $APP
find $APP/Contents/PlugIns -name ".dylib" | xargs /usr/bin/codesign --force --sign xxcertificationsxx --entitlements xxx.entitlements --timestamp=none
find $APP/Contents/Frameworks -name ".framework" | xargs /usr/bin/codesign --force --sign xxcertificationsxx --entitlements xxx.entitlements --timestamp=none

2.3.6 Xcode提示的设置

如果Xcode提示设置就跟着提示设置

2.4 打包Qt动态库与第三方动态库

2.4.1 使用macdeployqt打包程序动态库

#切换到macdeployqt所在的目录,或者在qt工程中右击Open With Terminal,选择Build Enviroment,执行
macdeployqt xxx.app
#把其他第三方动态库也复制过来,我放置的目录是xxx.app/Content/Frameworks
#如果缺少rwx相关的权限要记得补充

2.4.2 修改动态库链接路径

如果第三方动态库路径不在xxx.app/Content内,那么应该要修改一下动态库路径

# 查看可执行文件的动态库依赖路径
otool -L xxx.app/Content/MacOS/xxx
# 查看动态库路径
otool -D xxx.dylib
# 修改路径(我的动态库都放在Frameworks这个文件夹中,对应的标识是@rpath)
sudo install_name_tool -id @rpath/xxx.dylib xxx.dylib

2.4.3 动态库签名

安装好证书以后,签名可以在Xcode或者钥匙串都能找到

#切换到Frameworks路径,使用macdeployqt打包以后在xxx.app/Content/目录下可找到
find . -name "*.framework" | codesign --entitlements xxx.entitlements -s “Mac Developer:xxxxxx"
# 切换到动态库目录
find . -name "*.dylib" | codesign --entitlements xxx.entitlements -s “Mac Developer:xxxxxx"

2.4.4 检查应用是否已签名

如果应用已被Xcode编译运行成功,一般来说已经完成签名了,可执行以下命令检查

codesign --display --verbose=4 xxx.app

如果输出签名信息,则说明签名成功了

3. 应用发布

3.1 准备工作

3.2 使用Archive发布

这个方法会另外编译工程,所以在Release文件夹下执行macdeployqt、签名动态库无效,Archive发布的优点是自动签名与上传应用之前验证应用

3.3 使用Application loader发布

不清楚productbuild可以man productbuild,文档结尾有现成的例子

# 打包Release目录下的app
productbuid --component build/Release/Sample.app /Applications --sign "3rd Party Mac Developer Installer: xxx" Product.pkg

然后使用Xcode的Application loader上传

4. 遇到的问题

本人水平有限,也不是苹果开发专业户,此文仅作参考。

参考文章:

标签:macOS,Qt,--,app,xxx,5.12,iconset,Archive,png
来源: https://www.cnblogs.com/fixedpoint/p/14218397.html