iOS端自动化构建流程

jenkins配置

**3种打包构建

app-debug:

开发证书,dev配置文件,脚本中Configuration设置为Debug

app-adhoc

生产证书,Adhoc配置文件,脚本中Configuration设置为Adhoc

app-release​​​​​​​

生产证书,Appstore配置文件,脚本中Configuration设置为Release

**流程

-->jenkins选对相应构建进行打包

-->打包完成后,发送至蒲公英。获取二维码,链接。

-->打包完成后,将ipa,dysm文件存储在私有服务器,获取对应的链接。

-->钉钉群通知。包含的信息:包名,版本号,构建号,分支名,构建环境, 蒲公英二维码,蒲公英ipa安装链接,ipa文件下载链接,dysm文件下载链接。

Configurations

三种环境配置

Debug

1,打development包(开发证书,jkdj_dev配置文件)。

2,工程内通过#if DEBUG进行判断,

3,可在该环境下测试某些需开发证书的情况,比如开发证书推送的测试。

4,该环境下加入debug面板(目前的私有JKDJ_DebugKit库),可进行API环境切换,性能调试等

Adhoc

1,打adhoc包(生产证书,jkdj_Adhoc配置文件)

2,工程内通过#if ADHOC进行判断,

3,可在该环境下测试某些需生产证书的情况,比如生产证书推送的测试。

4,该环境下加入debug面板(目前的私有JKDJ_DebugKit库),可进行API环境切换,性能调试等

5,该环境也可作为日常测试包

Release

1,打Appstore包(生产证书,jkdj_Appstore配置文件)。

2,该环境不再导入debug面板,API环境固定为生产环境

3,仅供appstore

API配置

API_Dev:开发环境API

API_Test:测试环境API

API_Pre:预先发环境API

API_Dis:生产环境API

GCC_PREPROCESSOR_DEFINITIONS='$$(inherited) $(ApiEnvironment) '

工程配置

1、在Project中新增一种环境配置Adhoc

2、在Target- HealthManager的build Setting目录下配置该环境下预定义宏ADHOC=1

3,podfile导入debug私有库,仅仅在Debug,Adhoc环境

pod 'JKDJ_DebugKit', '2.0', :configurations => ['Debug','Adhoc'] #复星健康debug面板(包含环境切换,性能调试能)Plain Text

4,宏判断,例

debug面板

    #if (defined(DEBUG) || defined(ADHOC))
    [[JKDebugManager shareManager] show];
    #else
    #endif

api环境

- (NSString *)hostUrl{
        
    #if (defined(DEBUG) || defined(ADHOC))
    {

        #ifdef API_Dev
        return  API_Dev_URL;  //开发环境
        #endif
        
        #ifdef API_Test
        return  API_Test_URL;  //测试环境
        #endif
        
        #ifdef API_Pre
        return  API_Uat_URL;  //预发环境
        #endif
        
        #ifdef API_Dis
        return  API_Distribute_URL;  //生产环境
        #endif
        
        NSUserDefaults * def = [NSUserDefaults standardUserDefaults];
        NSString  * host  = [def objectForKey:NSUserDefault_HostUrl];
        if ([NSString isEmpty:host]) {
            return  API_Distribute_URL;  //生产环境
        }else if ([host rangeOfString:@"api.health2m"].location != NSNotFound) {
            return API_Distribute_URL;
        } else{
            return host;
        }
    }
    
    #else
    {
        return  API_Distribute_URL;  //生产环境
    }
    #endif
}

自动化打包脚本 (目前使用)

#复星健康自动化打包脚本
#参数 ARCHIVE_TYPE
#{
#    DEVELOPMENT->开发包
#    ADHOC->Adhoc包,日常包
#    APPSTORE->删除appstore的包
#}
#
#实例 bash JKAutoBuild.sh DEVELOPMENT

