iOS 自动签名打包,并用脚本上传appstore

背景:

1)测试环境给测试,产品,或者其他业务人员打测试包时,经常存在需要添加设备,不得不重新生成描述文件,手动去更新打包机描述文件配置
2)证书,描述文件过期造成打包失败,需要重新生成描述文件,证书等。并手动更换
3)开发人员设备需要手动安装证书,描述文件,p12文件等。过期时也要手工更换
4)测试验收完最后一个包时,需要手动打包上传到appstore

针对这些现状,对打包脚本进行了改进。使用苹果推出的自动签名机制进行打包,并上传appStore
自动签名打包需要配置的内容如下:
1, 打开Xcode在左上角Xcode点击下拉菜单,然后选中Setting
在这里插入图片描述

接下来在弹出的操作面板上选择Account,选择自己的apple developer Account 进行登录。
2,在Xcode的Sign& Capabilities 栏下方勾选 autoMatically manage signing, 并选择自己的team,具体如下图所示:
在这里插入图片描述

3,配置ipa导出选项(一个ExportOptions.plist文件,导出ipa包时执行脚本命令需要)
1)Ad-hoc包配置如下:
在这里插入图片描述

2)Release包配置如下:
在这里插入图片描述

3)Debug包配置如下:
在这里插入图片描述

4,打包命令:

archive
xcodebuild archive -workspace ProjectName.xcworkspace -scheme targetName -configuration Release -archivePath path/xxx.xcarchive -quiet -destination generic/platform=iOS -allowProvisioningUpdates
exportArchive
xcodebuild -exportArchive -archivePath path/xxx.xcarchive -exportPath ipaPath -exportOptionsPlist path/ExportOptions.plist -allowProvisioningUpdates

其中,命令中的ProjectName、targetName、path、ipaPath等都需要根据自己的项目来配置。ExportOptions.plist需要根据自己的ipa包类型比如debug、release、adhoc来指定具体的文件
5,调试件脚本
经过上面的配置后,第一次打包很顺利成功了,导出也没问题。但是过了一天再次打包就出问题了,终端提示如下:

DVTPortal: Error:
Error Domain=DVTPortalServiceErrorDomain Code=1100 "Your session has expired. Please log in." UserInfo={payload={

经过排查发现是xcode登录账号时,默认会使用钥匙串,因此需要把默认的使用钥匙串关掉。
操作步骤如下:
1)在Xcode退出所有已经登录的apple developer Account
2)退出Xcode
3)在终端执行如下命令:defaults write com.apple.dt.Xcode DVTDeveloperAccountUseKeychainService_2 -bool NO
4)重新打开Xcode,登录apple developer Account
经过这些操作后,目前没有再出现这个报错了。
参考网址:https://developer.apple.com/forums/thread/112606

5)上传appStore
通过命令行上传appStore官方文档地址:
https://help.apple.com/asc/appsaltool/#/apdATD1E53-D1E1A1303-D1E53A1126
创建App 专用密码官方文档地址:
https://support.apple.com/zh-cn/102654
最终的上传ipa包的命令如下:

xcrun altool --upload-package ${ipaPath} -t ios  --apple-id env.appId --bundle-id env.bundle_id --bundle-short-version-string ${APP_VERSION} --bundle-version ${BUILD_NUMBER} -u env.username -p env.password

其中env.appId是从appStore中,app信息里查看获取,env.bundle_id是info.plist中的bundle identifier,APP_VERSION是info.plist的version,BUILD_NUMBER是info.plist文件中的BuildNumber

附件资源下载链接:链接: https://pan.baidu.com/s/1qR5-nrYjnIhLI7xqPUqn4Q?pwd=3pdi 提取码: 3pdi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/213841.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Lag-Llama:基于 LlaMa 的单变量时序预测基础模型

文章构建了一个通用单变量概率时间预测模型 Lag-Llama,在来自Monash Time Series库中的大量时序数据上进行了训练,并表现出良好的零样本预测能力。在介绍Lag-Llama之前,这里简单说明什么是概率时间预测模型。概率预测问题是指基于历史窗口内的…

目标检测算法改进系列之添加变核卷积AKConv模块

AKConv变核卷积 KConv的主要思想:AKConv(可变核卷积)主要提供一种灵活的卷积机制,允许卷积核具有任意数量的参数和采样形状。这种方法突破了传统卷积局限于固定局部窗口和固定采样形状的限制,从而使得卷积操作能够更加…

【栈和队列(2)】

文章目录 前言队列队列方法队列模拟实现循环队列练习1 队列实现栈 前言 队列和栈是相反的,栈是先进后出,队列是先进先出,相当于排队打饭,排第一的是最先打到饭出去的。 队列 队列:只允许在一端进行插入数据操作&…

Python练习题(二)

