神气的 iOS 打包

作者: CoderHG | 来源:发表于2018-03-10 00:51 被阅读2044次

看文章的标题就很霸气,这个标题也是花了好几秒钟才想出来。

这就是全自动的打包到上传的脚本

看完之后会发现其实一点都不神气、反而弱爆了,毕竟很久之前很多大神都在使用这么牛气的方式了。但是对于我来说,还是有点神气的。毕竟之前打包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

或者点击这里安装

记得改一下界面,然后看效果。祝您愉快!

参考文章:

相关文章

  • 神气的 iOS 打包

    看文章的标题就很霸气,这个标题也是花了好几秒钟才想出来。 看完之后会发现其实一点都不神气、反而弱爆了,毕竟很久之前...

  • 神气的 iOS 打包

    这就是全自动的打包到上传的脚本 看完之后会发现其实一点都不神气、反而弱爆了,毕竟很久之前很多大神都在使用这么牛气的...

  • iOS 自动化打包

    iOS 自动化打包 [iOS, 自动化, 打包, Python, fastlane] iOS在项目开发中少不了打包...

  • iOS-自动打包及分发(二)

    iOS-自动打包及分发(一)iOS-自动打包及分发(二)iOS-自动打包及分发(三) 本篇介绍:自动打包及分发xc...

  • ios-面试-脚本打包原理

    脚本打包,自然是为了方便打包,便于ios开发不用手动打包,便于非ios开发能去打包! 打包过程 Xcode打包的过...

  • iOS面试题:脚本打包

    脚本打包,自然是为了方便打包,便于ios开发不用手动打包,便于非ios开发能去打包! 打包过程 Xcode打包的过...

  • Python的iOS自动化打包

    Python的iOS自动化打包 Python的iOS自动化打包

  • iOS效率神器fastlane自动打包

    iOS效率神器fastlane自动打包 iOS效率神器fastlane自动打包

  • iOS打包签名,你真的懂吗?

    iOS打包签名,你真的懂吗?iOS打包签名,你真的懂吗?

  • Xcode自动打包

    [iOS]从零开始写个自动打包IPA脚本 【iOS打ipa包】:使用终端实现自动打包 iOS自动打包并发布脚本

网友评论

  • 一身诗意千寻瀑968:禁止自动签名,无法生成概要文件。要启用自动签名,请将允许更新传递到xcodebuild。 报这个错啥意思啊 貌似iOS9过后不能自动签名了吗
    CoderHG:@转身我还在 你可以首先正常打包,正常打包结束之后,在 ipa 文件中就会自动生成这个plist 文件,然后在自动打包的时候使用,就可以了。类似这张图片:https://upload-images.jianshu.io/upload_images/1198135-8ca655110af769a2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/412
    一身诗意千寻瀑968:@CoderHG 怎么配置啊 配置点什么呢
    CoderHG:@转身我还在 需要配置一个 ExportOptions.plist 文件
  • 秋雨无痕:我也是自己折腾的
    CoderHG:@秋雨无痕 :+1::+1:、要是有新发现,期待分享。
  • 老王技术栈:跑不动shell脚本。无法执行
    CoderHG:其次,需要将 ExportOptions.plist 文件修改成你的。至少改一下 teamID 的值。
    CoderHG:有什么提示么?在终端使用命令:sh UploadPackage2PGY.sh 然后回车。
  • chdo002:应该看文档啊 至少用man 查看一下使用说明
  • JavenWang:用fastlane吧 别再自己折腾了
  • CoderXLL:有三个疑问:
    1. 现在好多项目都是由cocopods管理三方库,与项目一起在一个workspace里面。按照文章提供的脚本是打包了项目工程,却没有打包pod工程,最后导出ipa包肯定失败

    2.如果想使用Cross-platform里的Aggregate来依赖工程,运行脚本。我试过如果将以上脚本的S1,S2写死,运行也是可以的。我的疑问是能不能在Aggregate这个target里运行脚本进行传值呢

    3.难道不应该是“神奇的iOS打包”:sweat_smile:
    CoderHG:1. 打包的第一步: 将参数 -project 换成 -workspace即可, 你可以直接在终端通过这个命令来查看:xcodebuild -h,里面有这么一个个:xcodebuild -workspace <workspacename> -scheme <schemeName> [-destination <destinationspecifier>]... [-configuration <configurationname>] [-arch <architecture>]... [-sdk [<sdkname>|<sdkpath>]] [-showBuildSettings] [<buildsetting>=<value>]... [<buildaction>]...

    2.可以的吧, 没有试过. 不管是原生的,还是跨平台的, iOS 打包的原理都是一样的.所谓的target就是上面命令的 -scheme 参数.很多的时候总是会出现一个项目中配置不的target的情况.

    3. 有点道理.

本文标题:神气的 iOS 打包

本文链接:https://www.haomeiwen.com/subject/rccvfftx.html