查看: 166|回复: 0

[IOS开发教程] iOS 自动化打包生成二维码提交测试或上线

发表于 2018-5-8 08:00:06

首先了解到可以使用Shell脚本来实现自动化。

脚本语言是像剧本一样教计算机办某件事的语言。

所以我们得把想让机器做的事写在脚本上,

Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。

学习Shell点这里 点击打开链接

其次,确定让机器做什么,下面来进行分析脚本文件里的内容:

#首先创建ipa生成后的文件夹

creatIPAFile() {

if [ ! -d ./IPADir ]; # -d 检测文件是否是目录,如果是,则返回true

then

mkdir -p IPADir; # mkdir -p 命令作用:创建不存在的目录

fi

}

#defin 定义变量,配置各种参数

setUpData() {

fir_Token="1234534634" #fir.im Token

project_path=$(cd `dirname $0`; pwd) #工程绝对路径 接收参数

project_name="TDService" #工程名

scheme_name=$project_name #scheme名

development_mode=Debug #打包模式 Debug/Release

build_path=${project_path}/build #build文件夹路径

exportOptionsPlistPath=${project_path}/exportTest.plist #plist文件所在路径

exportIpaPath=${project_path}/IPADir/${development_mode} #导出.ipa文件所在路径

}

#交互处理

handleData() {

echo "请输入你想导出版本的代号 ? [ 1:app-store 2:dev] "

read number # 传入参数,选择 1 或 2

while([[ $number != 1 ]] && [[ $number != 2 ]]) # [[ ]]逻辑运算

do

echo "请填写1或2"

echo "请输入你想导出版本的代号 ? [ 1:app-store 2:dev] "

read number

done

if [ $number == 1 ];then

development_mode=Release

exportOptionsPlistPath=${project_path}/exportAppstore.plist

else

development_mode=Debug

exportOptionsPlistPath=${project_path}/exportTest.plist

fi

}

#xcodebuild命令 打包

buildtarget() {

echo '//-----------'

echo '// 正在清理工程'

echo '//-----------'

xcodebuild \

clean -configuration ${development_mode} -quiet || exit

echo '//--------'

echo '// 清理完成'

echo '//--------'

echo ''

echo '//-----------'

echo '// 正在编译工程:'${development_mode}

echo '//-----------'

xcodebuild \

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

-scheme ${scheme_name} \

-configuration ${development_mode} \

-archivePath ${build_path}/${project_name}.xcarchive -quiet || exit

echo '//--------'

echo '// 编译完成'

echo '//--------'

echo ''

echo '//----------'

echo '// 开始ipa打包'

echo '//----------'

xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \ #Xcode 8.3之后加上 -allowProvisioningUpdates 允许自动更新描述文件

-configuration ${development_mode} \

-exportPath ${exportIpaPath} \

-exportOptionsPlist ${exportOptionsPlistPath} \

-quiet || exit

if [ -e $exportIpaPath/$scheme_name.ipa ]; then

echo '//----------'

echo '// ipa包已导出'

echo '//----------'

open $exportIpaPath # 打包后打开ipa所在文件夹

else

echo '//-------------'

echo '// ipa包导出失败 '

echo '//-------------'

fi

echo '//------------'

echo '// 打包ipa完成 '

echo '//-----------='

echo ''

echo '//-------------'

echo '// 开始发布ipa包 '

echo '//-------------'

}

#上传处理

uploadSetting() {

if [ $number == 1 ];then

#验证并上传到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

else

#上传到Fir 将XXX替换成自己的Fir平台的token

fir login -T $fir_Token

fir publish $exportIpaPath/$scheme_name.ipa

fi

exit 0

}

#以上是函数,下面是函数调用 按顺序调用

#创建ipa生成后的文件夹

creatIPAFile

#defin 定义变量,配置各种参数

setUpData

#交互处理

handleData

#xcodebuild命令 打包

buildtarget

#上传处理

uploadSetting


其中用到了xcodebuild命令,用起来也很方便,参看点击打开链接

终端输入命令:touch shell.sh

创建一个脚本文件写入上面的代码,拉入项目目录里。

然后创建两个plist文件,用来配合脚本文件的参数配置:






创建好之后也拖入项目目录里。

最后,在终端配置第三方平台的上传,以fir.im为例,在官网上注册并拿到Token:

终端输入命令:gem install fir-cil

如果出现失败,请参看我的上一篇文章。

至此相关配置已经结束,开始运行:


接下来交给机器了,执行成功了下面会显示。

原文出处



回复

使用道具 举报