什么是最快/最简单的方法 - 从一开始就一步一步地在OS X上"编码"我的Qt应用程序以便它可以分发?

Dan*_*aum 6 macos xcode qt code-signing

我正在Qt编写一个跨平台的应用程序(使用Qt Creator).其中一个目标平台是OS X.

通过使用BitRock安装程序系统创建.app文件,打包应用程序以在OS X上安装.

该应用程序旨在供各个不同学院和大学的政治学学生和研究人员下载和使用.(从App Store或产品网站下载都可以.)

我不需要iCloud或与App Store相关的任何其他功能.我只需要能够分发这个应用程序,以便不出现警告(下面​​).

目前,该应用程序处于alpha测试状态 - 仅由产品经理进行测试.尽管如此,我仍然希望为产品经理提供OS X的安装包,但不会向他们提供以下警告:

无法打开[安装程序应用程序],因为它来自一个身份不明的开发人员

(更重要的是,当应用程序发布时,我也不希望最终用户出现此警告.)

我了解我需要使用Apple Developer帐户准备我的分发应用程序并正确签署该应用程序.

我创建了一个开发人员帐户,我正在尝试按照链接中的步骤签署我的应用程序并准备分发.

但是,因为应用程序是用Qt而不是Xcode构建的,所以我不知道如何按照步骤完成,因为一些关键步骤假定正在使用Xcode.

我已经搜索了任何可能描述如何在OS X上准备Qt应用程序以进行分发的问题,但是空洞的问题.

(此外,我还希望提供一套尽可能简单的步骤 - 最好比上面链接中提供的步骤简单 - 无论如何.)

什么是最简单的步骤,允许我在OS X上使用Qt开发的应用程序代码签名,以便可以分发?

Max*_*hun 13

准备.app文件

这是创建已签名包的分步指南,可以将其上载到Mac App Store,或作为独立应用程序+安装程序独立分发:

  • 检查应用程序图标 - 它应具有所有尺寸(16x16,32x32,64x64,128x128,256x256,512x512,1024x1024).(参见/sf/answers/1471993841/)

  • 添加编译选项以正确生成调试符号:

    QMAKE_CFLAGS += -gdwarf-2 QMAKE_CXXFLAGS += -gdwarf-2

    (注意QMAKE_CFLAGSQt Creator可能不会将其突出显示为有效,但仍可能需要包括在内 - 请参阅此处)

  • 设置应保存在与包标识符同名的目录中.

  • 检查应用程序的Info.plist文件.它应包含正确的包标识符和10.6.6的最小MacOS X版本.

    (注意:虽然Qt Creator自动生成一个放在.app包内的默认info.plist文件,但也可以创建自己的文件并自动使用它.请参阅此链接以获取适用的示例info.plist文件Qt和应用程序商店,并注意QMAKE_INFO_PLIST 工作(在该链接查看评论)使用自定义文件.)

    (另请参阅下面有关如何获取包标识符的说明.)

    (最小OS X版本 - 应设置为10.6.6或更高版本 - 可以使用.pro文件中的以下行进行设置:QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6- 但如果使用自定义info.plist文件,此设置将不会生效,因此您必须包括您的自定义中的正确设置info.plist无论如何;请参阅上一个链接,以获取该文件中应使用的条目.)

  • 您还需要证书来签署您的应用程序和安装程序:打开"Keychain Access"(使用Mac OS X搜索) - >双击每个证书(在kind列中查找这些)并输入密码 - >在Keychain Access中检查添加的证书.

在iTunesConnect中注册应用程序

  • 通过http://itunesconnect.apple.com登录您的开发者帐户(将您重新路由到https://,但您可能需要先输入http://)

    (注意:如果您还没有,则必须先创建一个Mac开发者帐户,每年99美元,才能继续.)

  • 点击"管理您的应用" - >"添加新应用"

  • 如果应用程序没有Bundle ID - 创建它.

创建新的Bundle ID 并不直观.

要创建新的Bundle ID:

