zoukankan      html  css  js  c++  java
  • iOS自动打发布包-备用

    #!/bin/bash

    #  autoPublishH.sh
    #  
    #
    #  Created by 刘志托 liu on 12-2-8.
    #  Copyright (c) 2012年 null. All rights reserved.

    #以下为全局设置变量
    BasePath="/Users/wangzi6hao/Developer/comProject/PAE2/branches/PAEBank12_1.7"  #打包项目根代码存放目录
    Version="1.7"   #程序版本号
    BundleId="com.pingan.PABankiPhone"  #程序唯一id
    IconName1="Icon.png"    #程序ICON
    IconName2="Icon@2x.png" #程序高清ICON
    WebtrendsHttp="http://sdc.pingan.com/v1/"   #网络日志内容
    WebtrendsFlag="if (PA_ENVIRONMENT!=2) " #检查的配置内容
    GlobalstgEntrance="#define stgEntrance 0"   #检查正常入口
    GlobalPA_ENVIRONMENT="#define PA_ENVIRONMENT 2"    #检查生产环境
    NetEntrance="#define Entrance    0"  #检查正常入口
    NetProType="#define proType        0"  #检查正常生产环境
    NetAppConfig="http://bankcdn.pingan.com.cn/assets/config/app_config.xml" #检查App config

    targetStr="PAEBank" #打包目标
    iosSDK="iphoneos5.0"   #打包平台
    DEPLOYMENTTARGET="3.0"  #打包支持版本
    configurationType="Distribution"    #打包使用证书
    ARCHSType="armv6 armv7"     #打包支持内核 armv6 armv7
    ZipName="PABankiPhone.app"    #生成的程序App名字
    codeSign="iPhone Distribution: Ping An Insurance(Group) Company Of China,LTD."  #打包使用证书
    #这里还可以加一个选择,当有多个证书,都是 "iPhone Distribution: Ping An Insurance(Group) Company Of China,LTD." 这个值的时候,可以指定证书的唯一ID,唯一ID可以通过在Xcode的证书配置文件里看到.可以保证证书不会弄错.

    ProductName="平安口袋银行"    #程序名称

    LogBuildName=$BasePath/build.log  #编译内容日志临时保存位置
    BackupName="iPhone发布验证"       #生成的程序App名字

    outAppPath=$HOME/Developer/project/report/最新包/历史版本
    outAppUrl="http://10.23.16.27:8888/最新包/历史版本"    #通过Http来访问生成打包好的文件位置
    outAppAfp="afp://10.23.16.27/report/最新包/历史版本"   #通过Mac机器来访问的内容


    plistName="${BasePath}/PAEBank/PAEBank-Info.plist"  #要检查的plist文件名内容
    WebtrendsName="${BasePath}/PAEBank/Resource/Webtrends.plist" #检查的Webtrends plist文件设置内容
    WebtrendsFlagName="${BasePath}/PAEBank/公共模块/网络模块/Webtrends+extra.m"   #检查Webtrends 配置文件内容
    GlobalName="${BasePath}/PAEBank/公共模块/Global.h"   #检查全局配置文件
    NetControllerHName="${BasePath}/PAEBank/公共模块/网络模块/NetController.h"  #检查NetController.h 网络模块内容
    NetControllerMName="${BasePath}/PAEBank/公共模块/网络模块/NetController.m"  #检查NetController.m 网络模块内容

    #当传入的第一个参数不为0的时候,退出程序
    function errorExit(){
        if [ $1 -ne 0 ];then
            echo $2
            echo "XXXX ERROR XXXX ERROR XXXX ERROR XXXX ERROR XXXX XXXX ERROR XXXX "
            exit 1
        fi
    }

    cd $BasePath
    errorExit $? "!!!错误!!!找不到目录:"$BasePath
    echo "进入文件夹:"`pwd`

    ITEMLINENUMBER="0"
    checkItem="版本号"
    ((ITEMLINENUMBER ++))
    echo "${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $Version
    lineNumber=`grep -n "<key>CFBundleVersion</key>" $plistName | awk -F: '{print $1}'`    #获取版本号KEY在第几行
    ((lineNumber ++))   #获取下版本KEY对应的Value所有行
    sed -n ''${lineNumber}'p' $plistName | grep "<string>${Version}</string>" 1>/dev/null   #检查值所在行,是否存在
    errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
    echo "E结束${checkItem}检查,正确."

    checkItem="程序显示名称"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $ProductName
    lineNumber=`grep -n "<key>CFBundleDisplayName</key>" $plistName | awk -F: '{print $1}'`    #获取版本号KEY在第几行
    ((lineNumber ++))   #获取下版本KEY对应的Value所有行
    sed -n ''${lineNumber}'p' $plistName | grep "<string>${ProductName}</string>" 1>/dev/null   #检查值所在行,是否存在
    errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
    echo "E结束${checkItem}检查,正确."

    checkItem="程序ID"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $BundleId
    lineNumber=`grep -n "<key>CFBundleIdentifier</key>" $plistName | awk -F: '{print $1}'`    #获取版本号KEY在第几行
    ((lineNumber ++))   #获取下版本KEY对应的Value所有行
    sed -n ''${lineNumber}'p' $plistName | grep "<string>${BundleId}</string>" 1>/dev/null   #检查值所在行,是否存在
    errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
    echo "E结束${checkItem}检查,正确."

    checkItem="图标是否具有光晕效果"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo "YES"
    lineNumber=`grep -n "<key>UIPrerenderedIcon</key>" $plistName | awk -F: '{print $1}'`    #获取版本号KEY在第几行
    ((lineNumber ++))   #获取下版本KEY对应的Value所有行
    sed -n ''${lineNumber}'p' $plistName | grep "<true/>" 1>/dev/null   #检查值所在行,是否存在
    errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
    echo "E结束${checkItem}检查,正确."

    checkItem="程序图标1"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $IconName1
    lineNumber=`grep -n "<key>CFBundleIconFiles</key>" $plistName | awk -F: '{print $1}'`    #获取版本号KEY在第几行
    ((lineNumber +=2))   #获取下版本KEY对应的Value所有行
    sed -n ''${lineNumber}'p' $plistName | grep "<string>${IconName1}</string>" 1>/dev/null   #检查值所在行,是否存在
    errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
    echo "E结束${checkItem}检查,正确."

    checkItem="程序图标2"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $IconName2
    ((lineNumber ++))   #获取下版本KEY对应的Value所有行
    sed -n ''${lineNumber}'p' $plistName | grep "<string>${IconName2}</string>" 1>/dev/null   #检查值所在行,是否存在
    errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
    echo "E结束${checkItem}检查,正确."

    checkItem="程序图标资源1"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $IconName1
    if [ -f "${BasePath}/PAEBank/Resource/图片/$IconName1" ];then
        echo "E结束${checkItem}检查,${checkItem}存在."
    else
        errorExit 1 "!!!错误!!!,文件夹中找不到对应的${checkItem}"
    fi

    checkItem="程序图标资源2"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $IconName2
    if [ -f "${BasePath}/PAEBank/Resource/图片/$IconName2" ];then
        echo "E结束${checkItem}检查,${checkItem}存在."
    else
        errorExit 1 "!!!错误!!!,文件夹中找不到对应的${checkItem}"
    fi

    checkItem="Webtrends地址"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $WebtrendsHttp
    webUrl=`strings $WebtrendsName |grep "$WebtrendsHttp"`   #检查值所在行,是否存在
    if [ ! "${webUrl}" == "${WebtrendsHttp}" ];then
        errorExit 1 "!!!错误!!!,找不到对应的${WebtrendsHttp}"
    fi
    echo "E结束${checkItem}检查,正确."

    checkItem="Webtrends是否激活"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $WebtrendsFlag
    grep "$WebtrendsFlag" $WebtrendsFlagName 1>/dev/null
    errorExit $? "!!!错误!!!,找不到对应的${WebtrendsFlag}"
    echo "E结束${checkItem}检查,正确."

    checkItem="全局配置 正常入口 "
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $GlobalstgEntrance
    grep "$GlobalstgEntrance>" $GlobalName
    errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
    echo "E结束${checkItem}检查,正确."

    checkItem="全局配置 生产发布环境 "
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $GlobalPA_ENVIRONMENT
    grep "$GlobalPA_ENVIRONMENT>" $GlobalName
    errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
    echo "E结束${checkItem}检查,正确."

    checkItem="网络配置 正常入口 "
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $NetEntrance
    grep "$NetEntrance>" $NetControllerHName
    errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
    echo "E结束${checkItem}检查,正确."

    checkItem="网络配置 正常生产环境 "
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $NetProType
    grep "$NetProType>" $NetControllerHName
    errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
    echo "E结束${checkItem}检查,正确."

    checkItem="网络配置 App config "
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
    echo $NetAppConfig
    grep "$NetAppConfig>" $NetControllerMName
    errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
    echo "E结束${checkItem}检查,正确."

    checkItem="打包Base SDK"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S打包信息:${checkItem}========================="
    echo $iosSDK

    checkItem="打包iOS Deployment Target"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S打包信息:${checkItem}========================="
    echo $DEPLOYMENTTARGET

    checkItem="打包Build Configuration"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S打包信息:${checkItem}========================="
    echo $configurationType

    checkItem="打包Architectures"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S打包信息:${checkItem}========================="
    echo $ARCHSType

    checkItem="清除编译文件"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始:${checkItem}========================="
    xcodebuild clean -configuration $configurationType -sdk $iosSDK -target $targetStr IPHONEOS_DEPLOYMENT_TARGET=$DEPLOYMENTTARGET GCC_VERSION="com.apple.compilers.llvm.clang.1_0" ARCHS="$ARCHSType" 1>/dev/null
    errorExit $? "!!!错误!!!${checkItem}"
    echo "E结束${checkItem},正确."

    checkItem="编译发布包文件"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始:${checkItem}========================="
    xcodebuild -configuration $configurationType -sdk $iosSDK -target $targetStr IPHONEOS_DEPLOYMENT_TARGET=$DEPLOYMENTTARGET GCC_VERSION="com.apple.compilers.llvm.clang.1_0" ARCHS="$ARCHSType"  CODE_SIGN_IDENTITY="$codeSign">$LogBuildName
    errorFlag=$?

    checkItem="获取编译中警告和错误日志内容"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始:${checkItem}========================="
    grep -E " warning| error|SUCCEEDED" $LogBuildName
    errorExit $? "!!!错误!!!${checkItem}"
    echo "E结束${checkItem},正确."

    if [ $errorFlag -ne 0 ];then
        errorExit $errorFlag "!!!错误!!!"
    fi

    checkItem="获取编译中打包证书"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始:${checkItem}========================="
    grep "${codeSign}" $LogBuildName
    errorExit $? "!!!错误!!!${checkItem}"
    codeSignCount=`grep -c "${codeSign}" $LogBuildName` #获取有几个证书编号
    if [ $codeSignCount -ne 2 ];then    #如果证书显示数量没有2个,出错
        errorExit $? "!!!错误!!!${checkItem}"
    fi
    echo "E结束${checkItem},正确."


    checkItem="复制 app和dsym 文件备份"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始:${checkItem}========================="
    VersionPath=$outAppPath/$Version    #指定备份路径下,生成版本号文件夹,来管理当前对应版本号的内容
    if [ ! -d "$VersionPath" ]; then
        mkdir -p "$VersionPath"
        errorExit $? "!!!错误!!!${BackupPath} 生成错误!"
        echo "创建文件夹:$Version"
    fi

    echo "删除之前生成的文件内容"
    BackupPath=$VersionPath/$BackupName #指定备份路径下,生成不同设备的文件夹
    rm -rf "$BackupPath" #删除之前生成编译包,每个版本只可能有一个发布包
    errorExit $? "!!!错误!!!${BackupName}删除出错"

    mkdir -p "$BackupPath"  #再次生成保存编译包文件夹
    errorExit $? "!!!错误!!!${BackupPath} 生成错误!"

    mv $LogBuildName $BackupPath
    errorExit $? "!!!错误!!!移动打包日志到:${BackupPath} 错误!"

    cp -rf build/$configurationType-iphoneos/* $BackupPath  #复制 app和dsym 文件备份
    errorExit $? "!!!错误!!!${checkItem}"
    echo "E结束${checkItem},正确."

    checkItem="压缩一个app的zip文件,用来上传到appstore用"
    ((ITEMLINENUMBER ++))
    echo -e " ${ITEMLINENUMBER}.=========================S开始:${checkItem}========================="
    cd $BackupPath  #进入到版本号文件内容
    zip -r "${ZipName}.zip" $ZipName 1>/dev/null
    errorExit $? "!!!错误!!!${checkItem}"
    echo "E结束${checkItem},正确."

    echo -e " *********************************************************"
    echo -e "打包内容可以通过以下网址访问到:"
    echo -e "${outAppUrl}/${Version}/${BackupName}"
    echo -e " 或者通过mac下的'Finder'->'前往'->'链接服务器'->'${outAppAfp}/${Version}/${BackupName}'->使用来宾客户登录即可"

  • 相关阅读:
    struts2第一天——入门和基本操作
    eclipse各种小图标含义
    复制web项目时注意修改web项目名
    AndroidCityPicker仿IOS选择效果
    每日五题(Spring)
    block-循环引用
    给EasyUi的Form加入自己主动填充部分输入框的方法
    智能停车O2O 独角兽初现:“ETCP停车”获5000万美金A轮融资
    解决移动端页面滚动后不触发touchend事件
    《从零開始学Swift》学习笔记(Day 61)——Core Foundation框架之内存管理
  • 原文地址:https://www.cnblogs.com/isItOk/p/5304234.html
Copyright © 2011-2022 走看看