做了一段时间Ionic工程IOS版本的开发,发现最头疼的是IOS编译发布过程。
现实很残酷
一个team共用一台MAC机器,而且机器很慢,打开Xcode有时都用很长时间,我恨不得钻进去帮帮它。
而我们要在MAC上做的编译和发布过程:
下载代码->shell中编译代码->打开xcode进行打包为ipa->上传到蒲公英上进行发布。
(如果你一开始做项目就想到自动化,那恭喜你,为你的生命不知节约了多少时间。)
扯点题外话
一般人都是懒惰的,不愿意去动脑子,遇到问题时才会想着怎么去做,而且通常的解决方法是可以让自己变得更懒惰,哈哈,如果你不是这样的人,那恭喜你,你不是一般人。
正因为人有这样的特性,所以才有了这么多便利的发明,所以是不是懒惰是有必要的,只是你的脑子要够勤快。
突然想起刚开始工作时,有一个师兄我觉得超厉害,那时候电脑超慢,我记得我们是用sourceInsight看代码,尽管慢还是在坚持(属于又懒又不爱动脑子那伙)。
那个师兄就一样了,潜心研究vim,各种特性,天天用vim来看代码,各种跳转,查函数等,手不停地在键盘上跳来跳去,当时觉得好牛啊,在他的熏陶下,我只是学了一点皮毛,几年不用,那点皮毛现在尽然还记得。
但是另一个坐在我旁边的同事就一样了,电脑慢,天天不是骂人就是摔鼠标,有一次尽然把鼠标摔得五马分尸了,那场面鲜血淋淋的,惨不忍睹。而且摔鼠标声音太大导致我那段时间天天做噩梦。
所以,如果现实环境太残酷,不妨动动脑子,看看是否可以通过努力让它改善一些,让自己在这样的环境下依然可以活的不错,也许就是因为环境总是不如人意,人才会进步。
下面是Ionic工程,在MAC上app的自动化编译、打包以及上传到蒲公英的过程。
源码编译ipa
最初建立工程的做法是:
第一步add ios platform:
$ ionic cordova platform add ios
第二步:ionic的源码编译
$ ionic cordova build ios
第三步:xcode证书的配置
打开Xcode,选择好相应的team进行编译。
其中,如果是直接测试手机,那么可以直接直连手机打包并安装。
如果是release版本,要在xcode上各种下一步才能导出ipa。
因为MAC机器实在不给力,所以做上面的动作往往会花一些时间,即使前面两步写成脚本还是不够,因为打开Xcode就很慢,接着做后面几步就很慢。
而且发现第二步和第三步做了一些重复的事情。
自动化编译ipa
首先写一个脚本,可以一次性完成最好。
脚本完成主要是两大事情:
第一:源码编译
$ionic cordova platform remove ios //删除原来的platform
$ionic cordova platform add ios --no-resources
其中no-resources是ionic CLI 最新版需要对闪屏和icon重新生成,如果你的工程的闪屏和icon图是提前做好的,那就需要加上这个参数。
$ionic cordova build ios --debug --device //debug版本
$ionic cordova build ios --release --device --prod //release版本
其中--device表示编译的是设备的版本,默认是simulator的版本;
--release表示发布的版本;
--prod表示需要压缩,当然还做了其他的动作,如console.log去掉。
第二:xcode证书等的配置
证书的配置可以全部放在一个build.json文件,此文件你可以放在工程的任意目录下,只是引用的时候注意路径即可。
引用的方法是在前面的build命令之后,加入--buildConfig ./build.json。
如:ionic cordova build ios --debug --device --buildConfig ./ios/build.json
具体内容如下(截图的,简书上代码直接放进去很乱,如果大家需要类似的参数,麻烦重新敲键盘吧。)
关于这些参数如何去查看,可以通过下面的命令查找,关于build setting有一个链接地址,可以用你想用的参数进行设置。
$man xcodebuild
重点说一下:PRODUCT_BUNDLE_IDENTIFIER,一般不需要。但是由于我们app开发和上传到app store用的证书不一样,bundle id也要不一样,所以需要在编译的时候动态修改bundle id,所以就加了此参数。
关于bundle id多说一点,如果你的android和ios的bundle id不一样,可以在工程的config.xml做如下配置,当然下面的配置是cordova工程的。
android-packageName="com.example.android"
ios-CFBundleIdentifier="com.example.ios"
这样就可以直接运行你的脚本编译出相应的ipa了。
安装ipa到手机
使用ios-deploy进行安装。我常用的命令如下:
ios-deploy -b xxxx.ipa
需要说明的是:ios-deploy需要提前在MAC上进行安装,而且如果你的Xcode 是9以上(具体的版本我忘记了)需要下面的命令安装
sudo npm install -g --unsafe-perm=true --allow-root ios-deploy
上传到蒲公英
如果你的app不需要上传到蒲公英上,这节可以忽略。
脚本可以通过蒲公英的开发者API进行上传,不需要通过蒲公英的UI界面进行上传。
更多参数的设置可参考蒲公英API的说明文档,使用的是API 2.0
https://www.pgyer.com/doc/view/api#paramInfo
执行下面命令之前你需要在蒲公英要注册账号,注册之后可以查看API_key。
curl -F"file=@./myapp.ipa"-F"_api_key=xxxx" https://www.pgyer.com/apiv2/app/upload
如有描述错误,还请及时指出。