Mac中QT程序发布

基于Qt开发的应用程序进驻Mac App Store

最近摸索着将一个基于用Qt开发的App发布Mac App Store,在网上查找相关资料的时候,发现很多文档都过期了,要有一些修改,所以想记录下来,希望能帮助有需要的同学,让他们少走一些弯路。

这里我们假设你已经有一个Mac开发者账号,成功安装好了相关证书,并且已经准备好你的App了(release版,但未部署)。

第一步:打包

在Mac下,对基于Qt应用程序的部署,官方文档这里已经讲解很详细了

我用的是framework的方式,大致意思就是要把所依赖的库和插件拷贝到App的Bundle里,然后修改程序的依赖链接,让其启动时加载的是Bundle里的库和插件。

Qt自带的macdepolyqt工具能够很方便的帮助你实现这一目的。

虽然很多人觉得这个工具并不完美,会把一些实际上用不到的插件和库也会拷贝进去

这是因为它本身的判断方式,比如你的程序用到了QtSql.framework, 那么它就会把所有的sqldrivers目录中的插件都拷贝过来,而不管你的程序有没有用到,这让你的程序变得臃肿)

但是对于初学者,我相信你更喜欢用这种方式,因为它相当简单

假如你是一个完美主义者,对自己的App有着严格的要求,那么建议你自己写Shell Script去把程序用到的Framework和Plugins都拷贝进去,然后修改依赖链接。

Xcode自带指令帮你查看程序依赖哪些库,库又依赖了哪些库,插件依赖了哪些库,如果想要知道程序是如何加载插件的,可以查阅这里,当然也有指令修改这些依赖。这些都可以在上面提供的链接里找到。

第二部:sandbox 和 info.plsit文件

Windows程序员可能不知道什么是sandbox。赶紧恶补一下,可以去google一下或者看下Apple的官方文档

你要有一个.entitlements的文件(为第三步做准备),里面就是你需要的sandbox权限(其实就是个xml格式的文件,记录着一些键值对,你可以用Xcode新建一个项目,然后勾选需要的sandbox权限,生成的.entitlements文件就可以拿过来用了)。

如果没有勾选相关的权限,在签名之后是无法正常使用相关功能的。

这里说的info.plist文件是整个程序的,在App所在目录/Contents下和后面说的info.plist文件不是同一个(但作用都是一样的)。

Qt默认生成的info.plist 文件是不符合上Mac App Store要求的,需要额外加一些键值对,比如能运行的最低系统版本信息等等。详情可以参看Apple的文档

第三部:签证书

在完成上一步后,所有用到的库和插件都已经拷贝到程序所在的Bundle里面了

可以按照这里的说明进行Code Signing,但是这里需要注意的是,

在签证书之前必须手动的把每个Framework下面的info.plist文件考到相应的目录下

QtCore.framework为例,你需要将Qt安装目录/5.2.0/clang_64/lib/QtCore.framework/Contents/info.plist拷贝到App所在目录/Contents/Frameworks/QtCore.framework/Resources/, 否则在给Framework签证书的时候会失败,当然会导致最后给整个Bundle签证书的时候失败。签证书的顺序应该是先签里面的Framework 和Plugins,最后签整个Bundle。

签成功之后,除了Plugins,每个Framework的子目录内和Contents目录下都会有一个_CodeSignature的文件夹。

http://www.sollyu.com/mac-qt-program-released/

原文地址:https://www.cnblogs.com/findumars/p/5532930.html