QT打包Macosx应用发布App Store简易流程
1、QC里编译工程,生成Release版的的app文件;
2、运行macdeployqt把需要的文件打包进app文件中;
% ~/Qt/5.15.0/clang_64/bin/macdeployqt {编译的app文件所在路径}/Release/xxxx.app
3、使用codesign对app进行签名,如果要发App Store的话使用"Mac App Distribution"证书,如果不发的话使用”Developer ID Installer“证书,证书配置在苹果开发者账号苹果证书中创建。
下载证书并安装,结果如下:

3、然后使用codesign对app签名:
% codesign --entitlements {entitlements文件所在目录}/xxxx.entitlements -f -s "3rd Party Mac Developer Application: xxxxxx Co.,Ltd (VQ3IY989UY87)" -v xxxx.app --deep
#运行完结果如下:
xxxx.app: replacing existing signature
xxxx.app: signed app bundle with Mach-O thin (x86_64) [com.xxxx.xxxx] #此处是Bundle Identifier#签名完成
权限文件xxxx.entitlements,可以在xcode的工程里去复制一个,也可以根据需要的权限手工编辑:

检查签名结果:
% codesign -dvvv --entitlements - xxxx.app
Executable=/这里忽略目录/xxxx.app/Contents/MacOS/xxxx
Identifier=com.xxxx.xxxx
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20400 size=18452 flags=0x0(none) hashes=566+7 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha256=3ed48febdcc36c83hfyuuyt876236f4633bb7b
CandidateCDHashFull sha256=3ed48febdcc36c83a748febdcc36c83hfyuuyt876236f463317fb2f401a8f7a7afaf
Hash choices=sha256
CMSDigest=3ed48febdcc36dcc36c83hfyuuyt876236f46337fb2f401a8f7a7afaf
CMSDigestType=2
CDHash=3ed48febdcc3648dcc36c83hfyuuyt87623332f17236f4633bb7b
Signature size=4854
Authority=3rd Party Mac Developer Application: xxxxxxxxx Co.,Ltd (VQ3IY989UY87)
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=Nov 2, 2024 at 01:06:18
Info.plist entries=14
TeamIdentifier=V86876Q87987F
Sealed Resources version=2 rules=13 files=46
Internal requirements count=1 size=232
[Dict][Key] com.apple.developer.usernotifications.communication[Value][Bool] true[Key] com.apple.security.app-sandbox[Value][Bool] true[Key] com.apple.security.files.user-selected.read-only[Value][Bool] true[Key] com.apple.security.files.user-selected.read-write[Value][Bool] true[Key] com.apple.security.network.client[Value][Bool] true[Key] com.apple.security.network.server[Value][Bool] true[Key] com.apple.security.personal-information.photos-library[Value][Bool] true[Key] com.apple.security.print[Value][Bool] true#下部分是权限列表
4、然后打开xxxx.app,找到里面的Info.plist文件编辑内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>CFBundleExecutable</key> <!--这个必须要有--><string>xxxx</string><key>CFBundleIconFile</key><string>icon.icns</string><key>CFBundleIdentifier</key> <!--这个必须要有--><string>com.xxxx.xxxx</string><key>CFBundlePackageType</key> <!--这个必须要有--><string>APPL</string><key>CFBundleSignature</key><string>????</string><key>LSMinimumSystemVersion</key><string>10.13</string><key>NOTE</key><string>This file was generated by Qt/QMake.</string><key>NSPrincipalClass</key> <!--这个必须要有--><string>NSApplication</string><key>NSSupportsAutomaticGraphicsSwitching</key><true/><key>CFBundleDisplayName</key> <!--这个尽量要有--><string>我的应用</string><key>CFBundleName</key><string>我的应用</string> <!--这个必须要有--><key>LSApplicationCategoryType</key> <!--这个必须要有--><string>public.app-category.utilities</string><key>CFBundleVersion</key> <!--这个必须要有--><string>100</string><key>CFBundleShortVersionString</key><string>1.0.0</string> <!--这个必须要有--><key>ITSAppUsesNonExemptEncryption</key><false/>
</dict>
</plist>
5、然后,使用productbuild对app进行打包成pkg文件,这里注意使用另外一个安装证书”3rd Party Mac Developer Installer“:

