iOS一键搞定自动打包并发布到AppStore和Fir
原文发布在个人简书,更多内容欢迎关注笔者简书 互相交流。
日常编译打包工作主要是以下两个目的:
- 提交测试版本ipa给测试人员
配置好测试描述文件,然后Product -> Archive
编译打包,选择Organizer
,导出ad hoc 的 ipa
包。再上传到Fir等第三方平台上,然后通知测试同事进行测试。整个流程下来需要人工监守操作比较耗费时间。 - 提交ipa包到App Store已供审核
配置好正式的描述文件,然后同样的方式打包导出app store 的 ipa
包。通过Application Loader 等方式
提交到App store等待苹果处理二进制包,处理完后选择构建版本,最后提交等待苹果审核。
无论打测试包提供测试人员测试还是打正式包上传到App strore,整个过程都是重复耗费人工的操作,需要人工等待,然后各种点击选择…我们可以通过编写脚本语言来实现整个过程。
配置自动打包发布的流程
通过下面几步的设置好之后,以后再进行打包发布到第三方平台或者App Store 只需要一步就能搞定了(一个回车搞定)
笔者通过shell脚本
实现从archive->生成ipa->上传到第三方平台(Fir.im 、蒲公英)或 App store
。通过下面几步即可实现自动打包上传功能。
- 下载Shell脚本
- 将archiveScript中的几文件拖入工程的根目录
- 根据自己需求选择好描述文件
- 根据自己的项目修改一下shell.sh (修改哪里下面会指出)
- cd到工程根目录,通过./shell.sh 执行脚本即可
下面通过实例详细演示整个过程
第一种:打包上传到第三方平台Fir (上传蒲公英原理一样)
第二种:打包上传到App store
将通过这几步来讲解整个过程
- 准备工作
- 准备工作做完后,正式开启自动化之路
- 自动化脚本执行过程中可能遇到的错误
准备工作
因为要上传到Fir平台,需要先安装fir-cli
如果没有安装过rvm,需要安装rvm,在终端输入
rvm -v
命令查看,如果打印出rvm:command not found
说明没有安装过rvm,如果能打印出rvm版本等信息说明安装过。如果没有安装过rvm可以通过下面的命安装,如果已经安装过可以忽略。- 在终端输入
curl -L get.rvm.io | bash -s stable
,然后稍等一会rvm就安装好了 - 在终端输入
source ~/.bashrc
- 在终端输入
source ~/.bash_profile
- 再输入
rvm -v
查看安装成功
- 在终端输入
准备工作做完后,正式开启自动化之路
一、将archiveScript中的3个文件拖入工程的根目录
二、根据自己需求选择好描述文件
三、修改一下shell.sh 文件
Product ->Scheme -> Edit Scheme 查看自己的scheme_name
获取Fir平台的token
三、 cd到工程根目录,./shell.sh 回车就会执行脚本
#### 四、 根据自己的需求选择即可
如果开始选择的1:app-store 会发布到app store
如果开始选择的2:ad-hoc 发布到fir平台
如果遇到下面的错误
解决方法:在终端 输入rvm system
后重新执行sehll脚本就可以了
如果前面已经安装过fir-cli,但是在脚本执行过程中任然报fir:command not found
的错误
解决办法: 在终端输入rvm get head
执行完毕后再次执行脚本就ok了
到这里就已经实现了通过脚本打包并发布到第三方平台Fir 和 Appstore的整个流程。接下来对shell中的脚本和一些自动化原理进行简单说明
shell中的脚本和一些自动化原理
正常情况下手动在Xcode中执行Product -> Archive
, 在Xcode底层是通过xcodebuild相关的命令编译、打包生成ipa包的.(xcodebuild主要是用来编译,打包成Archive和导出ipa包)
进入终端可以通过下面的命令查看一下xcodebuild的version
接下来,看一下Shell脚本
上面内容注释大家一看应该就明白
清理构建目录
xcodebuild \
clean -configuration ${development_mode}
编译之前先clean下,就如同在Xcode进行Product -> Clean
。
编译打包成Archive
xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${build_path}/${project_name}.xcarchive
编译工程,编译并生成.xcarchive文件,放在build_path下,名字是project_name.xcarchive,就如在Xcode进行Product -> Archive
这一步最为耗时.
将Archive导出ipa
xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \
-configuration ${development_mode} \
-exportPath ${exportIpaPath} \
-exportOptionsPlist ${exportOptionsPlistPath}
将生成的.xcarchive文件导出.ipa包到指定的exportIpaPath路径下。
说明:
用\来进行换行分隔,一条shell命令过长时可以进行分割显示.
$变量名是引用变量,拿来使用
|| exit 指明如果这一条命令执行失败,则退出当前shell.
通过Fir-cli命令上传到Fir平台
# 将XXX替换成自己的Fir平台的token
fir login -T XXX
fir publish $exportIpaPath/$scheme_name.ipa
通过altool工具提交ipa包到app store
这个工具实际上是Application Loader
,打开Xcode-左上角Xcode-Open Developer Tool-Application Loader
可看到
altool的路径是:
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool
#验证并上传到App Store
# 将-u 后面的XXX替换成自己的AppleID的账号,-p后面的XXX替换成自己的密码
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
"$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u XXX -p XXX -t ios --output-format xml
"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u XXX -p XXX -t ios --output-format xml
整个过程和原理还算比较简单,shell脚本还是满有意思的,作为苹果开发人员,有必要学习一下,本人也刚学习shell 不久,欢迎大家交流。
参考文档:
http://www.jianshu.com/p/bd4c22952e01
https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html
iOS一键搞定自动打包并发布到AppStore和Fir相关推荐
- 高考估分查分选志愿一键搞定_支付宝又操办了件人生大事
摘要: 可能比高考更考验心力的填报志愿,支付宝要帮你一键搞定. 支付宝今天正式上线集估分.查分.选志愿等众多服务于一体的高考后综合服务平台,陪伴高考学生的青春大考.考生在估分.查分后,还可以看到系统智 ...
- vbn中使用的3种流程控制结构是_细菌进化树构建:从模式种序列下载到构建系统发育树一键搞定...
细菌进化树 • 构 建 细菌进化树构建:从模式种序列下载到构建系统发育树一键搞定 对于细菌新种或者新属的发现,总是那么让人期待,但是当我们批量获得16S序列后,逐一对这些尚不知分类地位的序列进行比对并 ...
- 讯飞智能语音鼠标G50:AI语音、转写翻译、记录截图一键搞定!
随着互联网的发展,智能鼠标已经成为我们生活和工作中不可或缺的组成部分.然而,鼠标滚轮异响.按键失灵.驱动难用.手感不合适等一系列问题仍时有发生,所以选择一款智能鼠标尤为重要,它不仅可以提高我们的工作效 ...
- 空间里相片批量导入u盘_多台电脑同步文件还在用 U 盘牵线?GoodSync 帮你一键搞定...
最近有小伙伴提出了一个问题: 因为数码荔枝对这个问题颇有同感,所以立即提供了圆满解决的方案.在分享方法之前,先消除一些小伙伴可能对此产生的疑问. 为什么要在不同设备中备份相同文件? 我除了自己平时用的 ...
- java调用大漠插件一键搞定!!!!!!!!!!
本人java爱好者,最近想要通过java调用大漠插件,实现一些脚本.但是发现java调用大漠插件的文章在网上太少啦,自己经过长达一周的实践和测试,总算是可以通过java调用大漠插件了,也算是给小伙们避 ...
- 京东店铺如何装修,智能店长一键搞定
作为京东商家避免不了店铺装修和做促销活动的问题.当商家想做关联版式,想要批量打水印怎么办?现在做图,请美工成本高,如何节约美工成本?不用担心,可用智能店长,一键搞定这些难题. 智能店长-为大家提供商品 ...
- ChatGPT与VBA:Excel操作一键搞定的全能助手
摘要 Excel是一款广泛应用于数据处理和分析的工具,而VBA(Visual Basic for Applications)是一种用于编程自动化Excel操作的语言.然而,对于非专业的Excel用户来 ...
- 【可乐荐书】Python自动化办公应用大全(ChatGPT版):从零开始教编程小白一键搞定烦琐工作
本栏目将推荐一些经典的.有趣的.有启发性的书籍,这些书籍涵盖了各个领域,包括文学.历史.哲学.科学.技术等等.相信这些书籍不仅可以让你获得知识,还可以让你感受到阅读的乐趣和魅力. 今天给大家推荐的书籍 ...
- 年轻就AI秀:美颜美齿,一键搞定
随着气温的逐渐升高,人们对于手机的消费需求也在不断高涨.而如果要说起近期智能手机市场最炙手可热的卖点,那么无疑就是全面屏和AI人工智能了. 在发布AI全面屏旗舰机型X21之后,为了满足年轻人市场的旺盛 ...
最新文章
- WordCount案例
- [HOW TO]-centos环境搭建opengrok笔记
- 把一个一维数组转换为in ()
- 数字后端——布图规划
- .NET Core 3.0 中的新变化
- 一步步编写操作系统 78 intel汇编与ATT汇编语法区别
- dojo 加载自定义module的路径问题
- 【线性代数公开课MIT Linear Algebra】 第十八课 行列式的性质
- python输出时间格式_python中日期和时间格式化输出的方法小结_python
- vb mysql 插入记录_vb实现数据库的连接,修改,删除,插入(ADO.Net)
- Cookie介绍与操作
- 实现成长之路——SpringBean三:实例化Bean的姿势都有哪些?
- 【转】spring MVC入门示例(hello world demo)
- 【跃迁之路】【648天】程序员高效学习方法论探索系列(实验阶段405-2018.11.21)...
- 音频基础之Smaart7声卡测试
- 力扣第39题dfsdfs(respathtarget-candidates[1]i)#调用递归,组成目标的 i 可以重复用,不用i+1,def dfsdfs(resres,pathtarget,ind
- 回归远程 - 云原生IDE是IaC从表象触达本质的必然选择 | SmartIDE
- 学Git?这一篇就够了
- Microsoft Teams安排 Teams 实时事件
- LLRB——红黑树的现代实现
热门文章
- CTFshow_命令执行
- diag()函数功能
- 面试题2021.7.5-mysql
- python字典添加主键_Python--MySql(主键的创建方式、存储引擎、存储过程、索引、pymsql)...
- 小程序-demo:知乎日报
- 软件加密系统Themida应用程序保护指南(六):XBundler
- c语言有关break的应用,关于c语言中的break用法
- 详解24个经典股票技术指标.doc
- Ninja is required to load C++ extensions in Pycharm
- 谈谈BPM工作流引擎