#!/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="[email protected]" #程序高清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=" 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 "\n\n${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 "\n\n${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 "\n\n${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 "\n\n${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 "\n\n${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 "\n\n${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 "\n\n${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 "\n\n${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 "\n\n${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
echo $WebtrendsFlag
grep "$WebtrendsFlag" $WebtrendsFlagName 1>/dev/null
errorExit $? "!!!错误!!!,找不到对应的${WebtrendsFlag}"
echo "E结束${checkItem}检查,正确."
checkItem="全局配置 正常入口 "
((ITEMLINENUMBER ++))
echo -e "\n\n${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
echo $GlobalstgEntrance
grep "$GlobalstgEntrance\>" $GlobalName
errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
echo "E结束${checkItem}检查,正确."
checkItem="全局配置 生产发布环境 "
((ITEMLINENUMBER ++))
echo -e "\n\n${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
echo $GlobalPA_ENVIRONMENT
grep "$GlobalPA_ENVIRONMENT\>" $GlobalName
errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
echo "E结束${checkItem}检查,正确."
checkItem="网络配置 正常入口 "
((ITEMLINENUMBER ++))
echo -e "\n\n${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
echo $NetEntrance
grep "$NetEntrance\>" $NetControllerHName
errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
echo "E结束${checkItem}检查,正确."
checkItem="网络配置 正常生产环境 "
((ITEMLINENUMBER ++))
echo -e "\n\n${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
echo $NetProType
grep "$NetProType\>" $NetControllerHName
errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
echo "E结束${checkItem}检查,正确."
checkItem="网络配置 App config "
((ITEMLINENUMBER ++))
echo -e "\n\n${ITEMLINENUMBER}.=========================S开始检查:${checkItem}========================="
echo $NetAppConfig
grep "$NetAppConfig\>" $NetControllerMName
errorExit $? "!!!错误!!!,找不到对应的${checkItem}"
echo "E结束${checkItem}检查,正确."
checkItem="打包Base SDK"
((ITEMLINENUMBER ++))
echo -e "\n\n${ITEMLINENUMBER}.=========================S打包信息:${checkItem}========================="
echo $iosSDK
checkItem="打包iOS Deployment Target"
((ITEMLINENUMBER ++))
echo -e "\n\n${ITEMLINENUMBER}.=========================S打包信息:${checkItem}========================="
echo $DEPLOYMENTTARGET
checkItem="打包Build Configuration"
((ITEMLINENUMBER ++))
echo -e "\n\n${ITEMLINENUMBER}.=========================S打包信息:${checkItem}========================="
echo $configurationType
checkItem="打包Architectures"
((ITEMLINENUMBER ++))
echo -e "\n\n${ITEMLINENUMBER}.=========================S打包信息:${checkItem}========================="
echo $ARCHSType
checkItem="清除编译文件"
((ITEMLINENUMBER ++))
echo -e "\n\n${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 "\n\n${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 "\n\n${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 "\n\n${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 "\n\n${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 "\n\n${ITEMLINENUMBER}.=========================S开始:${checkItem}========================="
cd $BackupPath #进入到版本号文件内容
zip -r "${ZipName}.zip" $ZipName 1>/dev/null
errorExit $? "!!!错误!!!${checkItem}"
echo "E结束${checkItem},正确."
echo -e "\n\n*********************************************************"
echo -e "打包内容可以通过以下网址访问到:"
echo -e "${outAppUrl}/${Version}/${BackupName}"
echo -e "\n或者通过mac下的'Finder'->'前往'->'链接服务器'->'${outAppAfp}/${Version}/${BackupName}'->使用来宾客户登录即可"