##!/bin/bash -ilex
#set -u
set +v
set +xe
#set +x
#注意:脚本目录和xxxx.xcodeproj要在同一个目录,如果放到其他目录,请自行修改脚本。
#要build的target名
TARGET_NAME=CCPiPhoneSDK
#################################
PROJECT_NAME=$TARGET_NAME
### 打包模式 Debug/Release 默认是Release
DEVELOPMENT_MODE=Release
SCRIPT_DIR=$(pwd)
PROJECT_DIR=$SCRIPT_DIR
BUILD_DIR=$SCRIPT_DIR/Build
#真机build生成的头文件的文件夹路径
DEVICE_DIR_INCLUDE=./${PROJECT_NAME}/Device
#真机build生成的.a文件路径
DEVICE_DIR_A=${BUILD_DIR}/${DEVELOPMENT_MODE}-iphoneos/lib${PROJECT_NAME}.a
#模拟器build生成的.a文件路径
SIMULATOR_DIR_A=${BUILD_DIR}/${DEVELOPMENT_MODE}-iphonesimulator/lib${PROJECT_NAME}.a
#目标文件夹路径(也就SDK的文件:.a文件 和 头文件)
INSTALL_DIR=${BUILD_DIR}/Products/${PROJECT_NAME}
#目标头文件的文件夹路径
INSTALL_DIR_Headers=${BUILD_DIR}/Products/${PROJECT_NAME}/Headers
#目标.a路径
INSTALL_DIR_A=${BUILD_DIR}/Products/${PROJECT_NAME}/lib${PROJECT_NAME}.a
printlog () {
TIME=$(date +%F_%T)
if [ $1 == "info" ];then
echo -e "\n[$TIME][INFO] $2 \n"
elif [ $1 == "error" ];then
echo -e "\n[$TIME][ERROR] ****** $2 ******\n"
elif [ $1 == "warn" ];then
echo -e "\n[$TIME][WARN] $2 \n"
else
echo -e "\nprintlog parameter error.\n"
fi
}
check_result() {
if [ $? -eq 0 ];then
printlog info "$* 成功"
else
printlog error "$* 失败"
exit 250
fi
}
###################################################################
info () {
printlog info "Current TarGet_Name: $TARGET_NAME"
printlog info "打包模式: $DEVELOPMENT_MODE"
printlog info "工程名称: $PROJECT_NAME"
printlog info "脚本路径: $SCRIPT_DIR"
printlog info "工程路径: $PROJECT_DIR"
printlog info "Build路径: $BUILD_DIR"
printlog info "真机build生成的头文件的文件夹路径: $DEVICE_DIR_INCLUDE"
printlog info "真机.a路径: ${DEVICE_DIR_A}"
printlog info "模拟器build生成的.a文件路径: $SIMULATOR_DIR_A"
printlog info "SDK的文件夹路径: ${INSTALL_DIR}"
printlog info "头文件的文件夹路径: ${INSTALL_DIR_Headers}"
printlog info "目标.a路径: ${INSTALL_DIR_A}"
}
###################################################################
ready() {
printlog info "编译前准备..."
sleep 3
printlog info "判断${BUILD_DIR}是否存在,存在即删除."
if [ -d "${BUILD_DIR}" ]
then
rm -rf "${BUILD_DIR}"
fi
printlog info "判断${INSTALL_DIR} 是否存在,存在即删除.并重新创建目录${INSTALL_DIR}"
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
printlog info "准备完成."
}
compile () {
###################################################################
printlog info "编译开始..."
#echo "======盒子已经准备好了,开始生产.a 并合成装到盒子里吧======"
#build之前clean一下
xcodebuild -target ${target_Name} -configuration ${development_mode} -sdk iphonesimulator clean
xcodebuild -target ${target_Name} -configuration ${development_mode} -sdk iphoneos clean
printlog info "模拟器build"
xcodebuild -target ${TARGET_NAME} -configuration ${DEVELOPMENT_MODE} -sdk iphonesimulator #1>/dev/null
check_result "模拟器build"
printlog info "真机build"
xcodebuild -target ${TARGET_NAME} -configuration ${DEVELOPMENT_MODE} -sdk iphoneos #1>/dev/null
check_result "真机build"
printlog info "编译完成."
sleep 3
###################################################################
printlog info "编译后操作"
printlog info "复制头文件到目标文件夹"
cp -R "${DEVICE_DIR_INCLUDE}" "${INSTALL_DIR_Headers}"
printlog info "合成模拟器和真机.a包"
if [ -f "${SIMULATOR_DIR_A}" ];then
lipo -create "${DEVICE_DIR_A}" "${SIMULATOR_DIR_A}" -output "${INSTALL_DIR_A}" 1>/dev/null
check_result "合成"
else
printlog info "将真机包导入目标文件"
cp -R "${DEVICE_DIR_A}" "${INSTALL_DIR}"
fi
# -f 判断文件是否存在
if [ -f "${INSTALL_DIR_A}" ];then
printlog info "验证合成包是否成功"
lipo -info "${INSTALL_DIR_A}"
check_result "验证"
fi
printlog info "本次任务完成"
printlog info "打印最终文件路径: ${INSTALL_DIR}"
printlog info "列出目录下所有文件"
ls "${INSTALL_DIR}"
}
info
ready
compile
shell打包
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- android shell打包上传到蒲公英,如下图 Microsoft Windows [版本 10.0.1506...
- 打包示例 示例的打包工程和脚本我都放到git上,该示例是使用的企业证书打的企业包,如何打包其他类型证书的ipa,我...
- 前言 在上一篇文章中iOS自动化打包发布(一)介绍了如何使用Fastlane进行自动打包,但是笔者还是认为前期准备...
- 从事Android系统相关开发工作的coder肯定会是需要在Ubuntu系统下编译打包工作,包括android,k...