序言:

  程序使用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的更多相关文章

  1. ionic项目打包好Xcode工程,模拟器运行各种沙盒缓存目录

    用ionic开发好的app,build好iOS端可用的Xcode工程,然后用模拟器跑起来.研究一下js写的代码做本地持久化时,不同类型的文件都放在那里了. cordova-plugin-sqliteS ...

  2. Xcode工程编译之duplicate symbol问题引发的一些知识

    概括: 文件中重复定义了一个函数.变量(比如全局变量) 工程中包含同名的文件. 一般的解决方法 1 在使用import 引入头文件时,由于疏忽,误引入.m 文件. 2 同名文件放在不同的文件夹下. 3 ...

  3. 细聊 Cocoapods 与 Xcode 工程配置

    前言 文章比较长,所以在文章的开头我打算简单介绍一下这篇文章将要讲述的内容,读者可以选择通篇细度,也可以直接找到自己感兴趣的部分. 既然是谈 Cocoapods,那首先要搞明白它出现的背景.有经验的开 ...

  4. Apple Watch 1.0 开发介绍 1.2 简介 配置Xcode工程

    WatchKit app需要一个现有的iOS app.在iOS app工程中,添加一个新的WatchKit app target,它包含了WatchKit app和WatchKit extension ...

  5. Xcode工程文件pbxproj

    Xcode工程文件pbxproj Xcode会去读Project.pbxproj文件,把pbxproj转成plist文件,看起根目录结构 rootObject:指向的是我们的工程对象.(对应一个24个 ...

  6. maven 聚合工程的创建和打包

    ---恢复内容开始--- 使用eclipse创建maven项目 第一步:创建父工程hg-parent,如图; 右击空白处,new创建新maven工程: 搜索maven项目 父工程使用pom打包方式 第 ...

  7. xcode工程编译错误:No architectures to compile for

    问题 开发环境:xcode6,iPhone6模拟器 xcode工程编译错误:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active ...

  8. ominigraffle实践之画精美流程图+自动导出Xcode工程类图

    背景 在平常阅读各种文章时,注意到有的文章中流程图做得特别漂亮.特别羡慕.于是去搜索了下,发现mac平台好评很高的是一款名为ominigraffle的软件.这款软件不仅可以画图,还可以导出Xcode工 ...

  9. 多人开发Xcode工程冲突,打不开解决办法

    在公司多人协作开发,相信好多程序员都遇到非常忧伤的问题,就是工程打不开,这样就无从下手,好多程序怨只能再从代码服务器上下载一份新的代码,今天军哥教你几个小技巧,让你的bigger瞬间提升一个档次 在公 ...

  10. mac系统及xcode使用的SVN客户端安装升级

    当前的SVN版本已经升级到1.8.x了,但mac系统自带的以及xcode使用的SVN客户端版本没有跟着升级,还是1.6.x的版本.为了解决隐藏目录.svn只在根目录下存在的情况,至少要升级到1.7.x ...

随机推荐

  1. 【Azure Redis 缓存 Azure Cache For Redis】Azure Redis删除 TLS 1.0 和 1.1的计划及问题

    问题描述 Azure Redis 正式关闭TLS1.0和1.1关闭的时间 根据文档描述Azure Redis阶段2我们将停止支持 TLS 1.1 和 TLS 1.0,暂时计划 2020 年 12 月 ...

  2. IDE中使用Git提交代码报错:Push to origin/release-V2 was rejected

    一.问题由来 当前项目开发好之后,已经正常稳定运行一两个月,在使用过程中基本上没在出现什么BUG.因此公司在讨论准备开发二期项目,自己 就在之前的基础之上,使用git创建了分支,一个分支release ...

  3. mikumikudance 和 pmxEditor 都可以打开 pmx

    mikumikudance 和 pmxEditor 都可以打开 pmx 模型下载 https://www.bilibili.com/blackboard/activity-5hkwDIRkBv.htm ...

  4. Git: Host key verification failed(主机密钥验证失败)

    换了新电脑Y7000 10750H,之前的项目提示这个,本以为删个什么文件,搜了一阵,没找到答案. 简单粗暴的方法就是再git clone一下,就ok了,这点很不爽.暂时先这么解决了.

  5. linux-debian-把用户加入root组

    使用vim进入 /etc/sudoers   打开这个文件(或者 vi)也行 修改数据: 敲击键盘上个的  i 就可以键入字符了, 在root = ALL(ALL:ALL) ALL  的下面敲击 用户 ...

  6. CC++ 如何确定一个变量的类型(恶心的指针)

    如何确定一个变量的类型 目录 如何确定一个变量的类型 1.如果一个变量声明中没有括号 2.变量声明中有括号 3.检测一下(逐渐变态··· 4.总结 1.如果一个变量声明中没有括号 如果一个变量声明中没 ...

  7. Unity3D 横板跳跃游戏半成品demo源代码

    项目介绍: 基于B站的 Unity3D新手教程进行学习制作,但视频中的做法有很多BUG,此demo是经过优化,几乎修复了教程里带的所有bug. 实现了基本的功能比如:怪物ai,开始菜单,设置菜单,地图 ...

  8. RTMP、X264与交叉编译

    RTMP.X264与交叉编译 ​ 与HTTP(超文本传输协议)同样是一个基于TCP的Real Time Messaging Protocol(实时消息传输协议).由Adobe Systems公司为Fl ...

  9. 3DCAT将携Cloud3D/XR解决方案亮相视博会

    2021年05月10日-12日,亚洲视觉智能与沉浸式产业博览会将在广州·中国进出口商品交易会展展馆隆重开幕!届时,3DCAT实时渲染云将携Cloud3D.CloudXR解决方案惊艳亮相,4.2号展馆H ...

  10. 说说Vue 3.0中Treeshaking特性?举例说明一下?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.是什么 Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术,专业术语叫 Dead code eliminat ...