为了账号安全,请及时绑定邮箱和手机立即绑定

iOS 自动化打包生成二维码提交测试或上线

标签:
iOS

首先了解到可以使用Shell脚本来实现自动化。

脚本语言是像剧本一样教计算机办某件事的语言。

所以我们得把想让机器做的事写在脚本上,

Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。

学习Shell点这里 点击打开链接 

其次,确定让机器做什么,下面来进行分析脚本文件里的内容:

  1. #首先创建ipa生成后的文件夹  

  2. creatIPAFile() {  

  3.     if [ ! -d ./IPADir ];  # -d 检测文件是否是目录,如果是,则返回true  

  4.     then  

  5.         mkdir -p IPADir;  # mkdir -p 命令作用:创建不存在的目录  

  6.     fi  

  7. }  

  8.   

  9.   

  10. #defin 定义变量,配置各种参数  

  11. setUpData() {  

  12.   

  13.     fir_Token="1234534634"  #fir.im Token  

  14.   

  15.     project_path=$(cd `dirname $0`; pwd) #工程绝对路径   接收参数  

  16.   

  17.     project_name="TDService" #工程名  

  18.   

  19.     scheme_name=$project_name #scheme名  

  20.   

  21.     development_mode=Debug #打包模式 Debug/Release  

  22.   

  23.     build_path=${project_path}/build #build文件夹路径  

  24.   

  25.     exportOptionsPlistPath=${project_path}/exportTest.plist #plist文件所在路径  

  26.   

  27.     exportIpaPath=${project_path}/IPADir/${development_mode} #导出.ipa文件所在路径  

  28.   

  29. }  

  30.   

  31. #交互处理  

  32. handleData() {  

  33.   

  34.     echo "请输入你想导出版本的代号 ? [ 1:app-store 2:dev] "  

  35.     read number  # 传入参数,选择 1 或 2  

  36.     while([[ $number != 1 ]] && [[ $number != 2 ]]) # [[ ]]逻辑运算  

  37.     do  

  38.     echo "请填写1或2"  

  39.     echo "请输入你想导出版本的代号 ? [ 1:app-store 2:dev] "  

  40.     read number  

  41.     done  

  42.   

  43.     if [ $number == 1 ];then  

  44.     development_mode=Release  

  45.     exportOptionsPlistPath=${project_path}/exportAppstore.plist  

  46.     else  

  47.     development_mode=Debug  

  48.     exportOptionsPlistPath=${project_path}/exportTest.plist  

  49.     fi  

  50.   

  51. }  

  52.   

  53. #xcodebuild命令 打包  

  54. buildtarget() {  

  55. echo '///-----------'  

  56. echo '/// 正在清理工程'  

  57. echo '///-----------'  

  58. xcodebuild \  

  59. clean -configuration ${development_mode} -quiet  || exit  

  60.   

  61.   

  62. echo '///--------'  

  63. echo '/// 清理完成'  

  64. echo '///--------'  

  65. echo ''  

  66.   

  67. echo '///-----------'  

  68. echo '/// 正在编译工程:'${development_mode}  

  69. echo '///-----------'  

  70. xcodebuild \  

  71. archive -workspace ${project_path}/${project_name}.xcworkspace \  

  72. -scheme ${scheme_name} \  

  73. -configuration ${development_mode} \  

  74. -archivePath ${build_path}/${project_name}.xcarchive  -quiet  || exit  

  75.   

  76. echo '///--------'  

  77. echo '/// 编译完成'  

  78. echo '///--------'  

  79. echo ''  

  80.   

  81. echo '///----------'  

  82. echo '/// 开始ipa打包'  

  83. echo '///----------'  

  84.   

  85.   

  86. xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \  #Xcode 8.3之后加上 -allowProvisioningUpdates 允许自动更新描述文件  

  87.   

  88. -configuration ${development_mode} \  

  89. -exportPath ${exportIpaPath} \  

  90. -exportOptionsPlist ${exportOptionsPlistPath} \  

  91. -quiet || exit  

  92.   

  93. if [ -e $exportIpaPath/$scheme_name.ipa ]; then  

  94. echo '///----------'  

  95. echo '/// ipa包已导出'  

  96. echo '///----------'  

  97. open $exportIpaPath  # 打包后打开ipa所在文件夹  

  98. else  

  99. echo '///-------------'  

  100. echo '/// ipa包导出失败 '  

  101. echo '///-------------'  

  102. fi  

  103. echo '///------------'  

  104. echo '/// 打包ipa完成  '  

  105. echo '///-----------='  

  106. echo ''  

  107.   

  108. echo '///-------------'  

  109. echo '/// 开始发布ipa包 '  

  110. echo '///-------------'  

  111.   

  112. }  

  113.   

  114. #上传处理  

  115. uploadSetting() {  

  116. if [ $number == 1 ];then  

  117. #验证并上传到App Store 将-u 后面的XXX替换成自己的AppleID的账号,-p后面的XXX替换成自己的密码  

  118. altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"  

  119. "$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u XXX -p XXX -t ios --output-format xml  

  120. "$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u  XXX -p XXX -t ios --output-format xml  

  121. else  

  122.   

  123. #上传到Fir 将XXX替换成自己的Fir平台的token  

  124. fir login -T $fir_Token  

  125. fir publish $exportIpaPath/$scheme_name.ipa  

  126.   

  127. fi  

  128. exit 0  

  129. }  

  130.   

  131.   

  132. #以上是函数,下面是函数调用 按顺序调用  

  133. #创建ipa生成后的文件夹  

  134. creatIPAFile  

  135.   

  136. #defin 定义变量,配置各种参数  

  137. setUpData  

  138.   

  139. #交互处理  

  140. handleData  

  141.   

  142. #xcodebuild命令 打包  

  143. buildtarget  

  144.   

  145. #上传处理  

  146. uploadSetting  


其中用到了xcodebuild命令,用起来也很方便,参看点击打开链接

终端输入命令:touch shell.sh 

创建一个脚本文件写入上面的代码,拉入项目目录里。

然后创建两个plist文件,用来配合脚本文件的参数配置:






创建好之后也拖入项目目录里。

最后,在终端配置第三方平台的上传,以fir.im为例,在官网上注册并拿到Token:

终端输入命令:gem install fir-cil

如果出现失败,请参看我的上一篇文章。

至此相关配置已经结束,开始运行:


接下来交给机器了,执行成功了下面会显示。

原文出处

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消