iOS 自动化打包–(手动运行xcodebuild命令)核心代码
echo "=================1.创建环境及一些文件路径================="
# 创建一个 output 路径文件夹,用户存储所有任务下的项目文件
# $HOME表示 Jenkins 的主目录
OUTPUT_PATH="OUTPUT_PATH路径"
echo $OUTPUT_PATH
if [ ! -d $OUTPUT_PATH ]; then
mkdir $OUTPUT_PATH
fi
# 创建当前任务下的 项目文件 环境
# ${JOB_NAME} 表示当前任务名称
JOB_NAME_PATH="$OUTPUT_PATH/${JOB_NAME}/ios"
echo $JOB_NAME_PATH
if [ ! -d $JOB_NAME_PATH ]; then
mkdir $JOB_NAME_PATH
fi
# 项目工程名
APP_NAME="Name" #替换成你的项目工程名
# 项目中 info.plist 路径(注意和你项目中对应的世纪路径)
# Jenkins 会拉取项目代码,到 workspace 目录下
#project_infoplist_path="$HOME/Home/workspace/${JOB_NAME}/${JOB_NAME}/ios/${APP_NAME}/Info.plist"
# 获取项目的版本号,用于创建版本文件夹,以此区分不同版本下的打包文件
#bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
# 要上传的 ipa 文件路径,区分了版本
#IPA_PATH="${JOB_NAME_PATH}/${bundleShortVersion}(${BUILD_ID})"
IPA_PATH="${JOB_NAME_PATH}/build"
if [ -d $IPA_PATH ];then
echo "文件存在,并删除文件夹内所有文件"
rm -rf $IPA_PATH/*
fi
# 创建 ipa 路径文件夹
if [ ! -d $IPA_PATH ];then
echo '文件夹11111111'
mkdir $IPA_PATH
else
echo '文件夹222'
fi
# archive 文件路径,在步骤5中使用
ARCHIVE_PATH="${IPA_PATH}/${APP_NAME}_${BUILD_ID}.xcarchive"
echo "=================2.进入工程目录================="
cd $HOME/.jenkins/workspace/${JOB_NAME}/ios
# xcodebuild -list 命令可以查看工程的:Targets、Configurations、Schemes
pwd
echo "=================3.清理工程================="
# xcodebuild 是 Xcode 打包命令
xcodebuild clean -target "${APP_NAME}" -configuration 'Release'
echo "=================4.解锁钥匙串================="
#解决:codesign"seckey api returned: -25308,(null)"
# *** 是一般为电脑登录密码,这里读取了 Jenkins 下的 Library 中的 Keychains ,或者钥匙串中证书--显示简介--访问控制--设置成允许所有应用程序访问此项目
security unlock-keychain -p "开机密码" "${HOME}/Library/Keychains/login.keychain-db"
echo "=================5.开始打包生成 xcarchive 文件================="
# 在xcode中设置scheme为shared,否则可能出现工程无scheme的错误
# 还可以添加其他参数,不设置的都是默认使用项目Build Settings里面的配置,包括 CODE_SIGN_IDENTITY 和 PROVISIONING_PROFILE
# 如果是使用了cocopods的workspace,可将 -project 替换为 -workspace , .xcodeproj 替换为 .xcworkspace
xcodebuild archive -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -configuration "Release" -archivePath "${ARCHIVE_PATH}"
CODE_SIGN_IDENTITY="iPhone Distribution:XXX"
PROVISIONING_PROFILE="XXX"
echo "=================6.从xcarchive文件中导出 ipa ================="
# 项目中的plist文件,主要是描述了导入的 ipa 使用的发布证书和配置文件
xcodebuild -exportArchive -archivePath $ARCHIVE_PATH -exportPath "${IPA_PATH}" -exportOptionsPlist "${JOB_NAME_PATH}/ExportOptions.plist" CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${PROVISIONING_PROFILE}"
echo "=================7.压缩Online.app.dSYM文件夹 ================="
datatime=$(date +'%Y.%m.%d')
cd $IPA_PATH
cp -r "${APP_NAME}_${BUILD_ID}.xcarchive/dSYMs/$APP_NAME.app.dSYM" "$APP_NAME.app.dSYM"
zip -r "$APP_NAME.app.dSYM-${BUILD_ID}-$datatime.zip" "$APP_NAME.app.dSYM"
echo "=================8.ipa安装包上传到蒲公英发布平台 ================="
PASSWORD=123456
curl -F "file=@${IPA_PATH}/${APP_NAME}.ipa" \
-F "uKey=$uKey" \
-F "_api_key=$_api_key" \
-F "buildUpdateDescription=${BUILD_USER}-$gitBranch-${GIT_COMMIT}" \
-F "buildInstallType=2" \
-F "buildPassword=${PASSWORD}" \
https://www.pgyer.com/apiv2/app/upload