function auto() {  #构建包

    #打包类型
    ARCHIVE_TYPE=$1
    
    #编译模式
    BUILD_TYPE="Debug"

    EXPORT_TYPE="Develop"

    if [[ $ARCHIVE_TYPE == "DEVELOPMENT" ]]; then

        BUILD_TYPE="Debug"
        EXPORT_TYPE="Develop"

    elif [[ $ARCHIVE_TYPE == "ADHOC" ]]; then

        BUILD_TYPE="Release"
        EXPORT_TYPE="Adhoc"

    elif [[ $ARCHIVE_TYPE == "APPSTORE" ]]; then
    
        BUILD_TYPE="Release"
        EXPORT_TYPE="AppStore"
        
    else
        echo "defult"
    fi


    # 工程名
    APP_NAME="HealthManager"

    # workspace名
    WORK_SPACE="HealthManager.xcworkspace"

    #包名(Package)
    BUNDLEID==`xcodebuild -showBuildSettings | grep PRODUCT_BUNDLE_IDENTIFIER | tr -d 'PRODUCT_BUNDLE_IDENTIFIER ='`

    #info.plist路径
    project_infoplist_path="./${APP_NAME}/Info.plist"
     
    #取版本号
    bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
     
    #取build值
    bundleVersion=`xcodebuild -showBuildSettings | grep CURRENT_PROJECT_VERSION | tr -d 'CURRENT_PROJECT_VERSION ='`

    #时间
    DATE="$(date +%Y%m%d)"

    # IPA路径
    IPAPATH="${APP_NAME}_${BUILD_TYPE}_V${bundleShortVersion}_B${bundleVersion}_${DATE}"

    # xcarchive
    XCARCHIVE="${APP_NAME}_${BUILD_TYPE}_V${bundleShortVersion}_B${bundleVersion}_${DATE}.xcarchive"

    #IPA输入路径
    IPAPATHOUT="./build/${IPAPATH}/${APP_NAME}.ipa"

    #dYSM文件目录
    dYSMPATHOUT="./build/${XCARCHIVE}/dSYMs/${APP_NAME}.app.dSYM"
    #上传appstore
    ##账号
    parameter_username=""
    
    #独立密码
    parameter_password=""

    # 开始计时
    SECONDS=0


    echo "\n\n\033[32m -----------------------Xcode打包-----------------------\033[0m\n\n\n"


    # 清理
    echo "\n\n\033[32m +++++++++++++++++清理中+++++++++++++++++\033[0m\n\n\n"
    xcodebuild -workspace "${WORK_SPACE}" -scheme "${APP_NAME}" -configuration "${BUILD_TYPE}" clean

    # 编译
    echo "\n\n\033[32m +++++++++++++++++编译中+++++++++++++++++\033[0m\n\n\n"
    xcodebuild -workspace "${WORK_SPACE}" -sdk iphoneos -scheme "${APP_NAME}" -archivePath "./build/${XCARCHIVE}" -configuration "${BUILD_TYPE}" archive

    # 打包
    echo "\n\n\033[32m +++++++++++++++++打包中++++++++++++++++++\033[0m\n\n\n"
    xcodebuild -exportArchive -archivePath "./build/${XCARCHIVE}" -exportPath "./build/${IPAPATH}" -exportOptionsPlist "./ExportOptionsPlist/${EXPORT_TYPE}ExportOptionsPlist.plist" -allowProvisioningUpdates

    # 验证
    if [ -f ${IPAPATHOUT} ] ; then
    echo "\n\n\033[32m +++++++++++++++++打包成功,用时 ${SECONDS}s ++++++++++++++++++\033[0m\n\n\n"
    else
    echo "\n\n\033[32m +++++++++++++++++打包失败++++++++++++++++++\033[0m\n\n\n"
    fi

    
    
    
    echo "\n\n\033[32m -----------------------上传到蒲公英-----------------------\033[0m\n\n\n"


    #蒲公英上的user Key
    uKey="4371fb11c6bbccb4c613ae93ded1fef0"

    #蒲公英上的API Key
    apiKey="789438bcbd5da6f7b5620f0ed143e72f"

    #蒲公英版本更新描述,这里取git最后一条提交记录作为描述
    MSG=`git log -1 --pretty=%B`

    #要上传的ipa文件路径
    echo $IPAPATHOUT

    # 执行上传至蒲公英的命令
    echo "++++++++++++++upload+++++++++++++"

    curl -F "file=@${IPAPATHOUT}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" -F "buildUpdateDescription=${MSG}" http://www.pgyer.com/apiv2/app/upload > uploadResponse.json

    #cat uploadResponse.json

    echo
    echo "++++++++++++++提取上传响应信息+++++++++++++"

    uploadResult=`cat $WORKSPACE/uploadResponse.json`


    url1=`echo "${uploadResult##*"buildQRCodeURL"}"`

    urlLength=`expr ${#url1} - 6`

    url2=`echo ${url1:3:$urlLength}`

    buildQRCodeURL=`echo $url2 | sed 's:\\\/:\/:g'`


    if [ ! $buildQRCodeURL ]; then
       echo "~~~~~~~~~~~~~~~~~~~上传失败~~~~~~~~~~~~~~~~~~~"
    else
       echo "~~~~~~~~~~~~~~~~~~~上传成功~~~~~~~~~~~~~~~~~~~"
       echo "构建版本:${bundleShortVersion}"
       echo "二维码链接:${buildQRCodeURL}"
    fi

    echo "buildQRCodeURL=${buildQRCodeURL}\r\nbuildVersion=${bundleShortVersion}">> uploadResult.txt



    echo "\n\n\033[32m -----------------------上传钉钉群通知-----------------------\033[0m\n\n\n"

    curl 'https://oapi.dingtalk.com/robot/send?access_token=48c80fea344d28d6a4c5d2965013a1dd3f54976d01ee39951f39c9b68a4d6f3c' \
       -H 'Content-Type: application/json' \
       -d "{'msgtype':'markdown','markdown':{'title':'复星健康iOS端','text':'### 复星健康iOS端  \n * 构建分支 => ${Branch_Tag}  \n * 构建环境 => ADHOC  \n ![screenshot](${buildQRCodeURL})  \n>'}}"



    echo "\n\n\033[32m -----------------------上传dSYM文件-----------------------\033[0m\n\n\n"

    #只有appstore包才上传bugly
    if [[ ${EXPORT_TYPE} == "AppStore" ]]; then
        

        zip -rj "${dYSMPATHOUT}.zip" ${dYSMPATHOUT}
    
        curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?app_key=0de566a9-f35a-4d29-b9c4-b7fff662ebe0&app_id=a8b0724bed" --form "api_version=1" --form "app_id=a8b0724bed" --form "app_key=0de566a9-f35a-4d29-b9c4-b7fff662ebe0" --form "symbolType=2"  --form "bundleId=${BUNDLEID}" --form "productVersion=${bundleShortVersion}" --form "channel=AppStore" --form "fileName=${APP_NAME}.app.dSYM.zip" --form "file=@${dYSMPATHOUT}.zip" --verbose

    else
        echo "not upload budly"
    fi


    echo "\n\n\033[32m -----------------------上传AppStore-----------------------\033[0m\n\n\n"
    
    #只有appstore包才上传appstore
    if [[ ${EXPORT_TYPE} == "AppStore" ]]; then
    
        #验证账号密码
        if [ ${#parameter_username} != 0 -a ${#parameter_username} != 0 ]
        then
            echo "\n\033[32m****************\n开始上传AppStore\n****************\033[0m\n"
            
            #验证APP
            altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
            "${altoolPath}" --validate-app \
            -f "$IPAPATHOUT" \
            -u "$parameter_username" \
            -p "$parameter_password" \
            --output-format xml
            #上传APP
            "${altoolPath}" --upload-app \
            -f "$IPAPATHOUT" \
            -u "$parameter_username" \
            -p "$parameter_password" \
            --output-format xml
            
            echo "\n\033[32m****************\n上传AppStore完毕\n****************\033[0m\n"
        fi

    fi
}

auto $1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值