事先声明:本文章的自动化上传仅限于本地配置都已完成,包括:github地址以及分支正确(用于打tag)、cocopods库配置完成、podspec文件配置完成,后续仅需要配置版本号。上文中实现打包自动化,结合cocopods自动化,可实现完整的发版自动化
代码先上,解释在后面
- #!/bin/sh
- version="\"1.0.2\""
-
- git tag ${version}
-
- git push --tags
-
- sed -i "" "s#^ spec.version = .*# spec.version = ${version}#g" 文件名.podspec
-
-
- pod lib lint 文件名.podspec --allow-warnings
- if [ $? -eq 0 ]; then
- pod spec lint 文件名.podspec --allow-warnings
- if [ $? -eq 0 ]; then
- pod trunk push 文件名.podspec --allow-warnings
- else
- echo "spec failed"
- fi
-
- else
- echo "lib failed"
- fi
-
步骤:
1.新建一个空白文件,修改后缀名为.sh
2.写入上文代码
3.在终端进入.sh脚本文件所在目录。
4.执行如下命令:
sh 脚本文件名.sh
详细解释下代码:
version="\"1.0.2\""
顾名思义,给version一个值,为"1.0.2",注意,\" 的意思是将 " 当做普通字符看,而不是关键字。\其实就是转义字符
git tag ${version}
git push --tags
给github仓库打tag,tag为version的值。要求github仓库地址已经配置
sed -i "" "s#^ spec.version = .*# spec.version = ${version}#g" 文件名.podspec
这里是修改文件的值,-i 是不复制文件,直接修改源文件。 "" 这个空字符串一定要有,不然报错,报错信息如下 extra characters at the end of q command
#^ spec.version = .* 这个意思是在文件中匹配字符串“ spec.version =” 注意,空格也要完全一致才能匹配成功。 .* 的意思是匹配成功的后面的所有内容都将被替换,还需要注意的是,匹配成功的 spec.version = 也会被替换掉
# spec.version = ${version} 这个意思是讲前面的字符串替换成该字符串。包括空格数。
文件名.podspec 被修改的文件,如果.sh脚本文件和podspec文件在同一级目录,可以直接写文件名,如果不是同一级目录,需要写路径。比如podspec在.sh的上一级,这里就是../文件名.podspec
pod lib lint qplayer2-core.podspec --allow-warnings
if [ $? -eq 0 ]; then
pod spec lint qplayer2-core.podspec --allow-warnings
if [ $? -eq 0 ]; then
pod trunk push qplayer2-core.podspec --allow-warnings
else
echo "spec failed"
fi
else
echo "lib failed"
fi
这里就很简单了,如果pod lib 成功了,就执行 pod spec命令,否则就打印 lib 失败。如果lib spec 都成功了,就运行push。
额外需要解释的是:$? 是上一个命令的返回值,-eq 是等于的意思 0代表执行成功,1代表执行失败