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.
qt 开发的 macos app 上线 appstore相关推荐
- 上传MacOS APP到AppStore
一.图形界面上传APP 1.可以使用 application Loader或transporter上传, 2.iosAPP是上传.ipa文件,MacOS APP是上传pkg包 如何打pkg包,可以参考 ...
- 使用Qt开发iOS应用有何优劣?
作者:JasonWong 链接:https://www.zhihu.com/question/25078050/answer/104635143 来源:知乎 著作权归作者所有.商业转载请联系作者获得授 ...
- MacOS中使用QT开发iOS应用
因为项目合同中规定一部分业务内容要在手机端实现,包括安卓机和苹果机,因此选择了QT作为开发工具.程序在Win10和安卓系统上已经完美运行,这几天开始搭建iOS的编译和发布环境,因为以前没有使用过mac ...
- 《Android Studio开发实战 从零基础到App上线(第2版)》出版后记
2015年11月23日,鄙人在csdn发表了第一篇技术文章,掐指一算距今已有三年.遥想当年开写博客,只是为了总结经验同时分享出来,后来机缘巧合受到出版社编辑邀请并出了书,完全是无心插柳的结果.当初写作 ...
- 《Android Studio开发实战 从零基础到App上线》源码运行问题解答
本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...
- 《Android Studio开发实战 从零基础到App上线》第一版的资源下载和内容勘误
资源下载 下面是<Android Studio开发实战 从零基础到App上线>(第一版)一书用到的工具和代码资源: 1.本书使用的Android Studio版本为2.2.3,因为Andr ...
- 《Android Studio 开发实战从零基础到App上线》笔记1
<Android Studio 开发实战从零基础到App上线>笔记1 前言 在吉林大学Android studio实践的课程上,因为时间有限,教授教授地很不细致,主要讲了初级控件和中级控件 ...
- macOS App开发设计规范
macOS App开发设计规范 macOS SwiftUI 应用架构 macOS SwiftUI 应用架构之全屏模式 01 仅在合理的情况下启用全屏窗口 macOS SwiftUI 应用架构之全屏模式 ...
- 《Android Studio开发实战 从零基础到App上线(第2版)》资源下载和内容勘误
资源下载 下面是<Android Studio开发实战 从零基础到App上线(第2版)>一书用到的工具和代码资源: 1.本书使用的Android Studio版本为3.2,最新的安装包可前 ...
最新文章
- linux下常用命令之nc
- c语言1066字符分类统计,C语言字符串操作总结大全(超详细)
- Excel单样本T检验
- c++ 读写文本文件
- hotmail_在新的Hotmail Wave 4中禁用Messenger
- Goalng笔记——排序和查找
- 一个年轻人为什么毫无欲望?
- 【TWVRP】基于matalb粒子群算法求解带时间窗的车辆路径规划问题【含Matlab源码 1272期】
- vim编辑器永久显示行号
- Blog说明--WaaSinn的专业窝
- android百度云和谐,视频总被百度云和谐?这个小工具帮你完美解决
- NSSM部署Net Core流程
- 常用windows系统的100个dos命令
- CSP 2014-03-1 相反数(C++)
- 编程速记(2):Pytorch篇-Tenor与numpy的互相转换
- 学计算机做纸质笔记,详细图文教你康奈尔大学推荐的超级笔记法,只要一张A4纸张,你也可以做学霸...
- 小白 0-1 学习 app 开发,从配置到 hello world
- 矢量网络分析仪测试射频线线损的注意事项
- 编码器verilog实现
- java 并行流水线_在新流水线使用 Java 应用演示
热门文章
- 心理创伤如何影响我们的生活?
- HTML_06_字符实体
- adc去质器什么意思_LOL:人形ADC去质器简略玩法,你的心态有没有被他抓爆过?...
- 透过浏览器你能知道用户什么,由人肉搜索说开去
- Fiddler对安卓应用手机抓包图文教程
- Java用Filter制作登录限制-踢下线防踢等
- 小明系列故事——捉迷藏
- idea 注解制表符_如何在IntelliJ IDEA中使用制表符进行缩进?
- 行业短信 运营思路_这里有一份完整的APP产品运营推广方案(2)-思路网siilu.com...
- 宠物属性控制_pet