% productbuild --component xxxx.app /Applications/ --sign "3rd Party Mac Developer Installer: xxxxxxxx Co.,Ltd (VQ3IY989UY87)" --product xxxx.app/Contents/Info.plist xxxx.pkgproductbuild: Adding component at /这里省略路径了/Release/智行动力.app
productbuild: Signing product with identity "3rd Party Mac Developer Installer: xxxxxxxx Co.,Ltd (VQ3IY989UY87)" from keychain /Users/hhhhh/Library/Keychains/login.keychain-db
productbuild: Adding certificate "Apple Worldwide Developer Relations Certification Authority"
productbuild: Adding certificate "Apple Root CA"
productbuild: Wrote product to xxxx.pkg
productbuild: Supported OS versions: [Min: 10.13, Before: None]#上面执行完成
6、最后,将生成pkg文件拖拽到Transporter中,看看Transporter上传检查是否出错,如果不出错就可以发布了。
注意:签名证书和产品打包证书是两个;
其余的就,自求多福吧!
相关文章:
QT打包Macosx应用发布App Store简易流程
1、QC里编译工程,生成Release版的的app文件; 2、运行macdeployqt把需要的文件打包进app文件中; % ~/Qt/5.15.0/clang_64/bin/macdeployqt {编译的app文件所在路径}/Release/xxxx.app 3、使用codesign对app进行签名,如果要发App…...
untiy mlagents 飞机大战 ai训练
前言 之前那个python源码的飞机大战bug过多,还卡顿,难以继续训练。可直接放弃的话又不甘心,所以找了个unity版本的飞机大战继续(终于不卡了),这次直接使用现成的mlagents库。 过程 前前后后花了两周时间,甚至因此拖…...
从0开始学统计-什么是中心极限定理
引言 中心极限定理(Central Limit Theorem, CLT)是统计学中的一块基石,它揭示了一个难以置信的数学现象:无论一个随机变量的原始分布如何,只要我们取足够大的样本量,这些样本的平均值(或总和&a…...
工具方法 - 个人活动的分类
人类活动的分类是一个复杂的话题,因为人类的活动范围非常广泛且相互交叉。然而,我们可以尝试将人类的活动大致分为以下几个主要类别: 工作活动 工作活动是人类生活中不可或缺的一部分,通常包括以下方面: 1. 职业工作&a…...
11.1组会汇报-基于区块链的安全多方计算研究现状与展望
基础知识 *1.背书,这个词源来自银行票据业务,是指票据转让时,原持有人在票据背面加盖自己的印鉴,证明该票据真实有效、如果有问题就可以找原持有人。 区块链中的背书就好理解了。可以简单的理解为验证交易并声明此交易合法&…...
ubuntu【桌面】 配置NAT模式固定IP
DHCP分配导致虚拟机IP老变,SSH老要重新配置,设成静态方便些 一、设NAT模式 1、设为NAT模式 2、看模式对应的虚拟网卡 - VMnet8 3、共享主机网卡网络到虚拟网卡 - VMnet8 二、为虚拟网卡设置静态IP 记住这个IP 三、设置ubuntu固定IP 1、关闭DHCP并…...
评估 机器学习 回归模型 的性能和准确度
回归 是一种常用的预测模型,用于预测一个连续因变量和一个或多个自变量之间的关系。 那么,最后评估 回归模型 的性能和准确度非常重要,可以帮助我们判断模型是否有效并进行改进。 接下来,和大家分享如何评估 回归模型 的性能和准…...
如何下载安装TestLink?
一、下载TestLink、XAMPP TestLink 下载 |SourceForge.net 备用:GitHub - TestLinkOpenSourceTRMS/testlink-code: TestLink开源测试和需求管理系统 下载XAMPP: Download XAMPP 注意:TestLink与PHP版本有关系,所以XA…...
基于SSM+微信小程序的订餐管理系统(点餐2)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的订餐管理系统实现了管理员和用户。管理端实现了 首页、个人中心、用户管理、菜品分类管理、菜品信息管理、订单信息管理、配送信息管理、菜品评价管理、订单投诉管理、…...
【C++排序 双指针】1996. 游戏中弱角色的数量|1996
本文涉及的基础知识点 排序 C算法:滑动窗口及双指针总结 本题其它解法 【C单调栈 排序】1996. 游戏中弱角色的数量|1996 LeetCode1996. 游戏中弱角色的数量 你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个…...
GESP4级考试语法知识(捕捉异常)
参考程序代码: #include <iostream> using namespace std;double divide(double a, double b) {if (b 0) {throw "Division by zero error"; // 抛出异常}return a / b; }int main() {double num1, num2;cout << "Enter two numbers:…...
HTML 基础标签——元数据标签 <meta>
文章目录 1. `<meta>` 标签概述2. 属性详解2.1 `charset` 属性2.2 `name` 属性2.3 `content` 属性2.4 `http-equiv` 属性3. 其他常见属性小结在 HTML 文档中,元数据标签 <meta> 是一种重要的标签,用于提供关于文档的信息,这些信息不直接显示在网页内容中,但对于…...
栈虚拟机和寄存器虚拟机,有什么不同?
本来这节内容是打算直接讲字节码指令的,但讲之前又必须得先讲指令集架构,而指令集架构又分为两种,一种是基于栈的,一种是基于寄存器的。 那不妨我们这节就单独来讲讲栈虚拟机和寄存器虚拟机,它们有什么不同࿰…...
Windows下基于fping进行批量IP测试
fping是Linux下一个很好用的IP测试工具,结合代码可以完成批量的IP测试,在网络调试中用途很广。本文是基于fping for Windows结合bat批处理,定制的测试脚本样例。 一、程序信息 本次测试使用fpingV5.1 for Windows版,版本信息如下…...
一款实用的Word文档图片转换与水印保护工具
目录 前言软件功能简介软件实现方法及关键代码 1. Word 文档转图片的实现2. 图片水印添加功能3. 生成数字指纹(哈希值)4. 保存图片信息到 JSON 文件 软件的实际使用场景软件操作指南 1. 下载和安装2. 操作流程 总结 1,前言 在日常办公和内…...
优化用于传感应用的衬底集成波导技术
ANSYS HFSS 是一款功能强大的电磁仿真软件,支持为微流体生物传感器应用设计和分析衬底集成波导 (SIW) 技术。它为快速设计优化、材料选择、系统集成和虚拟原型制作提供了一个强大的平台。借助 ANSYS HFSS,研究人员和工程师可以高效…...
Java多态特性的向上转型
Java的多态特性通过向上转型来实现。向上转型指的是将子类对象赋值给父类引用变量的操作。这样做的好处是可以使用父类引用变量来调用子类对象的方法。 例如,有一个父类Animal和一个子类Dog,可以这样进行向上转型: Animal animal new Dog(…...
C++ 判断语句的深入解析
C 判断语句的深入解析 C 是一种广泛使用的编程语言,以其高效性和灵活性著称。在 C 中,判断语句是控制程序流程的关键组成部分,它们允许程序根据不同的条件执行不同的代码路径。本文将深入探讨 C 中的判断语句,包括 if、else if、…...
15分钟学 Go 第 33 天:项目结构
第33天:项目结构 目标:了解Go项目的典型结构 在Go语言的开发中,项目结构的合理性直接影响着代码的可维护性、可扩展性和团队协作效率。本篇文章将深入探讨Go语言的典型项目结构,并提供实际示例代码和相关的流程图。 一、Go项目…...
conda迁移虚拟环境路径
方法一:使用软连接 ln -s ~/Anaconda3/envs /new/path/envs 方法二:修改~/.condarc文件 1.打开~/.condarc文件 #添加下面参数 envs_dirs: - /newpath/anaconda3/envs pkgs_dirs: - /newpath/anaconda3/pkgs 2. source ~/.bashrc 3.查看是否成功con…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...
