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.

qt 开发的 macos app 上线 appstore相关推荐

  1. 上传MacOS APP到AppStore

    一.图形界面上传APP 1.可以使用 application Loader或transporter上传, 2.iosAPP是上传.ipa文件,MacOS APP是上传pkg包 如何打pkg包,可以参考 ...

  2. 使用Qt开发iOS应用有何优劣?

    作者:JasonWong 链接:https://www.zhihu.com/question/25078050/answer/104635143 来源:知乎 著作权归作者所有.商业转载请联系作者获得授 ...

  3. MacOS中使用QT开发iOS应用

    因为项目合同中规定一部分业务内容要在手机端实现,包括安卓机和苹果机,因此选择了QT作为开发工具.程序在Win10和安卓系统上已经完美运行,这几天开始搭建iOS的编译和发布环境,因为以前没有使用过mac ...

  4. 《Android Studio开发实战 从零基础到App上线(第2版)》出版后记

    2015年11月23日,鄙人在csdn发表了第一篇技术文章,掐指一算距今已有三年.遥想当年开写博客,只是为了总结经验同时分享出来,后来机缘巧合受到出版社编辑邀请并出了书,完全是无心插柳的结果.当初写作 ...

  5. 《Android Studio开发实战 从零基础到App上线》源码运行问题解答

    本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...

  6. 《Android Studio开发实战 从零基础到App上线》第一版的资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线>(第一版)一书用到的工具和代码资源: 1.本书使用的Android Studio版本为2.2.3,因为Andr ...

  7. 《Android Studio 开发实战从零基础到App上线》笔记1

    <Android Studio 开发实战从零基础到App上线>笔记1 前言 在吉林大学Android studio实践的课程上,因为时间有限,教授教授地很不细致,主要讲了初级控件和中级控件 ...

  8. macOS App开发设计规范

    macOS App开发设计规范 macOS SwiftUI 应用架构 macOS SwiftUI 应用架构之全屏模式 01 仅在合理的情况下启用全屏窗口 macOS SwiftUI 应用架构之全屏模式 ...

  9. 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误

    资源下载 下面是<Android Studio开发实战 从零基础到App上线(第2版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为3.2,最新的安装包可前 ...

最新文章

  1. linux下常用命令之nc
  2. c语言1066字符分类统计,C语言字符串操作总结大全(超详细)
  3. Excel单样本T检验
  4. c++ 读写文本文件
  5. hotmail_在新的Hotmail Wave 4中禁用Messenger
  6. Goalng笔记——排序和查找
  7. 一个年轻人为什么毫无欲望?
  8. 【TWVRP】基于matalb粒子群算法求解带时间窗的车辆路径规划问题【含Matlab源码 1272期】
  9. vim编辑器永久显示行号
  10. Blog说明--WaaSinn的专业窝
  11. android百度云和谐,视频总被百度云和谐?这个小工具帮你完美解决
  12. NSSM部署Net Core流程
  13. 常用windows系统的100个dos命令
  14. CSP 2014-03-1 相反数(C++)
  15. 编程速记(2):Pytorch篇-Tenor与numpy的互相转换
  16. 学计算机做纸质笔记,详细图文教你康奈尔大学推荐的超级笔记法,只要一张A4纸张,你也可以做学霸...
  17. 小白 0-1 学习 app 开发,从配置到 hello world
  18. 矢量网络分析仪测试射频线线损的注意事项
  19. 编码器verilog实现
  20. java 并行流水线_在新流水线使用 Java 应用演示

热门文章

  1. 心理创伤如何影响我们的生活?
  2. HTML_06_字符实体
  3. adc去质器什么意思_LOL:人形ADC去质器简略玩法,你的心态有没有被他抓爆过?...
  4. 透过浏览器你能知道用户什么,由人肉搜索说开去
  5. Fiddler对安卓应用手机抓包图文教程
  6. Java用Filter制作登录限制-踢下线防踢等
  7. 小明系列故事——捉迷藏
  8. idea 注解制表符_如何在IntelliJ IDEA中使用制表符进行缩进?
  9. 行业短信 运营思路_这里有一份完整的APP产品运营推广方案(2)-思路网siilu.com...
  10. 宠物属性控制_pet