- >登录开发人员中心网站:这是一个不同的站点(可能在新选项卡中打开):http://developer.apple.com.

- >点击右上角附近的会员中心(搜索栏旁边)

- >单击管理您的证书,应用程序ID,设备和配置文件 (在证书,标识符和配置文件下)

- >单击左侧导航栏中的" 应用程序ID "(在" 标识符"部分中)(可能已选中此项).

- >单击+按钮

- >您现在看到的屏幕(注册Mac App ID/注册App ID)是用于创建新捆绑标识符的屏幕

- >输入必要的信息.为App ID描述写任何内容 (它只能包含一小段文本)

明确的应用程序ID字段实际上是新的捆绑ID.在此处键入反向URL,例如com.mydomain.myapp.此URL实际上不需要存在网站或服务器.你只需要在这里制作一个,但当然你可以使用已经存在的一个,如果你愿意的话.

- >单击继续,如果满意则单击提交,然后单击完成

现在请务必返回上一部分,并将刚刚创建的Bundle ID添加到自定义info.plist文件中.

同时保存团队ID,以备日后需要时使用 - 这是在您查看刚刚>>>创建的Bundle ID详细信息时看到的Bundle >> ID(称为前缀)之前的字符串.开发人员中心.

  • 现在,返回iTunesConnect网站.(也许在另一个标签中 - 这不是开发人员中心网站.)

  • 在" 应用程序信息"部分中,选择语言.然后,输入应用名称.为SKU字段组成一个随机字符串(我使用的格式为2436-7623-7782-8327).最后,选择Bundle ID.单击继续.

  • 选择可用日期(目前只是尽可能的 - 目前,它最多只能使用2年).选择价格等级(可以是任何 - 客户可以稍后更改).单击继续.

  • 在以下屏幕上输入详细的应用程序信息,然后单击"保存"

  • 单击应用页面中的"查看详细信息" - >单击"准备上传二进制文件" - >在摘要页面上单击链接"最新版本的Application Loader"并下载 - >单击"继续".

创建和上载安装程序

  • 检查应用程序Info.plist - 输入正确的包ID,应用程序名称,类别.

  • 在发布模式下构建应用程序

  • 提取调试符号.在命令行:

    dsymutil MyApp.app/Contents/MacOS/MyApp -o MyApp.app.dSYM

  • 执行帮助程序macdeployqt(包含在Qt中).在命令行:

    /path/to/macdeployqt /path/to/myapp.app

    (macdeployqt可以找到QTDIR/bin.请参阅此链接了解一些官方详细信息.)

    运行macdeployqt通过在.app捆绑包内部合并必要的Qt框架并更改应用程序中的各种其他内部设置来修改现有应用程序.

  • 协同设计申请:

协同设计是一个棘手的步骤.

(1)获得分发证明

如果您还没有分发证书,则必须先创建分发证书.(不是开发人员证书.)

(以下步骤取自此链接,并对证书类型进行了更正)

- >打开Xcode(撰写本文时的第5版) - >导航到Xcode>首选项 - >单击帐户选项卡 - >如果您还没有这样做,请添加在Mac开发人员计划中注册的Apple ID - >选择要使用的Apple ID,然后单击查看详细信息 - >在打开的窗口中,单击添加(+),然后选择Mac App Distribution.

(2)使用分发证书签署申请的代码

要正确地协同设计,每次 .framework.dylib .app必须FIRST 签署; 然后.app必须签署自己. 在对内部Qt框架进行编码之前,请参阅此灰色块底部段中的关键步骤 - 并确保首先执行此操作.

签署内部库/框架的命令和签署main的命令.app是相同的:

codesign -s "3rd Party Mac Developer Application: Daniel Nissenbaum (S6V5TT9QRL)" –-entitlements MyEntitlements.plist MyApp.app

仅当您实际拥有超出基本默认值的权利时,才需要使用--entitlements MyEntitlements.plist选项. 当我在开发人员中心创建Bundle ID时,我(Dan Nissenbaum)没有为我的应用选择其他权限(例如访问iCloud,推送通知等的能力).所以,我放弃了--entitlements选项,我还没有研究如何获取 MyEntitlements.plist文件.

