前言
新年开工,没什么开发任务,然后我们产品老是让我给他装新版本,或者装本地的APP,或者是装线上的APP,手里没事还好,直接就装了,
但是遇到忙的时候,有时候就忘了,影响别人测试,而且多次还会把你喊烦.所以有了这次尝试:iOS项目集成及自动打包上传.
通常打包采用xcodebuild和xcrun两个命令,xcodebuild负责编译,xcrun负责将app打成ipa。
第一回合 Jenkins
当然首先就是百度自动打包,发现了jenkins这个经常出现的词汇,看了几篇blog,感觉很厉害的样子,老牌软件.就尝试跟着各个blog开工,正如预期设想地一样,事情是不可能一帆风顺的,出现了许多问题.当然遇到问题,就解决问题.
问题1:Jenkins的运行问题.
安装jenkins可以在jenkins官网下载安装,但是安装之后再运行会发现提示没有java的环境.这个时候需要根据提示去下载对应的java环境.
然后在终端中运行jenkins,然后Safari会出现一个网址,这就是jenkins的工作界面.然后跟着别人的教程,下载插件,由于iOS的特殊性,需要特殊性,需要上传证书和login.keychain然后第二个问题随之出现了.
问题2:iOS的证书路径问题.
尽管你在管理证书的插件里面上传了login.keychain和pp文件,你在构建的时候还是会提示你找不到证书,这个为什么呢.在查阅了越多网页和我自己的理解之后,我发现上传这2个文件是不够的,还需要把这2个文件拷贝到jenkins文件中,当然是对应的文件夹,对于pp文件,还需要填写路径.
踏着第二个问题的尸体,我们终于把环境搞好了,开始配置App的配置.其实,这个配置分为几部
- jenkins对于这个项目的缓存策略
- 源码.可以通过SVN和GIT来获取你项目的代码
- 构建触发器,看名字就知道是怎么用,配置什么时间,什么频率去构建项目
- 构建环境,就是之前我们弄好的pp文件和login.keychain.勾选keychain and Provisioning Profiles 插件就行了
- 然后就是构建了,到这就有分歧了,有些blog是选择xcode进行构建,但是有些blog表示新xcode是没用这xcode构建,然后选择脚本构建
- 其实之前5步已经完成了.但是我们有自动上传的需求,所以需要在构建完成自动上传到蒲公英或者fir.mi上,由于蒲公英没有jenkins插件,我选择了fir.
当我完成这几步之后,美滋滋地准备查收1天的工作成果时,构成失败不出意外地出现了.
问题3:一样的证书问题
尽管你把pp文件位置放对了地方,但是由于xcode的原因,项目证书是自动管理的,所以需要在pp文件夹去手动选择,但是很遗憾,我选错了,但是我查证了资料,也问了群里的老司机,都纷纷表示,这个pp文件似乎是没法弄得,除非使用手动证书管理,但是由于项目的特殊原理,jenkins这条路,放弃.
第二回合 Fastlane
在捣鼓了1天多的jenkins之路断了的时候,我内心几乎是崩溃的,但是哪里跌倒,哪里爬起.然后我找了我们产品又问了问需求,整理了一下,发现,现在不是很需要持续集成.所以,我就放弃了CI,直接走上了自动打包并上传的道路上.
然后又是漫长的查找资料之旅.发现了shenzhen这个afnetworking大神的小工具.简单,完美符合我的需求.顺便地在shenzhen的github中看到了Fastlane.进到Fastlane官网,哇,这个不是前几天被谷歌收购的公司么,原来是这个啊.肯定是很厉害的.看了看官网,是ruby集合.他的功能有以下几个
- 在每次提交时执行测试(这包括单元测试和集成测试)
- 只创建新的屏幕截图将其发送给客户
- 构建并分发Beta版本
- 构建并分发至应用商店(这包括更新配置文件,创建新的屏幕截图,上传应用至应用商店并提交应用)
确实比shenzhen要强大许多,但是臣妾不需要啊,但是本着这个google收购的高大上公司,我按照教程也走了一遍,感觉很简单,能正常打包.但是在集成蒲公英的上传插件时,出现了问题了,表示没有cocoapods.百度了一下,并没有找到解决方案.由于新项目马上开始,也没有时间折腾了,也就放弃了Fastlane,使用shenzhen了.
最终回 shenzhen
刚刚看到这个词的时候,我以为是巧合,并不是那个深圳,结果我错了,还真是那个深圳,这个大神还写了一系列的城市程序.
试了3个方法之后,我发现shenzhen是最简单,当然这也是我选择他的原因.
终端安装,ipa打包,ipa上传 只需要2个步骤搞定.但是有一个小瑕疵,就是米有进度显示,打包比较耗时的,但是终端长期不动,定在那里真的很吓人啊.好在顺利完成.最后再在蒲公英加入产品经理的账号,就能在每次上传后通知他了.
为了更加省事,我写了一个sh去执行这几句代码,通过写这个sh,我感受到了脚本的方便,也更加对Python感兴趣了!下面就是我写的sh
使用方法就是创建一个后缀的.sh文件,然后拖到终端执行就ok了.
#! /bin/bash
echo "准备开始打ipa包...................."
echo "第一步,进入项目工程文件: /Users/liaoxueyuan/Desktop/GIT/工作"
cd /Users/liaoxueyuan/Desktop/GIT/工作
echo "第二步,执行打包指令"
ipa build -w "/Users/liaoxueyuan/Desktop/GIT/工作/UNIVERTWO.xcworkspace" -s "UNIVERTWO" -c "Ad Hoc" --clean
echo "制作ipa包完成......................."
echo "第三步,分发至蒲公英"
ipa distribute:pgyer -u 25256d29db8e270f8460440dsfasd -a 78f395b48f3fasdfas
echo "分发完成......................."
如果你需要使用的话,需要把-u 后面的代码和 -a后面的号码更换成你自己的号码.,当然还有文件路径也需要修改.
后话
虽然这篇2017的第一篇blog看着没什么用,但是实际上记录了这方面的一个过程,不知道其他人是怎么看待打包这个过程的,我觉得是真的浪费时间啊,而且有时候确实会忘记啊.每当别人拿着机器过来的时候,我都觉得我自己想一个给别人打疫苗的医生,一人一针.但是之前因为懒没有去搞,但是为了更懒,这次是先完成这个简版的,之后再去请教别人的打包上传方案吧.