美文网首页程序员iOS开发知识小集知识积累
iOS多环境自动打包并上传蒲公英和发送推送通知

iOS多环境自动打包并上传蒲公英和发送推送通知

作者: thlztc | 来源:发表于2019-04-08 14:42 被阅读39次

    当你的项目需要多个帐号+多套证书,打包发布不同环境测试的时候,自动打包的能解决很多痛苦。
    自动打包是在之前命令行的基础上进行的再一次升级 iOS命令行打包

    首先,我们进行多环境的创建:

    打开项目,依次点击


    WX20190408-101427.png

    我创建了2个新环境:Test和Beta,分别用于发布测试和正式环境的版本以供测试安装。


    WX20190408-101935.png

    接下来进行多环境参数设置:

    我采用的是创建xcconfig来进行环境配置


    WX20190408-102420.png

    以此创建5个文件,分别为 Common.xcconfig、Debug.xcconfig、Release.xcconfig、Test.xcconfig、Beta.xcconfig


    image.png

    在Common.xcconfig文件中,配置一些基础信息:


    image.png

    在4个环境的配置中,需要引用Common.xcconfig,并且配置需要区分的内容,例如Debug.xcconfig:


    image.png

    Beta.xcconfig:


    image.png

    设置了APPName、APPVersion、Bundle Identifier、APPIcon等的区别
    同时在info.plist中可配置这些参数:


    image.png

    GCC_PREPROCESSOR_DEFINITIONS 是 GCC 预编译头参数,我这边除了每个环境配置了一个之外,还配置了一个 TestEnvironment 来区分正式和测试。

    接下来是环境配置:

    image.png

    之后,便可在 Preprocessor Macros 上查看到预编译的头参数了

    image.png

    运行

    image.png

    可以看到版本号、名字和TestEnvironment环境的值。iocn没有添加,所以是空的。

    多环境自动打包

    针对不同的环境,根据之前配置的xcconfig来选择不同的configration进行打包


    image.png

    环境选择:

    #环境设置 (配置了四个环境,为打包准备的是 Test, Beta, Release 三个环境,分别对应 [测试服务器] [正式服务器] [正式服务器])
    echo "请选择需要打包的环境:1:Test 2:Beta 3:Release"
    
    read environment
    while [[ $environment != 1 ]] && [[ $environment != 2 ]] && [[ $environment != 3 ]]; do
        echo '请选择需要打包的环境:1:Test 2:Beta 3:Release'
        read environment
    done
    

    配置蒲公英和信鸽推送信息

    ##########################################
    ##########################################
    if [ $environment == 1 ];then
        buildConfiguration=Test
        #蒲公英上传到 key
        uploadKey=蒲公英账号key
        #信鸽推送的 ACCESS ID
        accessid=信鸽推送ACCESS ID
        #信鸽推送的 SECRET KEY
        secretkey=信鸽推送SECRET KEY
    elif [ $environment == 2 ];then
        buildConfiguration=Beta
        #蒲公英上传到 key
        uploadKey=蒲公英账号key
        #信鸽推送的 ACCESS ID
        accessid=信鸽推送ACCESS ID
        #信鸽推送的 SECRET KEY
        secretkey=信鸽推送SECRET KEY
    else
        buildConfiguration=Release
    fi
    ##########################################
    ##########################################
    

    cleanProject:

     function cleanProject(){
    
        echo '/// ---------- \\\'
        echo '/// 正在清理工程 \\\'
        echo '/// ---------- \\\'
        echo ''
    
        xcodebuild clean \
        -configuration $buildConfiguration \
        -quiet || exit
    
        echo '/// ---------- \\\'
        echo '/// 清理工程完成 \\\'
        echo '/// ---------- \\\'
        echo ''
    }
    

    buildProject:

    function buildProject(){
    
        echo '/// ---------- \\\'
        echo '/// 正在编译工程: '$buildConfiguration
        echo '/// ---------- \\\'
        echo ''
    
        xcodebuild archive \
        -workspace $projectPath/$projectName.xcworkspace \
        -scheme $schemeName \
        -configuration $buildConfiguration \
        -archivePath $archiveBuildPath/$projectName.xcarchive \
        -quiet || exit
    
        echo '/// ---------- \\\'
        echo '/// 编译工程完成 \\\'
        echo '/// ---------- \\\'
        echo ''
    
        CFBundleShortVersionString=$(/usr/libexec/PlistBuddy -c "Print :ApplicationProperties:CFBundleShortVersionString" "$archiveBuildPath/$projectName.xcarchive/Info.plist")
        CFBundleVersion=$(/usr/libexec/PlistBuddy -c "Print :ApplicationProperties:CFBundleVersion" "$archiveBuildPath/$projectName.xcarchive/Info.plist")
    
        if [[ $releaseNote == '' ]];then
            releaseNote="Auto build deploy + Version:$CFBundleShortVersionString + Build:$CFBundleVersion"
        fi
    }
    

    buildIPA:

    function buildIPA(){
    
        echo '/// ---------- \\\'
        echo '/// 正在生成ipa \\\'
        echo '/// ---------- \\\'
        echo ''
    
        /usr/libexec/PlistBuddy -c "Print" $exportOptionsPlistPath
        echo ''
    
        xcodebuild -exportArchive \
        -archivePath $archiveBuildPath/$projectName.xcarchive \
        -exportPath $archiveExportPath \
        -exportOptionsPlist $exportOptionsPlistPath || exit
    
        if [ -e $archiveExportPath/$schemeName.ipa ];then
    
        echo '/// ---------- \\\'
        echo '/// ipa已经生成 \\\'
        echo '/// ---------- \\\'
        echo ''
    
        if [ $environment != 3 ];then
            uploadIPA
        else
            itunesConnect
        fi
    
        else
    
        echo '/// ---------- \\\'
        echo '/// ipa生成失败 \\\'
        echo '/// ---------- \\\'
        echo ''
    
        fi
    }
    

    如果是测试版本则上传蒲公英:

        echo '/// ---------- \\\'
        echo '/// 开始上传ipa \\\'
        echo '/// ---------- \\\'
        echo ''
    
        curl \
        -F "file=@$archiveExportPath/$schemeName.ipa" \
        -F "buildName=$displayName-$buildConfiguration" \
        -F "_api_key=$uploadKey" \
        -F "buildUpdateDescription=$releaseNote" \
        https://www.pgyer.com/apiv2/app/upload
    
        echo ''
        echo '/// ---------- \\\'
        echo '/// 打包上传成功 \\\'
        echo '/// ---------- \\\'
        echo ''
    
        sendNotification
    

    并且发送通知:

    function sendNotification(){
    
        timestamp=$(date +%s)
        message="{\"aps\":{\"alert\":{\"title\":\"😍版本更新😍\",\"body\":\"😚新版本:${CFBundleShortVersionString}已发布😚请打开应用获取更新😚\"},\"badge\":\"0\",\"category\":\"INVITE_CATEGORY\"}}"
        sign="POSTopenapi.xg.qq.com/v2/push/all_deviceaccess_id=${accessid}environment=1message=${message}message_type=0timestamp=${timestamp}${secretkey}"
        signmd5=$(md5 -qs $sign)
    
        echo ''
        echo "时间戳::$timestamp"
        echo ''
        echo "签名::$sign"
        echo ''
        echo "MD5::$signmd5"
        echo ''
    
        curl -i \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -d "access_id=$accessid" \
        -d "environment=1" \
        -d "message=$message" \
        -d "message_type=0" \
        -d "timestamp=$timestamp" \
        -d "sign=$signmd5" \
        http://openapi.xg.qq.com/v2/push/all_device
    
    
    
        echo ''
        echo ''
    }
    

    如果是App Store版本,则上传App Store:

    function itunesConnect(){
    
        echo ''
        echo '/// ---------------- \\\'
        echo '/// 正在上传到AppStore \\\'
        echo '/// ---------------- \\\'
        echo ''
    
        /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool \
        --upload-app \
        -f "$archiveExportPath/$schemeName.ipa" \
        -u $developerAccount \
        -p $developerPassword
    
        echo ''
        echo '/// ---------- \\\'
        echo '/// 打包上传成功 \\\'
        echo '/// ---------- \\\'
        echo ''
    }
    

    接下来就是把脚本放入项目的文件下下,


    image.png

    运行并选择你所需要打包的环境:


    image.png

    选择完,按下回车键,即可耐心等待结果,最终编译、打包、上传、通知都成功。


    image.png

    脚本下载

    相关文章

      网友评论

        本文标题:iOS多环境自动打包并上传蒲公英和发送推送通知

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