看文章的标题就很霸气,这个标题也是花了好几秒钟才想出来。
这就是全自动的打包到上传的脚本看完之后会发现其实一点都不神气、反而弱爆了,毕竟很久之前很多大神都在使用这么牛气的方式了。但是对于我来说,还是有点神气的。毕竟之前打包20分钟、并且还忙得不亦乐乎。现在不一样了,一个脚本运行起来,只需两秒钟,并且打包与上传全搞定,那就是一站式服务。用来学习,也是很不错的。[偷笑5分钟、犯困一小时]
项目代码在这里,顺便点个赞,同时给个star。
0、来点废话提提神
这是花了半个下午的成果,初次使用难免有很多看似高大上的东西,实际上是很 low的。
今天在网上看了不少大神的实现方式,以及脚本编写,都是行不通的,口误口误,不是行不通而是已经过时了而已。
比如他们用到的 PackageApplication,现在无法使用了,至少我没有成功过。
其次就是那个 -exportFormat 参数,早已经过期了。然后一直没有找到替代品,直接报这样的错:xcodebuild: error: invalid option '-exportFormat'
为了找到正确的,确实是费了不小的劲。然后通过命令 xcodebuild -h 无意间看到了这个 -exportOptionsPlist <plistpath>,联想到每次打包的时候在那个包文件夹中有类似的文件,所以报着试一试的心理。没想到还成功了。
建议看一下这个:https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW936
一、具体流程
- 准备
- 打包
- 上传
1. 准备
- 创建一个项目,比如HGPGY。
- 生成一个 ExportOptions.plist 文件,这个是打包的配置文件。如果不想手动创建,可以先第一次打一个包,然后在导出 ipa 的时候自动生成,以后使用这个文件即可。并将这个文件放到与项目目录同一级(非必须,可以自己规定)。 特别提醒:这个文件很重要,里面都是开发者账号与项目关联相关的配置。
ExportOptions.plist文件
2. 打包
打包步骤为:构建 .xcarchive 再导出 .ipa 。
2.1 构建 .xcarchive 文件
在终端输入:
xcodebuild archive -project HGPGY.xcodeproj -scheme HGPGY -configuration Release -archivePath HGPGY.xcarchive
2.2 导出 .ipa 包
在终端输入:
xcodebuild -exportArchive -archivePath HGPGY.xcarchive -exportPath HGPGY.ipa -exportOptionsPlist ExportOptions.plist
3. 上传(以蒲公英为例)
这里不做介绍,具体详情可以查阅蒲公英官方文档:https://www.pgyer.com/doc/view/upload_one_command
二、脚本实现
具体的脚本在这里,顺便点个赞,同时给个star。
直接在终端输入:
sh UploadPackage2PGY.sh <项目名称> <更新日志>
比如:
sh UploadPackage2PGY.sh HGPGY 在使用高大上的脚本做打包上传.
打包之前的样子:
打完包是这样子的:
脚本写得很low,但是还算可以了,至少是正确的。更多高质量的脚本代码,敬请期待!
如果还感兴趣,可以再欣赏一下这个代码,这里面暴露了很多OC中的秘密(与本打包话题无关)。
补充于 2018 年 3 月 29 日 17:14 ,若操作使用我的蒲公英账号的 Ukey 与apiKey 操作成功,那么您的项目会提交到我的蒲公英账号,可以通过这个二维码扫面安装:
扫描安装你提交的 APP或者点击这里安装。
记得改一下界面,然后看效果。祝您愉快!
参考文章:
网友评论
1. 现在好多项目都是由cocopods管理三方库,与项目一起在一个workspace里面。按照文章提供的脚本是打包了项目工程,却没有打包pod工程,最后导出ipa包肯定失败
2.如果想使用Cross-platform里的Aggregate来依赖工程,运行脚本。我试过如果将以上脚本的S1,S2写死,运行也是可以的。我的疑问是能不能在Aggregate这个target里运行脚本进行传值呢
3.难道不应该是“神奇的iOS打包”
2.可以的吧, 没有试过. 不管是原生的,还是跨平台的, iOS 打包的原理都是一样的.所谓的target就是上面命令的 -scheme 参数.很多的时候总是会出现一个项目中配置不的target的情况.
3. 有点道理.