使用QtWebEngine的Mac应用如何发布App Store
前言
因为QtWebEngine时第三方包,苹果并不直接支持进行App Store上签名和发布,所以构建和发布一个基于使用QtWebEngine的应用程序并不容易,这里我们对Qt 5.8稍微做一些修改,以便让我们的基于QtWeb引擎的应用程序并让签名能够得到苹果的许可。
QtWebEngine提供了C++和Qml的接口,可以在Widget/Qml中渲染HTML、XHTML、SVG,也支持CSS样式表和JavaScript脚本。
QtWebEngine的架构图如下

基于Chromium封装了一个WebEngineCore模块,在此之上,WebEngine Widgets模块专门用于Widget项目,WebEngine 模块用于Qml项目,WebEngineProcess则是一个单独的进程,用来渲染页面、运行js脚本。Web在单独的进程里,我们开发的时候知道这一点就好了,不需要额外关注,只要在发布的时候,带上QTDIR目录下的可执行程序QtWebEngineProcess即可。
WebEngine的平台要求
首先一条是:不支持静态编译 (因为依赖的chromium、chromium本身的依赖库 不能静态编译)接下来再看看各平台的要求和限制:
Windows
编译器要 Visual Studio 2017 version 15.8 以上
系统环境要 Windows 10 SDK
默认只支持X64版本,如果要x86版本,要自己编译qt源码。
MacOS
- MacOS 10.12以上
- XCode 8.3.3以上
- MacOS 10.12以上 SDK
不支持32-bit
不兼容 Mac App Store (chromium使用了私有api,App Sandbox和chromium Sandbox优先级问题)
Linux
编译器要 clang, 或者 gcc 5以上
需要pkg-config来探测依赖库,dbus-1和 fontconfig是必须的。
如果配置了xcb,还要额外配置相关库。
WebView
Qt还提供了一个WebView组件,可以用来将Web内容嵌入到Qml程序中。(这个没有提供Widget的接口)
WebView组件的实现,使用了平台原生api,在移动端意义重大,特别是在ios平台,使用原生的web view,这样就能兼容App Store了。
第一、修改WebEngine三方包
下面我们开始解决如何使用3rd Party Mac Developer Application进行签名的全过程,这样的应用就可以发布App Store。
从理论上讲,QtWebEngine自Qt5.7以来只需重建即可与Apple Mac Store兼容,但由于Chromium库代码和Apple Mac Store规则的变化,即使对于Qt5.9 LTS版本来说,重建目前也是不够的。
我们使用Qt 5.8是因为我们想保持对macOS 10.9的支持,我们还没有用Qt 5.9 LTS进行测试。
首先需要安装Qt源代码,这可以使用MainenanceTool应用程序完成。
第二、Entitlements权限
您需要一个包含以下内容的权限文件(除了主应用程序之一)来签署QtWebEngineProcess应用程序,格式如下:
相关文章:
使用QtWebEngine的Mac应用如何发布App Store
前言 因为QtWebEngine时第三方包,苹果并不直接支持进行App Store上签名和发布,所以构建和发布一个基于使用QtWebEngine的应用程序并不容易,这里我们对Qt 5.8稍微做一些修改,以便让我们的基于QtWeb引擎的应用程序并让签名能够得到苹果的许可。 QtWebEngine提供了C++和Qml的…...
微机原理与接口技术——中断系统与可编中断控制芯片8259A
目录 一、8259A 芯片介绍 二、8259A 的内部结构和引脚 三、8259A 的中断工作过程 四、8259A 的工作方式 五、8259A 的编程 六、外部中断服务程序 一、8259A 芯片介绍 Intel 8259A 是可编程中断控制器,可用于管理 Intel 8080/8085、8086/8088、80286/80386 的…...
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
目录 1. start() (1) start() 的性质 (2) start() 和 Thread类 的关系 2. 终止一个线程 (1)通过共享的标记结束线程 1. 通过共享的标记结束线程 2. 关于 lamda 表达式的“变量捕获” (2) 调用interrupt()方法 1. isInterrupted() 2. currentThread() …...
面试题分享11月7日
1、ThreadLocal 是什么 是 Java 中线程的本地方法变量,用来存储每个线程的私有数据,每个线程都有它的独立副本,相互隔离,互不影响 2、ThreadLocal 实现原理 每个 ThreadLocal 都有一个 ThreadLocalMap 对象,用来存储…...
数据结构_哈夫曼树及其应用
构造算法的例子 构造算法的实现 初始化,置权值 int i, m, s1, s2;m 2 * n - 1;for (i 1; i < m; i){HT[i].lch 0;HT[i].rch 0;HT[i].parent 0;}for (i 1; i < n; i){cin >> HT[i].weight;}合并结点 // 创建哈夫曼树for (i n 1; i < m; i){s1…...
从0开始学习机器学习--Day19--学习曲线
一般来说,如果一个算法的表现不理想,那么多半是因为出现了欠拟合或过拟合问题,这种时候我们要做的就是搞清楚出现的是偏差问题还是方差问题,亦或是二者皆有,这有助于我们精准定位问题所在。 之前,我们发现…...
2.索引:深入解析 B+ 树:原理、MySQL 应用及与其他数据结构的对比
B 树是一种高效的平衡树结构,在数据库和文件系统中被广泛应用,尤其在 MySQL 中,InnoDB 存储引擎通过 B 树实现索引结构,提升了大数据量条件下的查询性能。 本文将深入介绍 B 树的原理和设计特点,分析 MySQL 中使用 B …...
[全网最细数据结构完整版]第六篇:3分钟带你吃透栈并模拟实现
目录 1->栈的概念和结构 1.1栈的概念 1.2栈的结构 2->栈的实现 2.1定义关于栈的结构体和各种函数 2.2栈的初始化 STInit 函数 2.3栈的销毁 STDestroy 函数 2.4栈的插入操作 STPush 函数 2.5栈的判断是否为空操作 STEmpty 函数 2.6栈的删除操作 STPop 函数 2.7…...
如何在 Docker 容器中启动 X11 图形界面程序
如何在 Docker 容器中启动 X11 图形界面程序 在使用 Docker 时,我们通常会发现,容器中的图形应用没法直接显示到宿主机的界面上。不过,我们可以通过共享 X11 的 Unix 套接字,让容器把显示数据传递给宿主机的 X11 服务器ÿ…...
pycharm保存是自动格式化
在PyCharm中设置保存时自动格式化代码,可以按照以下步骤进行: 1. 打开设置 在Windows和Linux系统中,可以通过File(文件)->Settings(设置)打开设置窗口;在Mac系统中,…...
.netCore WebAPI中字符串加密与解密
In today’s digital landscape, securing sensitive information is more critical than ever. If you’re using ASP.NET Core, you might store configuration settings in appsettings.json. However, hardcoding sensitive data like connection strings or API keys in p…...
Next.js + Move 石头剪刀布
rock-paper-scissors 写在前面 本地 源码:https://github.com/zcy1024/SuiStudy/tree/main/rock-paper-scissors # 或其它等价的命令来安装依赖并将项目跑起来 pnpm install pnpm run dev # http://localhost:3000/在线(如果没过期的话) …...
[面试]关于Redis 的持久化你了解吗
Redis的持久化是指Redis服务器在关闭或重启时,将内存中的数据保存到磁盘上的一种机制。Redis支持多种持久化方式。 一、RDB(Redis Database)持久化 RDB持久化是Redis默认采用的持久化方式,它将Redis在某个时间点的数据保存到磁盘上…...
Systemd:tmpfiles
Systemd提供了一个结构化的可配置方法来管理临时文件和目录,即systemd-tmpfiles,可以创建、删除和管理临时文件的服务。 $ systemctl list-units --all | grep systemd-tmpfilessystemd-tmpfiles-clean.service load…...
【Flutter 内嵌 android 原生 View以及相互跳转】
Flutter 内嵌 android 原生 View以及相互跳转 一. 内嵌android 原生View二、android 与 flutter 相互跳转 一. 内嵌android 原生View 在android 工程的包名下,也可在MainActivity创建 android 原生view ,继承PlatformView // 1.自定义textview public st…...
python externally-managed-environment 外部管理环境
https://realpython.com/python-virtual-environments-a-primer/?refyaolong.net#why-do-you-need-virtual-environments 简而言之, pip 默认会将您安装的所有外部包放置在 Python 安装路径/site-packages/ 的文件夹中一些Linux 和 macOS操作系统 预装了内部的 P…...
前端 | MYTED单篇TED词汇学习功能优化
文章目录 📚实现效果🐇before🐇after 📚模块实现解析🐇html🐇css🐇javascript 📚实现效果 🐇before 点击TED单篇词汇表按钮,选择对应TED打卡号,…...
64 mysql 的 表锁
前言 我们这里来说的就是 我们在 mysql 这边常见的 几种锁 行共享锁, 行排他锁, 表意向共享锁, 表意向排他锁, 表共享锁, 表排他锁 我们前面了解了行共享锁, 行排他锁, 表意向共享锁, 表意向排他锁 等等相关 我们这里 来看一下 表共享锁, 表排他锁 的获取, 以及 和 其他表级…...
【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】题库(1)
前言 大家好吖,欢迎来到 YY 滴计算机网络 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的计算机网络题目,供yy应对期中考试复习。大家可以参考 欢迎订阅 YY滴其他专栏!…...
ajax关于axios库的运用小案例
AJAX案例 图书管理 四大功能: 展示图书删除图书编辑图书信息新增图书 步骤 1.bootstrap弹窗来实现新增和编辑图书时出现的弹窗 有两种方案: a.可以用自带的属性来进行弹窗的显示和隐藏 b.可以通过JS进行控制,此操作可以进行自定义&am…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
