Skip to content

Instantly share code, notes, and snippets.

@hjeffrey
Created August 4, 2015 08:42
Show Gist options
  • Save hjeffrey/55fb1894e6b055694bd0 to your computer and use it in GitHub Desktop.
Save hjeffrey/55fb1894e6b055694bd0 to your computer and use it in GitHub Desktop.
完成iOS app编译,打包ipa,上传ftp备份,发送邮件
#!/bin/sh
# build.sh
#
# Created by Jia Yuhui on 24/06/2015.
# Copyright 2015 Jia Yuhui. All rights reserved.
env=$1
sleepsecond=3
# 检查参数
if [[ -z "$env" ]]; then
echo "Default Release"
env="Release"
fi
# 配置参数
BUILD_SHELL_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd ${BUILD_SHELL_PATH}
cd ..
PROJDIR=~+
echo $PROJDIR
# 根据自己的证书和邮件地址配置下面的两个参数
# EMAIL_ADDRESS=邮箱
# DEVELOPPER_NAME=开发者证书,可在keychain里查看自己的开发证书
EMAIL_ADDRESS="xxx@gmail.com"
if [[ "$env" == "Release" ]]; then
PROJECT_BUILDDIR="Release-iphoneos"
DEVELOPPER_NAME="iPhone Developer: xxxxxx (xxxxx)"
elif [[ "$env" == "Debug" ]]; then
PROJECT_BUILDDIR="Debug-iphoneos"
DEVELOPPER_NAME="iPhone Developer: xxxxx (xxxxxx)"
fi
PROJECT_NAME="projectName"
TARGET_SDK="iphoneos8.4"
echo "Ctrl+C 可以停止脚本执行!!"
sleep $sleepsecond
echo "开始编译"
echo -------------Cleaning $PROJECT_NAME $env----------------
sleep $sleepsecond
xcodebuild clean -sdk "$TARGET_SDK" -configuration "$env" > ${PROJDIR}/shell.log
echo -------------Building $env----------------
sleep $sleepsecond
xcodebuild -target "$PROJECT_NAME" -sdk "$TARGET_SDK" -configuration "$env" CODE_SIGN_IDENTITY="$DEVELOPPER_NAME" > ${PROJDIR}/shell.log
if [ $? != 0 ]
then
echo Building $env error !!!
exit 1
fi
# 生产IPA
echo -------------Making IPA----------------
sleep $sleepsecond
# Set variables
BUILD_PATH="$PROJDIR/build"
APP_PATH="$BUILD_PATH/$PROJECT_BUILDDIR/$PROJECT_NAME.app"
APP_VERSION=`defaults read $APP_PATH/Info CFBundleShortVersionString`
APP_REVISION=`defaults read $APP_PATH/Info CFBundleVersion`
APP_NAME="iOS_V${APP_VERSION}_store_build${APP_REVISION}_$(date +%Y%m%d_%H%M)"
IPA_NAME="${APP_NAME}.ipa"
IPA_PATH="$PROJDIR/${IPA_NAME}"
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${APP_PATH}" -o "$IPA_PATH" > ${PROJDIR}/shell.log # --sign "$CERTIFICATE" --embed "$PROVISION"
if [ $? != 0 ]
then
echo Making IPA error !!!
exit 1
fi
echo -------------Zip dSYM----------------
sleep $sleepsecond
cd "$BUILD_PATH/$PROJECT_BUILDDIR"
APP_dSYM_NAME="$PROJECT_NAME.app.dSYM"
WIDGET_dSYM_NAME="Widget.appex.dSYM"
dSYM_NAME="$IPA_NAME.dSYM.zip"
dSYM_PATH="$PROJDIR/$dSYM_NAME"
zip -r -q "$dSYM_PATH" "$APP_dSYM_NAME" #"$WIDGET_dSYM_NAME"
if [ $? != 0 ]
then
echo Zip dSYM error !!!
exit 1
fi
# 删除编译文件
echo -------------Cleaning temp files----------------
sleep $sleepsecond
cd "$PROJDIR"
find . -name "build" -exec rm -rf {} \;
rm -r ${PROJDIR}/shell.log
# 上传文件
echo -------------Uploading to ftp----------------
read -p "上传到公司FTP服务器?(Yes/No)" updte
while [[ $updte != "Yes" && $updte != "No" ]]; do
echo "输入错误"
read -p "上传到公司FTP服务器?(Yes/No)" updte
done
if [[ $updte = "Yes" ]]; then
HOST='192.168.1.1'
USER='name'
PASSWD='password'
REMOTEDIR='ipaPath'
ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
type binary
cd $REMOTEDIR
put $dSYM_NAME
put $IPA_NAME
quit
END_SCRIPT
echo "IPA上传完成"
echo -------------Send Email----------------
sleep $sleepsecond
CONTENTFILE="$PROJDIR/$(date +%Y%m%d_%H%M).log"
echo "名称编号" >> $CONTENTFILE
echo ${APP_NAME} >> $CONTENTFILE
echo "ftp://$HOST/$REMOTEDIR/$IPA_NAME" >> $CONTENTFILE
echo "ftp://$HOST/$REMOTEDIR/$dSYM_NAME" >> $CONTENTFILE
UPDATECONTENT="${PROJDIR}/history.txt"
cat $UPDATECONTENT | while read LINE
do
echo $LINE >> $CONTENTFILE
done
EMAIL_TITLE="[发包邮件]${PROJECT_NAME}_iOS_${APP_VERSION}"
mail -s $EMAIL_TITLE $EMAIL_ADDRESS < $CONTENTFILE
if [ $? != 0 ]
then
rm -r $CONTENTFILE
echo Mail error !!!
exit 1
fi
rm -r $CONTENTFILE
elif [[ $updte = "No" ]]; then
echo "跳过上传步骤"
fi
echo "编译结束"
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment