qt 开发的 macos app 上线 appstore

qt 开发的macos app使用已经快一年了,由于客户要求app上线appstore,因为没用做过,一脸懵逼,不知从何下手,技术群问问技术大佬,也都是三言两语,虽然有人做过,但是人家大佬根本不想鸟你,没办法了只能自己慢慢莫搜了。
 

写这篇博客就是为了以后有相关需求的人避免走弯路或者踩坑了,我从头到尾踩了一次,我把整个流程大概讲一遍,有坑的地方我会提出来。一开始因为不懂,拿到账号后,总是乱玩一通、各种创建删除、弄个xcode的app测试发布一下,结果悲剧了,有些东西会删除不掉的,比如那个appid我测试的数据都删除不了,因为被使用过,感觉是bug,具体也不去纠结了,还有就是在app store connect创建app的时候,使用过的app名字后面就没有办法在使用了,我就是测试的时候使用真实的app名字,导致后面我真的要发布的时候用不了这个名字,就算把测试的app删除了 ,还是用不了太坑了,被迫改了app名字。后面在签名的时候各种问题,感觉就是我测试的时候各种创建删除导致的信息错乱,最后把所有东西都删除了,只剩下测试的appid删除不了,全部都重新创建一套,包括:证书、appid、描述文件、app等一一对应的创建一套。总结就是,没事别瞎玩,完整的创建一套要使用的数据,没必要去测试发布demo。讲的有点多,下面进入主题。

第一步:你已经有了一个qt开发好的macos app,可以正常发给客户或者其他电脑上安装使用的app,一般是dmg或者pkg包。
 

第二步:注册一个苹果开发者账号,这个具体流程可以网上找一找,有个人、公司、企业三种账号,我注册的是公司的苹果开发者账号,也是第一次弄,前前后后差不多一个月的时间,终于注册申请好了苹果开发者账号。

第三步:登入开发者中心(https://developer.apple.com/),

主要操作都在我框出来的二级页面里面进行操作,主要有四个东西:

1、Certificates(证书)(开发证书、发布证书、安装证书(这个好像是macos app才需要的,ios app 不需要安装证书))、根据app类型进行添加证书,我创建Mac App Distribution、Mac Installer Distribution、Mac Development三个证书,其实qt开发的app根本就不需要用到开发证书,是给xcode开发的时候使用的,因为使用其他证书签名的程序在本地是运行不了,创建证书是为了后面的app签名用的,创建好下载安装到macos系统,双击下载文件就可以安装了,安装后打开系统工具钥匙串就可以看见安装的开发者证书了(具体这么创建证书可以百度下,我就不过于详细的描述了,比较签到)。

2、Identifiers(APPID),这个要注意下,一个appid可以对应创建一个app,后面在app store connect里面创建app的时候需要用到,一个app对于创建一个appid,这个id将会绑定描述文件个app,后面app的info.plist里面还要设置这个对于的appid,key叫做CFBundleIdentifier。

3、Profiles(描述文件),有开发和发布两种,qt app一般只需要创建发布的描述文件即可,创建的时候要选择上面创建的appid,进行绑定。

4. 进入app store connect创建app,最后app信息设置、提交审核、发布等都是在这边操作的,创建app的时候要选择appid 进行绑定,一个appid自能创建一个app,,先创建好,能填写的信息先填写好,剩下的就是,签名app,打包上传到app store connect对应的app上面,因为app上面绑定了appid,上传的时候会自己上传到对应的app的构建版本下面,到时候进行选择就好了。

上述准备都是在开发者中心进行设置的,下面回到代码上的处理,首先用qt编译好需要发布的app,拷贝好对应的依赖库和第三方库等(这个涉及到另外一个东西,macos打包app,个人感觉还是比较麻烦的,需要写一个脚本去执行拷贝依赖和修改依赖路径等)。

5、到了本文核心部分了,那就是给app签名,网上搜索到的都是使用xcode对项目进行自动签名的,这个就比较好操作,我也尝试过将qt项目转成xcode项目进行编译,使用自动签名,经过一番努力修改,还真的使用xcode把项目编译成功了,但是需要依赖qt库和其他你用到的第三方库,如果你编译的时候选择自动签名,可以编译成功,但是你的依赖库还没有拷贝过来,app无法运行,等你把依赖库都拷贝到app里面后,这些刚刚拷贝过来的库都是没有签名的,因为xcode签名的时候在编译的时候就完成了,这就导致了程序还是无法运行,折腾一番之后我又发现了另外一个方法,可以手动用命令对app进行签名,比较使用qt开发的还是选择手动签名会比较好管理整个项目,使用xcode应该也是可以实现的,后面那个问题,应该是可以设置xcode,使其在编译的时候就把依赖库都自动拷贝过来进行签名的,后面我也没有再去研究,有兴趣的可以自行研究。

6、回到正题,上述已经准备好了可以运行的qt编译的app,签名的时候还需要一个.entitlements文件,这个类似info.plist,也是配置app权限信息的,使用xcode创建一个macos项目就会生成一个.entitlements文件,根据自己app的需求进行设置,然后把这个.entitlements文件直接拷贝出来使用。

7、对info.plist添加必要的信息,之前因为信息不全审核的时候被打回来好几次,

CFBundleName :app的名字,需要跟app store connect上面创建的app名字一致

CFBundleVersion:大版本号(1)

CFBundleShortVersionString:完整版本号(1.0.1)

CFBundleIdentifier:appid(在开发者中心创建的那个appid,不能写错了)

LSApplicationCategoryType:app类,要选择一个app分类

ITSAppUsesNonExemptEncryption:这个好像时什么加密协议 写NO或者FALSE

可以用xcode打开info.plist文件可视化添加key比较直观

8、下面就是使用命令对app进行签名:(所有的库都需要签名,资源文件不需要)

注意:还有一个地方需要注意的,就是在app目录下面的的MacOS目录下面不要放其他的文件,我之前把语言包放在这个目录下面了,后面在上传app的时候一直报错,其他文件都放到资源文件夹里面

命令:codesign --entitlements ${entitlementPath} -v -f -s "${cert}" ${frameworkpath}*

${entitlementPath}  就是xcode拷贝过来的文件路径

${cert}  发布证书名字

${frameworkpath} 被签名的库路径

-v 输出详细信息

-f 覆盖签名,这个一定要加,因为后面你发布的时候经常会不会重新拷贝依赖库,不加就签名不上了,如果证书或者其他信息发生变化时就会存在不同的签名主体,我就是出现过这个问题,因为后面证书删除了重新创建,所以出问题了

-s 发布证书名字

因为依赖库很多,手动敲命令一个一个去签名就比较繁琐了,我写了一个脚本会把所有的库进行签名,然后把app打包成pkg,pkg就是上传app store connect的最终形式。

脚本如下:

#! /bin/bash

# app 绝对路径
apppath="/Users/michaellyn/Desktop/demo"
#依赖库路径
frameworkpath="${apppath}/demo.app/Contents/Frameworks/"
#Qt插件路径
pluginpath="${apppath}/demo.app/Contents/PlugIns/"
#发布证书名字
cert="3rd Party Mac Developer Application: xxxx. (xxx)"
#安装证书名字
certInstall="3rd Party Mac Developer Installer: xxxx. (xxx)"
#沙盒权限配置文件
entitlementPath="${apppath}/demo.entitlements"

#给程序签名
codesign --entitlements ${entitlementPath} -v -f -s "${cert}" ${frameworkpath}*
codesign --entitlements ${entitlementPath} -v -f -s "${cert}" ${pluginpath}bearer/*
codesign --entitlements ${entitlementPath} -v -f -s "${cert}" ${pluginpath}audio/*
codesign --entitlements ${entitlementPath} -v -f -s "${cert}" ${pluginpath}imageformats/*
codesign --entitlements ${entitlementPath} -v -f -s "${cert}" ${pluginpath}mediaservice/*
codesign --entitlements ${entitlementPath} -v -f -s "${cert}" ${pluginpath}platforms/*
codesign --entitlements ${entitlementPath} -v -f -s "${cert}" ${pluginpath}printsupport/*
codesign --entitlements ${entitlementPath} -v -f -s "${cert}" ${pluginpath}iconengines/*
codesign --deep --entitlements ${entitlementPath} -v -f -s "${cert}" ${apppath}/demo.app

#打包pkg并签名安装包
productbuild --component ${apppath}/demo.app /demo --sign "${certInstall}" demo.pkg

#检查安装包以及测试安装
sudo installer -store -pkg demo.pkg -target /

执行上述脚本就可以完成对app的签名打包了,注意修改路径和app名字。

9、上传pkg到app store connect,首先在app store里面下载上传工具:Transporter.

然后使用这个工具上传pkg,上传成功就可以到app store connect对应app的构建版本里面选择刚刚上传的pkg,在编辑完善其他信息就可以提交审核了。

 

审核通过:

发布成功:

 

仅供学校参考 by Dione.

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值