美文网首页工程效率配置&Shell&打包等
Bugly符号表自动上传配置注意点

Bugly符号表自动上传配置注意点

作者: coder_feng | 来源:发表于2021-07-22 20:18 被阅读0次

    Bugly官方的自动配置文档地址:点击跳转
    根据官网文档的配置,在Xcode12上面进行配置完运行,发现并不能如愿上传dSYM文件。经过排查,

    1、在扫描出dSYM文件进行压缩的时候,文件并不完整,导致执行以下命令的时候出错

    zip -r -j ${DSYM_SYMBOL_ZIP_FILE} ${dsymFile} -x *.plist
    

    排查过程:

    一开始以为是Xcode不支持 -r -j 多参数操作,因为删掉了 -j 之后压缩就成功了。

    但是,在上传的时候接口又报错了,进到压缩文件目录发现压缩出来的 zip 只有2K,很显然这个压缩文件是有问题的,继续排查,最终发现在压缩的过程中dSYM文件的内容并不完整,导致压缩出来的zip文件也不完整。

    猜测:在执行扫描的过程中,dSYM文件夹虽然生成了,但是里面的内容还没填充完整,还在继续生成。于是在执行zip的时候加多了10秒钟的休眠,再次Archive,dSYM上传成功!

    总结:需要在执行 zip 命令或者扫描dSYM前加上休眠时间,等待dSYM文件夹内容生成完整。休眠时间的长短由打包的机器性能而定。

    sleep 8 # 这里是由于自己机器性能写的8秒
    

    2、脚本从 info.plist 文件中解析 CFBundleVersionCFBundleShortVersionString在新的Xcode上面并不正确,会得到(CURRENT_PROJECT_VERSION)和(MARKETING_VERSION)

    BUNDLE_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleVersion' "${INFOPLIST_FILE}")
    BUNDLE_SHORT_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleShortVersionString' "${INFOPLIST_FILE}")
    
    

    原因:我们在查看info.plist源码的时候,发现在新版Xcode里面 它指向对应的值就是 CURRENT_PROJECT_VERSION 和 MARKETING_VERSION 这两个宏

    解决:直接使用{CURRENT_PROJECT_VERSION} 和{MARKETING_VERSION} 即可,无需解析info.plist文件

    # 组装Bugly默认识别的版本信息(格式为CFBundleShortVersionString(CFBundleVersion), 例如: 1.0(1))
    if [ ! "${CUSTOMIZED_APP_VERSION}" ]; then
        BUGLY_APP_VERSION="${MARKETING_VERSION}(${CURRENT_PROJECT_VERSION})"
    else
        BUGLY_APP_VERSION="${CUSTOMIZED_APP_VERSION}"
    fi
    

    其他说明

    如果使用了默认的 UPLOAD_DSYM_ONLY=1 ,就没必要再在机器上面放入 jar 包了,小灯塔这边就没有使用,所以也精简了一下脚本:

    #!/bin/sh
     
    BUGLY_APP_ID="xxxxxx"
    # #
    BUGLY_APP_KEY="xxxxxxxxx"
    # #
    BUNDLE_IDENTIFIER="com.ad61v1.xiaodengta"
     
     
    #
    # # 脚本默认配置的版本格式为CFBundleShortVersionString(CFBundleVersion),  如果你修改默认的版本格式, 请设置此变量, 如果不想修改, 请忽略此设置
    # CUSTOMIZED_APP_VERSION="1.0"
    #
    # # Debug模式编译是否上传,1=上传 0=不上传,默认不上传
    UPLOAD_DEBUG_SYMBOLS=0
    #
    # # 模拟器编译是否上传,1=上传 0=不上传,默认不上传
    UPLOAD_SIMULATOR_SYMBOLS=0
    #
    # #只有Archive操作时上传, 1=支持Archive上传 0=所有Release模式编译都上传
    UPLOAD_ARCHIVE_ONLY=1
     
    # Bugly服务域名
    BUGLY_DSYM_UPLOAD_DOMAIN="api.bugly.qq.com"
     
     
    # 打印错误信息
    function exitWithMessage(){
        echo "--------------------------------"
        echo "${1}"
        echo "--------------------------------"
        exit ${2}
    }
     
    # 上传bSYMBOL文件
    function dSYMUpload() {
        P_APP_ID="$1"
        P_APP_KEY="$2"
        P_APP_BUNDLE_ID="$3"
        P_APP_VERSION="$4"
        P_BSYMBOL_ZIP_FILE="$5"
     
        #
        P_BSYMBOL_ZIP_FILE_NAME=${P_BSYMBOL_ZIP_FILE##*/}
        P_BSYMBOL_ZIP_FILE_NAME=${P_BSYMBOL_ZIP_FILE_NAME//&/_}
        P_BSYMBOL_ZIP_FILE_NAME="${P_BSYMBOL_ZIP_FILE_NAME// /_}"
     
        DSYM_UPLOAD_URL="https://${BUGLY_DSYM_UPLOAD_DOMAIN}/openapi/file/upload/symbol?app_id=${P_APP_ID}&app_key=${P_APP_KEY}"
        echo "dSYM upload url: ${DSYM_UPLOAD_URL}"
     
        echo "-----------------------------"
        STATUS=$(/usr/bin/curl -k "${DSYM_UPLOAD_URL}" --form "api_version=1" --form "app_id=${P_APP_ID}" --form "app_key=${P_APP_KEY}" --form "symbolType=2"  --form "bundleId=${BUNDLE_IDENTIFIER}" --form "productVersion=${BUGLY_APP_VERSION}" --form "channel=AppStore" --form "fileName=${P_BSYMBOL_ZIP_FILE_NAME}" --form "file=@${P_BSYMBOL_ZIP_FILE}" --verbose)
        echo "-----------------------------"
     
        UPLOAD_RESULT="FAILTURE"
        echo "Bugly server response: ${STATUS}"
        if [ ! "${STATUS}" ]; then
            echo "Error: Failed to upload the zip archive file."
        elif [[ "${STATUS}" == *"{\"reponseCode\":\"0\"}"* ]]; then
            echo "Success to upload the dSYM for the app [${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION}]"
            UPLOAD_RESULT="SUCCESS"
        else
            echo "Error: Failed to upload the zip archive file to Bugly."
        fi
     
        #Remove temp dSYM archive
        #echo "Remove temporary zip archive: ${DSYM_ZIP_FPATH}"
        #/bin/rm -f "${DSYM_ZIP_FPATH}"
     
        if [ "$?" -ne 0 ]; then
            exitWithMessage "Error: Failed to remove temporary zip archive." 0
        fi
     
        echo "--------------------------------"
        echo "${UPLOAD_RESULT} - dSYM upload complete."
     
        if [[ "${UPLOAD_RESULT}" == "FAILTURE" ]]; then
            echo "--------------------------------"
            echo "Failed to upload the dSYM"
            echo "Please check the script and try it again."
        fi
    }
     
     
    # 执行
    function run() {
     
        CONFIG_BUGLY_APP_ID="$1"
        CONFIG_BUGLY_APP_KEY="$2"
     
        CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER="$3"
        CONFIG_BUGLY_APP_VERSION="$4"
        CONFIG_DSYM_SOURCE_DIR="$5"
        CONFIG_DSYM_DEST_DIR="$6"
     
        # 检查必须参数是否设置
        if [ ! "${CONFIG_BUGLY_APP_ID}" ]; then
            exitWithMessage "Error: Bugly App ID not defined. Please set 'BUGLY_APP_ID' " 0
        fi
     
        if [[ "${CONFIG_BUGLY_APP_ID}" == *"App ID"* ]]; then
            exitWithMessage "Error: Bugly App ID not defined." 0
        fi
     
        if [ ! "${CONFIG_BUGLY_APP_KEY}" ]; then
            exitWithMessage "Error: Bugly App Key not defined." 0
        fi
     
        if [ ! "${CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER}" ]; then
            exitWithMessage "Error: Bundle Identifier not defined." 0
        fi
     
        if [ ! "${CONFIG_BUGLY_APP_VERSION}" ]; then
            exitWithMessage "Error: App Version not defined." 0
        fi
     
        if [ ! -e "${CONFIG_DSYM_SOURCE_DIR}" ]; then
            exitWithMessage "Error: Invalid dir ${CONFIG_DSYM_SOURCE_DIR}" 0
        fi
     
        if [ ! "${CONFIG_DSYM_DEST_DIR}" ]; then
            exitWithMessage "Error: Invalid dir ${CONFIG_DSYM_DEST_DIR}" 0
        fi
     
        if [ ! -e "${CONFIG_DSYM_DEST_DIR}" ]; then
            mkdir ${CONFIG_DSYM_DEST_DIR}
        fi
     
        DSYM_FOLDER="${CONFIG_DSYM_SOURCE_DIR}"
        IFS=$'\n'
     
        echo "Scaning dSYM FOLDER: ${DSYM_FOLDER} ..."
        RET="F"
         
        # 睡眠8秒
        sleep 8
         
        #
        for dsymFile in $(find "$DSYM_FOLDER" -name '*.dSYM'); do
            RET="T"
            echo "Found dSYM file: $dsymFile"
     
            DSYM_FILE_NAME=${dsymFile##*/}
            DSYM_SYMBOL_ZIP_FILE_NAME="${DSYM_FILE_NAME}.zip"
            DSYM_SYMBOL_ZIP_FILE_NAME="${DSYM_SYMBOL_ZIP_FILE_NAME// /_}"
            DSYM_SYMBOL_ZIP_FILE=${CONFIG_DSYM_DEST_DIR}/${DSYM_SYMBOL_ZIP_FILE_NAME}
             
            echo "目标路径:${DSYM_SYMBOL_ZIP_FILE}"
            echo "符号表路径:$dsymFile"
             
            if [ -e $DSYM_SYMBOL_ZIP_FILE ]; then
                rm -f $DSYM_SYMBOL_ZIP_FILE
            fi
             
            # 如果只上传dSYM,直接压缩dSYM目录
            zip -rj ${DSYM_SYMBOL_ZIP_FILE} ${dsymFile} -x *.plist
             
            # 上传
            dSYMUpload $CONFIG_BUGLY_APP_ID $CONFIG_BUGLY_APP_KEY $CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER $CONFIG_BUGLY_APP_VERSION $DSYM_SYMBOL_ZIP_FILE
        done
     
        if [ $RET = "F" ]; then
            exitWithMessage "No .dSYM found in ${DSYM_FOLDER}" 0
        fi
    }
     
    # 在Xcode工程中执行
    function runInXcode() {
        echo "Uploading dSYM to Bugly in Xcode ..."
     
        # 组装Bugly默认识别的版本信息(格式为CFBundleShortVersionString(CFBundleVersion), 例如: 1.0(1))
        if [ ! "${CUSTOMIZED_APP_VERSION}" ]; then
            BUGLY_APP_VERSION="${MARKETING_VERSION}(${CURRENT_PROJECT_VERSION})"
        else
            BUGLY_APP_VERSION="${CUSTOMIZED_APP_VERSION}"
        fi
     
        echo "--------------------------------"
        echo "Prepare application information."
        echo "--------------------------------"
     
        echo "Product Name: ${PRODUCT_NAME}"
        echo "Bundle Identifier: ${BUNDLE_IDENTIFIER}"
        echo "Version: ${BUNDLE_SHORT_VERSION}"
        echo "Build: ${BUNDLE_VERSION}"
     
        echo "Bugly App ID: ${BUGLY_APP_ID}"
        echo "Bugly App key: ${BUGLY_APP_KEY}"
        echo "Bugly App Version: ${BUGLY_APP_VERSION}"
     
        echo "--------------------------------"
        echo "Check the arguments ..."
     
        ##检查模拟器编译是否允许上传符号
        if [ "$EFFECTIVE_PLATFORM_NAME" == "-iphonesimulator" ]; then
        if [ $UPLOAD_SIMULATOR_SYMBOLS -eq 0 ]; then
            exitWithMessage "Warning: Build for simulator and skipping to upload. \nYou can modify 'UPLOAD_SIMULATOR_SYMBOLS' to 1 in the script." 0
        fi
        fi
     
        ##检查是否是Release模式编译
        if [ "${CONFIGURATION=}" == "Debug" ]; then
        if [ $UPLOAD_DEBUG_SYMBOLS -eq 0 ]; then
            exitWithMessage "Warning: Build for debug mode and skipping to upload. \nYou can modify 'UPLOAD_DEBUG_SYMBOLS' to 1 in the script." 0
        fi
        fi
     
        ##检查是否Archive操作
        if [ $UPLOAD_ARCHIVE_ONLY -eq 1 ]; then
        if [[ "$TARGET_BUILD_DIR" == *"/Archive"* ]]; then
            echo "Archive the package"
        else
            exitWithMessage "Warning: Build for NOT Archive mode and skipping to upload. \nYou can modify 'UPLOAD_ARCHIVE_ONLY' to 0 in the script." 0
        fi
        fi
     
        #
        run ${BUGLY_APP_ID} ${BUGLY_APP_KEY} ${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION} ${DWARF_DSYM_FOLDER_PATH} ${BUILD_DIR}/BuglySymbolTemp
    }
     
    # 根据Xcode的环境变量判断是否处于Xcode环境
    INFO_PLIST_FILE="${INFOPLIST_FILE}"
     
    BuildInXcode="F"
    if [ -f "${INFO_PLIST_FILE}" ]; then
        BuildInXcode="T"
    fi
     
    echo "BUNDLE_SHORT_VERSION:"${BUNDLE_SHORT_VERSION}
    echo "BUNDLE_VERSION:"${BUNDLE_VERSION}
     
    if [ $BuildInXcode = "T" ] && [ ! -f "JenkinsFlag" ]; then
        runInXcode
    else
        echo "\nUsage: dSYMUpload.sh <bugly_app_id> <bugly_app_key> <app_bundle_identifier> <app_version> <dSYM_src_dir> <bSYMBOL_dest_dir> [upload_dsym_only]\n"
        # 你可以在此处直接设置BuglyAppID和BuglyAppKey,排除不常变参数的输入
        BUGLY_APP_ID="$1"
        BUGLY_APP_KEY="$2"
        BUNDLE_IDENTIFIER="$3"
        BUGLY_APP_VERSION="$4"
        DWARF_DSYM_FOLDER_PATH="$5"
        SYMBOL_OUTPUT_PATH="$6"
        UPLOAD_DSYM_ONLY=$7
        run ${BUGLY_APP_ID} ${BUGLY_APP_KEY} ${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION} ${DWARF_DSYM_FOLDER_PATH} ${SYMBOL_OUTPUT_PATH} ${UPLOAD_DSYM_ONLY}
    fi
    

    相关文章

      网友评论

        本文标题:Bugly符号表自动上传配置注意点

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