shell脚本自动打包上传

2,719 阅读3分钟

前言

平时我们打包测试的时候总是在一个一个步骤的操作,等待证书选择,打包,发布,很是繁琐

而使用我们的shell脚本打包,那么只需要配置好,那么执行完成之后,完全放心的交给脚本了,自己下班也好,上厕所也好再,也不用担心自己不在旁边,后续步骤无法完成了

demo地址

shell脚本自动打包

首先确保安装了最新Xcode命令行工具,打开命令行执行下面命令

xcode-select --install

如果已经安装过了,会提示
xcode-select: error: command line tools are already installed, 
use "Software Update" to install updates

使用案例的demo脚本自动打包,结构如下所示,主要有箭头指向的几个文件:workspace项目工作文件appstore.plist和hoc文件(分别用于上传appstore和hoc)shell脚本文件

image.png

workspace文件不说,plist文件用于配置打包所需要的信息,如下所示,为hoc的plist文件配置

image.png

image.png

其中的信息相信很容易看懂,其中 method 设置类型 分别为 ad-hocapp-store

包名、描述文件名称根据自己需要来

teamID这个在证书中可以看很容易看到

image.png

shell 脚本介绍

#使用方法
## 处理 build包信息
if [ ! -d ./IPADir ];
    then
        mkdir -p IPADir;
fi
# 删除build包
if [[ -d build ]]; then
rm -rf build -r
fi


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

#工程名 将 AutoArchiveDemo 替换成自己的工程名
project_name=AutoArchiveDemo

#scheme名 将 AutoArchiveDemo 替换成自己的sheme名
#scheme_name=AutoArchiveDemo
#如果scheme名字和项目名字一样,则可以使用下面的通用
scheme_name=$project_name

#打包模式 Debug/Release
development_mode=Release

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

#plist文件所在路径(给了一个默认的,后面根据hoc和appstore会更新)
exportOptionsPlistPath=${project_path}/exportAppstore.plist

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

echo "请输入你想法发布的方式 ? [ 1:ad-hoc 2:app-store ] "

##
read number
    while([[ $number != 1 ]] && [[ $number != 2 ]])
    do
        echo "只能输入 1 or 2"
        echo "请输入你想法发布的方式 ? [ 1:ad-hoc 2:app-store ] "
        read number
    done

if [ $number == 2 ];
    then
    development_mode=Release
    exportOptionsPlistPath=${project_path}/exportAppstore.plist
## 证书名字

    else
    development_mode=Release
    exportOptionsPlistPath=${project_path}/exportHoc.plist
    
fi


echo "请输入你要发布的平台 ? [ 1:蒲公英 2:fir] "
##
read platform
    while([[ $platform != 1 ]] && [[ $platform != 2 ]])
    do
        echo "只能输入 1 or 2"
        echo "请输入你要发布的平台 ? [ 1:蒲公英 2:fir] "
        read platform
    done



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 \
-configuration ${development_mode} \
-exportPath ${exportIpaPath} \
-exportOptionsPlist ${exportOptionsPlistPath} \
-quiet || exit


# 删除build包
if [[ -d build ]]; then
rm -rf build -r
fi


if [ -e $exportIpaPath/$scheme_name.ipa ];
    then
    echo '///----------'
    echo '/// ipa包已导出'
    echo '///----------'
    open $exportIpaPath
    else
    echo '///-------------'
    echo '/// ipa包导出失败 '
    echo '///-------------'
fi
echo '///------------'
echo '/// 打包ipa完成  '
echo '///-----------='
echo ''

echo '///-------------'
echo '/// 开始发布ipa包 '
echo '///-------------'

if [ $number == 2 ];
    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"

# appstore 验证你的账号 accout + password
    "$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u xxxaccount@qq.comxxx [-p xxxpassword123xxx]
# 双冲验证 : account + specialPassword
    "$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u  xxxaccount@qq.comxxx -p xxxasdf-asdf-sdf-adfxxx
else

    if [ $platform == 2 ];
        then
        #上传到Fir
        # 将XXX替换成自己的Fir平台的token
        fir login -T xxxtokenxxx
        fir publish $exportIpaPath/$scheme_name.ipa
    else
        echo "开始上传到蒲公英"
        #上传到蒲公英
        #蒲公英aipKey
        MY_PGY_API_K=xxx881298343123123789237443123xxx
        #蒲公英uKey
        MY_PGY_UK=xxx2a4753c46ae8392123123478bda85e86ebxxx

        curl -F "file=@${exportIpaPath}/${scheme_name}.ipa" -F "uKey=${MY_PGY_UK}" -F "_api_key=${MY_PGY_API_K}" https://qiniu-storage.pgyer.com/apiv1/app/upload
    fi
fi
echo "\n\n"
echo "已运行完毕>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
exit 0


上面脚本提到的,账号密码 基本上都带了 xxx将其换成自己的信息即可,如下所示

如下所示,是普通的 key 获取的地方, fire都在个人信息里面找,换上即可

image.png

然后,将自己的 工程的 bundleid、证书、描述文件之类的配置好了,接下来便可执行 shell.sh 脚本文件了

如下所示,运行shell.sh打包上传蒲公英成功

image.png

image.png

最后

shell脚本自动打包,相信能给开发人员迭代测试版本的过程,减少不少麻烦

另外正式版本建议 xcode 手动打包哈,毕竟正式版本,手动提交校验,避免一些不必要的审核等问题