首先了解到可以使用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
如果出现失败,请参看我的上一篇文章。
至此相关配置已经结束,开始运行:
接下来交给机器了,执行成功了下面会显示。
共同学习,写下你的评论
评论加载中...
作者其他优质文章