iOS开发 - iOS项目自动打包脚本

自动功能打包展示:

打包演示.png

平时自用打包脚本,支持自动上传蒲公英、App Store

这里具体参考的是

1、详解Shell脚本实现iOS自动化编译打包提交
2、iOS自动化打包脚本(shell)

打包准备工作(1个自动打包脚本文件、1个plist文件)

Github地址:https://github.com/90candy/AutoPackage

使用方法:点击下载脚本相关文件

1、将AutoPackage.sh 脚本和autoplist文件夹拖入项目根目录

2、配置打开编辑AutoPackage.sh中的配置参数(若只打包,则只需配置pro_full_name即可)

3、再将AutoPackage.sh脚本文件拖入终端回车即可执行自动打包脚本

4、执行后按需求选择打包版本(企业版、正式版、测试版、开发版)

5、如果执行脚本时出现如下错误是因为文件权限不足,只需对其授权777即可

-bash: /Users/candy/Desktop/AutoPackage.sh: Permission denied

执行如下授权命令即可(这里的/Users/candy/Desktop/AutoPackage.sh路径参考上面的)

chmod -R 777 /Users/candy/Desktop/AutoPackage.sh

打包脚本核心内容展示

# 开始打包操作
# 开始时间(用于计算打包脚本执行时间)
begin_time=$(date +%s)
# 获取系统时间
date_string=`date +"%Y-%m-%d_%H-%M-%S"`
# 获取脚本当前所在目录(即上级目录绝对路径)
root_dir=$(cd "$(dirname "$0")"; pwd)/
# 切换到当前脚本的工作目录
cd ${root_dir}
# 获取当前目录名称(父文件夹名字)
d_filename=${PWD##*/} # 打印当前所在目录(basename `pwd`) 或 echo ${d_filename}
# 时间转换函数(秒转分钟)
timeTransformation()
{
    if [ $1 -le 0 ]; then
    echo "============ 😭请检查项目是否能正常手动打包并导出ipa文件 ======="
    exit
    fi
    if [ $1 -gt 59 ]; then
    t_min=$[$1 / 60]
    t_second=$[$1 % 60]
    echo "============ 本次$2用时:${t_min}分${t_second}秒 ======="
    else
    echo "============ 本次$2用时:$1秒 ======="
    fi
}
echo "============ ${d_filename} 打包开始 ======="
# 默认Release版
pro_environ=Release
# 如果没有使用cocoapods 反之if会处理
pro_clean=project
if [ $pro_suffix == xcworkspace ]; then
pro_clean=workspace
fi

# Clean操作
xcodebuild clean -${pro_clean} ${pro_name}.${pro_suffix} -scheme ${pro_name} -configuration ${pro_environ}
judgementLastIsSuccsess $? "Clean"
# 创建存放 archive和IPA 的文件夹
cd ../
ipa_dir=${d_filename}_${date_string}
mkdir ${ipa_dir}
cd ./${d_filename}
# Archive
xcodebuild archive -${pro_clean} ${pro_name}.${pro_suffix} -scheme ${pro_name} -archivePath ../${ipa_dir}/${pro_name}.xcarchive
judgementLastIsSuccsess $? "Archive"
cd ../
# 导出IPA包
xcodebuild -exportArchive -archivePath ./${ipa_dir}/${pro_name}.xcarchive -exportOptionsPlist ./${d_filename}/autoplist/${pro_plist}.plist -exportPath ./${ipa_dir}
judgementLastIsSuccsess $? "导出IPA包"
# 切换到ipa目录去删除${pro_name}.xcarchive包
cd ./${ipa_dir}
rm -r ${pro_name}.xcarchive
# ipa文件路径(用于上传)
ipa_path="./${pro_name}.ipa"
echo "============ ${d_filename} 打包完成 ======="
# 打包结束时间
end_time=$(date +%s)
# 计算打包时间(秒:s)
cost_time=$[$end_time - $begin_time]
#调用时间转换函数
timeTransformation $cost_time "打包"


########################## 上传蒲公英 #################################
uploadPGY()
{
    # 判断配置是否为空,空则代表不上传
    if [ -z "$api_key" ] || [ -z "$ukey" ]; then
    echo "============ 请先配置蒲公英的 api_key & ukey ======="
    return
    fi
    # 上传开始时间
    upload_start_time=$(date +%s)
    # 开始上传
    echo "============ 正在上传 ${d_filename} 到 蒲公英 ======="
    curl -F "file=@${ipa_path}" -F "uKey=${ukey}" -F "_api_key=${api_key}" https://qiniu-storage.pgyer.com/apiv1/app/upload
    judgementLastIsSuccsess $? "上传蒲公英"
    echo "============ 上传结束 ======="
    # 上传结束时间
    upload_end_time=$(date +%s)
    # 计算上传时间(秒:s)
    upload_time=$[$upload_end_time - $upload_start_time]
    #调用时间转换函数
    timeTransformation $upload_time "上传蒲公英"
}
########################## 上传苹果商店 #################################
uploadAppStore()
{
    # 判断配置是否为空,空则代表不上传
    if [ -z "$apple_id" ] || [ -z "$apple_pwd" ]; then
    echo "============ 请先配置苹果商店的 apple_id & apple_pwd ======="
    return
    fi
    # 上传开始时间
    upload_start_time=$(date +%s)
    # 开始上传
    echo "============ 准备上传 ${d_filename} 到 AppStore ======="
    altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
    # validate(验证)
    echo "============ ${d_filename} 正在验证IPA包 ======="
    "$altoolPath" --validate-app -f "$ipa_path" -u "$apple_id" -p "$apple_pwd" -t ios --output-format xml
    judgementLastIsSuccsess $? "验证IPA包"
    # 上传
    echo "============ ${d_filename} 验证结束,正在上传中 ======="
    "$altoolPath" --upload-app -f "$ipa_path" -u "$apple_id" -p "$apple_pwd" -t ios --output-format xml
    judgementLastIsSuccsess $? "上传App Store"
    echo "============ ${d_filename} AppStore - 上传结束 ======="
    # 上传结束时间
    upload_end_time=$(date +%s)
    # 计算上传时间(秒:s)
    upload_time=$[$upload_end_time - $upload_start_time]
    #调用时间转换函数
    timeTransformation $upload_time "上传App Store"
}

if [ $packaging -eq 2 ]; then
uploadAppStore
else
uploadPGY
exit
fi

推荐阅读更多精彩内容