📑前言 本文主要是【Python】——Python练习题的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&am…

Pytest测试攻略:探寻pytest.main()隐藏的利器

更多资料获取 📚 个人网站:ipengtao.com 在Pytest测试框架中,pytest.main()是一个重要的功能,用于启动测试执行。它允许以不同方式运行测试,传递参数和配置选项。本文将深入探讨pytest.main()的核心功能,提…

栈和队列OJ题——15.循环队列

15.循环队列 622. 设计循环队列 - 力扣(LeetCode) * 解题思路: 通过一个定长数组实现循环队列 入队:首先要判断队列是否已满,再进行入队的操作,入队操作需要考虑索引循环的问题,当索引越界&…

Qt/QML编程学习之心得:如何添加资源文件到QML工程(十一)

Qt作为一种GUI界面编辑工具,在嵌入式编程中也大受欢迎,而进一步QML出现了,QML我理解也是一种资源文件,因为像其他资源文件一样添加进工程的。那么一个图片如何增加进资源文件呢?这个的确很基础,就是把资源文…

IdleStateHandler 心跳机制源码详解

优质博文:IT-BLOG-CN 一、心跳机制 Netty支持心跳机制,可以检测远程服务端是否存活或者活跃。心跳是在TCP长连接中,客户端和服务端定时向对方发送数据包通知对方自己还在线,保证连接的有效性的一种机制。在服务器和客户端之间一…

C++实现DFS、BFS、Kruskal算法和Prim算法、拓扑排序、Dijkstra算法

背景: 实现要求: 根据图的抽象数据类型的定义,请采用邻接矩阵来存储图1,采用邻接表来存储图2,并完成如下操作:对图1无向图进行深度优先遍历和广度优先遍历。对图1无向图采用Kruskal算法和Prim算法得出最小…

<蓝桥杯软件赛>零基础备赛20周--第8周第2讲--排序的应用

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周(读者可以按…

c语言-归并排序

目录 1、归并排序基本思想 2、归并排序的实现(递归法) 2.1 代码实现递归法归并排序 3、归并排序的实现(非递归法) 3.1 修正边界问题 3.2 代码实现非递归法归并排序 结语: 前言: 归并排序是一种把数…

万界星空科技灯具行业MES介绍

中国是LED照明产品最大的生产制造国,如今,我国初步形成了包括LED外延片的生产、LED芯片的制备、LED芯片的封装以及LED产品应用在内的较为完超为产业链,随着LED照明市场渗诱率的快速警升,LED下游应用市场将会越来越广阔。这也将推动…

硬件基础:二极管

基本定义 二极管的内部其实就是一个PN结。 把PN结封装起来,两边加上两个电极,就组成了半导体二极管。简称二极管(Diode) 二极管和PN结一样,具有单向导通性: 外观和正负极 常见芯片封装如下: 一般…

MDETR 论文翻译及理解

题目Abstract1. Introduction2. Method2.1. Background2.2. MDETR2.2.1 Architecture2.2.2 Training 3. Experiments3.1. Pre-training Modulated Detection 预训练调制检测3.2. Downstream Tasks3.2.1 Few-shot transfer for long-tailed detection 4. Related work5. Conclus…

飞行员兄弟

飞行员兄弟 思路: 这里一共有16个格子,如果暴力的话也就是2^16次方种排列组合。 这题和之前的开关不一样,这题是会影响到周围很多格子,而开关那题可以利用上方只改变一个的操作来解题,这题我想到的就是暴搜&#xff…

Prefix-Tuning 论文概述

Prefix-Tuning 论文概述 前缀调优:优化生成的连续提示前言摘要论文十问实验数据集模型实验结论摘要任务泛化性能 前缀调优:优化生成的连续提示 前言 大规模预训练语言模型(PLM)在下游自然语言生成任务中广泛采用fine-tuning的方法进行adaptation。但是f…

Redis 数据结构详解

分类 编程技术 Redis 数据类型分为:字符串类型、散列类型、列表类型、集合类型、有序集合类型。 Redis 这么火,它运行有多块?一台普通的笔记本电脑,可以在1秒钟内完成十万次的读写操作。 原子操作:最小的操作单位&a…

基于Java SSM框架实现实现四六级英语报名系统项目【项目源码+论文说明】

基于java的SSM框架实现四六级英语报名系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个高校四六级报名管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作…

HarmonyOS开发(九):数据管理

1、概述 1.1、功能简介 数据管理为开发者提供数据存储、数据管理能力。 它分为两个部分: 数据存储:提供通用数据持久化能力,根据数据特点,分为用户首选项、键值型数据库和关系型数据库。数据管理:提供高效的数据管…

LeedCode刷题---子数组问题

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、最大子数组和 题目链接:最大子数组和 题目描述 给你一个整数数组 nums ,请你找出一个具有最大和的连…