美文网首页专业知识分享(iOS)插件
iOS开发 - iOS项目自动打包脚本

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

作者: 阿唯不知道 | 来源:发表于2017-06-27 17:28 被阅读65次

    自动功能打包展示:

    打包演示.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
    

    相关文章

      网友评论

        本文标题:iOS开发 - iOS项目自动打包脚本

        本文链接:https://www.haomeiwen.com/subject/ffbecxtx.html