Mac系统,Qt工程转xcode工程,打包pkg
序言:
程序使用Qt开发,程序主要功能是调用摄像头。需要打包成pkg给到用户安装,打包用到的是xcode。
实际操作:
一、Qt工程转xcode工程
// 打开终端,cd到项目根目录(CamScan.pro目录),使用qmake生成xcode工程文件(CamScan.xcodeproj) cd /Users/yangHu/Desktop/CamScan/CamScan
/Users/App/Qt5.12.12/5.12.12/clang_64/bin/qmake CamScan.pro -spec macx-xcode
二、使用xcode对工程进行设置
// 1.双击[CamScan.xcodeproj],打开XCode
// 2.点击[General],点击[Identity],设置软件信息 App Category // 根据自己软件类型来选择,我的是 Photography
Bundle Identifier // com.公司名称.软件名称,我的是 com.eloam.CamScan
Version // 软件版本号,我的是 1.0
Build // 上架版本号,上架一次需要加一,我的是 1.0
// 部署信息,Deployment Info
Deployment Target // 最低版本,我的是 10.12

// 软件图标,App Icons
// 1.Soure,点击[Use Asset Catalog],弹出的窗口,点击[Migrate]
// 2.此时在选择框的后面会出现向右的箭头,要是没有出现箭头,请重启XCode
// 3.点击向右的箭头,将准备好的图标文件拖放到对应的位置
// 4.点击[Build],就可以看到生成的app是带有图标的了 *:图标文件的格式为png图片
*:图片大小分别是:16*16,32*32,64*64,128*128,256*256,512*512,1024*1024
*:如果没有所有规格的图片也没关系,我的只上传了16~128的图片,正常使用,就是图标会有点模糊

// 一般信息,[General] [Info]
// 我的项目需要用到摄像头,摄像头是需要权限的,所以要添加摄像头权限
// 在 [Custom macOS Application Target Properties] 中点击 [Add Row],选择一个带 Camera 的选项 *:如果这里没有添加,也没关系,可以直接在 app 的包里面的 Info.plist 文件中添加
*:找到app,点击鼠标右键,显示包内容,就可以看到 Info.plist 文件,双击打开,[Add Row],选择[Privacy - Camera Usage Description]

// 签名和功能,[General] [Signing & Capabilities] // 签名 [Signing]
// 1.勾选 Automatically manage signing
// 2.Team,我的是:Shenzhen Eloam Technology Co., Ltd
// 3.Bundle Identifier,我的是:com.eloam.CamScan
// 4.Provisioning Profile,我的是:None Required
// 5.Signing Certificate,我的是:Development // 功能
// 1. 点击[Capability],双击[App Sandbox]
// 2. [Hardware],勾选[Camera] [USB]
// 3. [File Access] [User Selected File],设置成:Read/Write