关于-s参数的注意事项:有关查找要使用的正确名称的信息,请参阅下面的段落(这是分发证书"Common Name").

这个codeign命令是主要的.app. 到协同设计的内部(QT)的库/框架,它必须要做的第一,使用正确的路径 ; 即,在上面的命令,使用 MyApp.app/Contents/Frameworks/QtCore.framework而不是MyApp.app-并注意该路径的库/框架必须是公正的内部库/框架束的根,而不是内部的内部库/框架束.

除了Qt .frameworks之外,还可能需要签署各种其他内部.dylib或.frameworks - 如果您尝试签署主应用程序但尚未签署所有内部.dylibs/.frameworks,则会收到错误指示需要签名的另一个内部 .dylib/.framework.只需通过它们.在我的情况下,在我完成签署Qt .frameworks之后,还需要签署大约10个额外的.dylib.

获得开发人员证书后,您需要找到用于代码签名过程的证书名称.打开"Keychain Access"(找到这个,只需在Finder的搜索栏中键入"Keychain Access",然后从返回的结果中找到该应用程序).在Keychain Access运行时看到的主列表中,您将看到您的Developer证书以及其他各种内容.还会有一些其他证书 - 忽略这些证书.很明显哪个证书是正确的.在我的情况下(我认为这是标准的),证书名称是"第三方Mac开发人员应用程序:Daniel Nissenbaum(S6V5TT9QRL)".这是证书的正式名称,用作codesign-s参数,但要真正确认这一点,请双击证书,然后在出现的信息窗口中查看"公共名称". Common Name的值 是用作codesign-s参数的官方文本.

注意关于与并发症codesign"荷兰国际集团内部的Qt框架.截至今天,当macdeployqt运行时,Qt框架没有完全正确地复制到.app捆绑包中.他们错过了他们的Info.plist档案.但这些必要的Info.plist文件DO Qt的安装内部存在.您只需使用Finder复制它们即可.(例如我的系统上,所需Info.plist的文件QtWidgets.framework框架有此路径(其中"Qt的"对应于你的Qt安装的根路径) Qt/5.1.1/clang_64/lib/QtWidgets.framework/Contents/Info.plist. 这是要复制到 MyApp.app/Contents/Frameworks/QtWidgets.framework/Resources同上所有那名其他的Qt框架.复制到MyApp.app捆绑包中macdeployqt.有关详细信息,请参阅 /sf/answers/1374787781/.存在并启用代码

  • 创建安装程序(需要其他证书;请参阅注释):

    productbuild –-component ./MyApp.app /Applications –-sign "3rd Party Mac Developer Installer: Daniel Nissenbaum (S6V5TT9QRL)" MyApp.pkg

    请注意,需要使用不同的证书作为参数的--sign参数. 证书的类型为" Mac Installer Certificate ",而不是" Mac App Distribution "(codesign上面使用的证书类型).要创建此证书,请按照上述相同步骤操作,但选择" Mac Installer Certificate"作为类型.在此处使用其Common Name作为参数的--sign参数.

    ./前述应用程序的名称可能是重要的.此外,使用与运行codesign时所执行的--sign参数相同的参数- Developer证书的公用名.往上看.

  • 检查安装程序:

    sudo installer -store -pkg MyApp.pkg -target /

  • 如果没有错误,您现在拥有一个合法的Mac应用程序,打包到一个合法的Mac安装程序中,这两个程序都可以分发给任何人.您可以通过简单地发送.pkg文件(通过网站,Dropbox等)来分发它们,也可以上传到Mac App Store.

  • 我还没有确认这些步骤,这些步骤实际上将应用程序上传到Mac App Store:打开应用程序加载器并使用Apple Developer Account登录 - >选择"Deliver Your App" - >选择正确的AppID - >单击"选择..." "按钮""应用程序信息"页面并选择创建的pkg文件 - >单击"发送".

附加信息