iOS DeveloperiOS点点滴滴iOS相关

iOS- 一键自动打包发布到Fir和AppStore

2017-09-25  本文已影响2613人  我阿郑

特别说明:如果项目没有采用Cocoapods管理,没有.xcworkspace,只有xcodeproj;只需要将脚本中这句

xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \ 

这句替换成下面这样就ok了

xcodebuild \
archive -project ${project_path}/${project_name}.xcodeproj \

日常编译打包工作主要是以下两个目的:

无论打测试包提供测试人员测试还是打正式包上传到App strore,整个过程都是重复耗费人工的操作,需要人工等待,然后各种点击选择...我们可以通过编写脚本语言来实现整个过程。

配置自动打包发布的流程

通过下面几步的设置好之后,以后再进行打包发布到第三方平台或者App Store 只需要一步就能搞定了(一个回车搞定)

笔者通过shell脚本实现从archive->生成ipa->上传到第三方平台(Fir.im 、蒲公英)或 App store。通过下面几步即可实现自动打包上传功能。

下面通过实例详细演示整个过程

第一种:打包上传到第三方平台Fir (上传蒲公英原理一样)
第二种:打包上传到App store

将通过这几步来讲解整个过程

准备工作

准备工作做完后,正式开启自动化之路

一、将archiveScript中的3个文件拖入工程的根目录

Snip20170922_61.png

二、根据自己需求选择好描述文件

Snip20170922_53.png

三、修改一下shell.sh 文件

修改1 修改2 自己工程的project_name名字

Product ->Scheme -> Edit Scheme 查看自己的scheme_name

scheme_name

获取Fir平台的token


Snip20170922_50.png

三、 cd到工程根目录,./shell.sh 回车就会执行脚本

执行脚本

四、 根据自己的需求选择即可

Snip20170922_63.png

如果开始选择的1:app-store 会发布到app store

发布app store 成功

如果开始选择的2:ad-hoc 发布到fir平台

Snip20170922_65.png

如果遇到下面的错误

Snip20170922_56.png

解决方法:在终端 输入rvm system后重新执行sehll脚本就可以了

Snip20170922_57.png

如果前面已经安装过fir-cli,但是在脚本执行过程中任然报fir:command not found的错误
解决办法: 在终端输入rvm get head

Snip20170922_66.png

执行完毕后再次执行脚本就ok了
到这里就已经实现了通过脚本打包并发布到第三方平台Fir 和 Appstore的整个流程。接下来对shell中的脚本和一些自动化原理进行简单说明

shell中的脚本和一些自动化原理

正常情况下手动在Xcode中执行Product -> Archive , 在Xcode底层是通过xcodebuild相关的命令编译、打包生成ipa包的.(xcodebuild主要是用来编译,打包成Archive和导出ipa包)

进入终端可以通过下面的命令查看一下xcodebuild的version


Snip20170925_1.png

接下来,看一下Shell脚本

设置变量 选择输入

上面内容注释大家一看应该就明白

clean并archive 导出ipa

清理构建目录

xcodebuild \
clean -configuration ${development_mode}

编译之前先clean下,就如同在Xcode进行Product -> Clean

编译打包成Archive

xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${build_path}/${project_name}.xcarchive

编译工程,编译并生成.xcarchive文件,放在build_path下,名字是project_name.xcarchive,就如在Xcode进行Product -> Archive这一步最为耗时.

将Archive导出ipa

xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \
-configuration ${development_mode} \
-exportPath ${exportIpaPath} \
-exportOptionsPlist ${exportOptionsPlistPath}

将生成的.xcarchive文件导出.ipa包到指定的exportIpaPath路径下。

说明
用\来进行换行分隔,一条shell命令过长时可以进行分割显示.
$变量名是引用变量,拿来使用
|| exit 指明如果这一条命令执行失败,则退出当前shell.

Snip20170925_10.png

通过Fir-cli命令上传到Fir平台

# 将XXX替换成自己的Fir平台的token
fir login -T XXX
fir publish $exportIpaPath/$scheme_name.ipa

通过altool工具提交ipa包到app store
这个工具实际上是Application Loader,打开Xcode-左上角Xcode-Open Developer Tool-Application Loader 可看到
altool的路径是:

/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool
#验证并上传到App Store
# 将-u 后面的XXX替换成自己的AppleID的账号,-p后面的XXX替换成自己的密码
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
"$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u XXX -p XXX -t ios --output-format xml
"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u  XXX -p XXX -t ios --output-format xml
Snip20170923_69.png Snip20170923_70.png

整个过程和原理还算比较简单,shell脚本还是满有意思的,作为苹果开发人员,有必要学习一下,本人也刚学习shell 不久,欢迎大家交流。

参考文档:
http://www.jianshu.com/p/bd4c22952e01
https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html

上一篇下一篇

猜你喜欢

热点阅读