三、编译
// 1.编译,在XCode标题栏,点击[Product],点击[Archive]
*:Archive生成的包,名称叫:CamScan 2023-4-7,10.27 AM xxx
*:生成的文件一般保存在:/User/yH/Library/Developer/Xcode/Archives // 2.检查动态库和framework是否完全打包,没有的话需要添加
// 2.1 进入 CamScan 2023-4-7,10.27 AM xxx,找到 CamScan.app
// 2.2 /Users/App/Qt5.12.12/5.12.12/clang_64/bin/macdeployqt CamScan.app
// 2.3 检查 CamScan.app 是否可以运行,要是没有权限,就是需要签名
四、签名
// 需要先对包里面的文件签名,然后在对包签名
// 点击[CamScan.app],显示包内容,使用终端签名
codesign --options=runtime -f -s "证书Info" --timestamp=none *.framework
codesign --options=runtime -f -s "证书Info" --timestamp=none *.dylib
codesign --options=runtime -f -s "证书Info" --timestamp=none */*.dylib *:注意签名命令中证书名证的空格 // 对包签名
// 先在XCode工程目录中将,CamScan.entitlements 拷贝到 CamScan.app 文件夹,在签名app
codesign --options=runtime -f -s "证书Info" --timestamp --entitlements CamScan.entitlements CamScan.app 然后双击就可以正常使用app了
主要是对 FrameWorks 和 Plugins 文件夹里面的文件签名

五、打包发布
productbuild --component CamScan.app /Applications -s "证书Info" --timestamp=none CamScan_Sign.pkg
productsign --sign "证书Info" --timestamp CamScan_Sign.pkg ./CamScan.pkg *:打包的证书名称和签名的证书名称是不一样的
CamScan.pkg 就是最终的安装包,可以直接给到用户安装了。
Mac真心不好玩,主要还是技术能力不够。
Mac系统,Qt工程转xcode工程,打包pkg的更多相关文章
- ionic项目打包好Xcode工程,模拟器运行各种沙盒缓存目录
用ionic开发好的app,build好iOS端可用的Xcode工程,然后用模拟器跑起来.研究一下js写的代码做本地持久化时,不同类型的文件都放在那里了. cordova-plugin-sqliteS ...
- Xcode工程编译之duplicate symbol问题引发的一些知识
概括: 文件中重复定义了一个函数.变量(比如全局变量) 工程中包含同名的文件. 一般的解决方法 1 在使用import 引入头文件时,由于疏忽,误引入.m 文件. 2 同名文件放在不同的文件夹下. 3 ...
- 细聊 Cocoapods 与 Xcode 工程配置
前言 文章比较长,所以在文章的开头我打算简单介绍一下这篇文章将要讲述的内容,读者可以选择通篇细度,也可以直接找到自己感兴趣的部分. 既然是谈 Cocoapods,那首先要搞明白它出现的背景.有经验的开 ...
- Apple Watch 1.0 开发介绍 1.2 简介 配置Xcode工程
WatchKit app需要一个现有的iOS app.在iOS app工程中,添加一个新的WatchKit app target,它包含了WatchKit app和WatchKit extension ...
- Xcode工程文件pbxproj
Xcode工程文件pbxproj Xcode会去读Project.pbxproj文件,把pbxproj转成plist文件,看起根目录结构 rootObject:指向的是我们的工程对象.(对应一个24个 ...
- maven 聚合工程的创建和打包
---恢复内容开始--- 使用eclipse创建maven项目 第一步:创建父工程hg-parent,如图; 右击空白处,new创建新maven工程: 搜索maven项目 父工程使用pom打包方式 第 ...
- xcode工程编译错误:No architectures to compile for
问题 开发环境:xcode6,iPhone6模拟器 xcode工程编译错误:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active ...
- ominigraffle实践之画精美流程图+自动导出Xcode工程类图
背景 在平常阅读各种文章时,注意到有的文章中流程图做得特别漂亮.特别羡慕.于是去搜索了下,发现mac平台好评很高的是一款名为ominigraffle的软件.这款软件不仅可以画图,还可以导出Xcode工 ...
- 多人开发Xcode工程冲突,打不开解决办法
在公司多人协作开发,相信好多程序员都遇到非常忧伤的问题,就是工程打不开,这样就无从下手,好多程序怨只能再从代码服务器上下载一份新的代码,今天军哥教你几个小技巧,让你的bigger瞬间提升一个档次 在公 ...
- mac系统及xcode使用的SVN客户端安装升级
当前的SVN版本已经升级到1.8.x了,但mac系统自带的以及xcode使用的SVN客户端版本没有跟着升级,还是1.6.x的版本.为了解决隐藏目录.svn只在根目录下存在的情况,至少要升级到1.7.x ...
随机推荐
- 【Azure API 管理】APIM Self-Host Gateway 自建本地环境中的网关数量超过10个且它们的出口IP为同一个时出现的429错误
问题描述 Azure API Management服务支持使用自建网关来实现API服务,这样APIM的所有请求都可以走在自管理的企业内网中.流量都更加安全.当根据官网文档搭建后,如果在本地环境中部署超 ...
- STM32SPIFLASH读写
STM32SPIFLASH读写 1.1 SPI注意事项 SPI是同步通信,即通信双方每次信息交互必会带有一问一答,这代表在正常的单核MCU(例如STM32)中很难实现软件模拟的双向SPI通信(TFT屏 ...
- 【教程】navicat配合HTTP通道远程连接SQLite数据库
前言 缘由 好奇的我想查看服务器上宝塔面板的SQLite数据库 久别一月,特来水文.起因是我看到服务器上搭建的宝塔面板,好奇其中使用的SQLite数据库,想用navicat远程连接看一下,奈何不会玩, ...
- Redis单线程为什么如此之快
一.概述 Redis的高并发和快简单可以归结为一下几点: 1.Redis是基于内存的: 2.Redis是单线程的: 3.Redis使用多路复用技术. 4.高效的数据结构 但具体怎么做的呢,下面来详细看 ...
- modalError.vue 错误提示框 vue2 iview
需求 一个错误提示框,后台需要有换行,默认没有换行,做一个支持换行的全局错误提示函数. 注意 代码只展示原理,直接不能使用,里面有getAc,有需要参考 https://www.cnblogs.com ...
- vscode 切换项目快捷键 Alt + Shift + P 插件 Project Manager
vscode 切换项目快捷键 Alt + Shift + P 插件 Project Manager 需求 快速切换同时打开的项目 解决方案 Alt + Shift + P 话说这个插件很早就用了,但是 ...
- C#使用Stateless和箭头控件实现状态机的控制及显示
之前开发一个小工具,内部实现一个状态机,并显示状态机当前状态及状态间的转移过程.我使用了Stateless开源类库及一个开源自定义箭头控件.自定义箭头控件是HZHControls其中一个控件,我单独把 ...
- 可穿戴智能手环解决方案之BLE的ADV广播协议解读
一 概念 直接上英文原文,怕自己的翻译误导大家. When a BLE device is advertising, it periodically transmits packets, which ...
- FIR滤波器的设计和实现
FIR的作用和价值 FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时 ...
- Justep X5 Studio,业界公认第一的快速开发平台
Justep X5 Studio,业界公认第一的快速开发平台,提供完全可视化.组件化开发环境,具备超强的工作流.组织机构和权限.复杂图表和报表.丰富的业务规则定制能力,以及各种浏览器环境下的复杂业务展 ...