[上传]iOS 自动化打包上传

3,042 阅读3分钟

背景

常常用Xcode打包上传,太慢了,有时候自己有事,还得麻烦同事打包上传。为啥不搞个自动化,一键搞定?

首先要了解有哪些上传的方式。

上传方式

1. 平淡,官方的方式

官方文档中提到了上传工具

这里方法的前提都是已经编译好一个ipa

1.1 Xcode

就是常用的慢🐌的方式,只需要点点点,有时需要漫长等待,最低效率

1.2 altool

命令行上传,iOS应用有两个步骤验证上传Mac应用有三个步骤验证上传公证️

以下是官方格式,实际使用会遇到一些密码验证问题,这位老哥提到了

$ xcrun altool --validate-app -f file -t platform -u username [-p password] [--output-format xml]
$ xcrun altool --upload-app -f file -t platform -u username [-p password] [--output-format xml]

因为AppId都开启了双向验证,所以上面的账号密码方式会报错。

需要创建密钥,利用苹果认可的密钥来上传即可。

下载得到一个AuthKey_xxxxx.p8的文件,这个文件一定要放在./private_keys~/private_keys~/.private_keys~/.appstoreconnect/private_keys,任意一个即可

那么我们使用的格式就变成了下面这样,apiKey就是密钥ID,也是.p8文件的名称。

$ xcrun altool --validate-app -f file/xxx.ipa -t ios --apiKey 8X26VXG86Z --apiIssuer dc17cxxce-xxx-xxx-a110-e1c0ad99xxx
$ xcrun altool --upload-app -f file/xxx.ipa -t ios --apiKey 8X26VXG86Z --apiIssuer dc17cxxce-xxx-xxx-a110-e1c0ad99xxx

1.3 Transporter

估计很多人没用过,网络正常的情况下,几分钟上传完毕,就是快。

2. 有趣,fastlane

上面的几种方法,都是有ipa包的前提下,有没有一条龙,傻瓜式的。当然有,连我都用上了,对就是fastlane

闲话:

入门还是不要百度了,因为你会陷入各种不同的实现,一上来就是各种FastFile的配置,各种插件,一脸黑人问号。所以还是先跟着官方教程走,嚼不烂的才去看别人怎么嚼的。

如果你仅仅只是使用打包、上传,根本不用关心FastFile配置,甚至可以忘了它。因为要先实现你的效果,你才有信心去看的原理和配置。

xxx.xcodeproj同级目录下进入终端,演示的是OC项目

fastlane init

4个选项,选一个

[15:33:31]: What would you like to use fastlane for?
1. 📸  Automate screenshots
2. 👩‍✈️  Automate beta distribution to TestFlight
3. 🚀  Automate App Store distribution
4. 🛠  Manual setup - manually setup your project to automate your tasks
?  

假如选择2,然后让你输入账号、密码,根据提示回车就行。

[15:36:06]: Please enter your Apple ID developer credentials
[15:36:06]: Apple ID Username:

最后会提示你只需要运行fastlane beta,就可以实现上传

fastlane beta

根据打印信息,可以看出会自动完成了几个步骤

  1. Step: default_platform 大概是设置平台(iOS或安卓),还有些默认设置
  2. Step: increment_build_number 递增build
  3. Step: build_app 编译打包
  4. Step: upload_to_testflight 上传

3. 解脱,自动化

目的就是一键上传

先跟着蒲公英教程把本地Jenkins环境搭建好。

3.1 创建一个Item

把描述、git都配置好后,添加脚本,脚本执行的路径一定要在xxx.xcodeproj同级目录下。

3.2 定时触发

如果都不想点,甚至忘了自动化这个事情,那就搞个定时触发器,这位老哥有讲。

我设置的是每晚8点打包上传

3.3 一些错误

上传到app store时会报错, 大概意思是之前有一个未完成的上传,这位老哥提到了,说要删除缓存,其实往上翻也能从日志里面看到。

Cannot proceed with delivery: an existing transporter instance is currently uploading this package

缓存目录,找到删除即可

/Users/apple/Library/Caches/com.apple.amp.itmstransporter/UploadTokens/hudo.local_85VA373D3S_1488443307.itmsp.token

上传速度

其他速度我没有准确记录,但是相比之下Transporter是真的快,1分钟左右

感谢

Xcode 11 使用xcrun altool 密钥上传ipa包

jenkins构建触发器定时任务

解决上传app报Cannot proceed with delivery: an existing transporter instance is currently uploading this package错误