Jenkins iOS自动打包之 xcode自动化打包和ipa包生成,相关脚本如下:
#bin/bsah - l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
/usr/local/bin/pod install
#!/bin/sh
# 工程名称(必填)
workspace_name="your_app_name"
# 指定项目的scheme名称(必填) app_release 、app_test 、app
scheme_name=${schemeType}
# 指定要打包编译的方式 : Debug、Test,Release(必填)
# build_configuration=${buildType}
# method,打包的方式。方式分别为 development, ad-hoc(必填)
#method=${methodType}
# 项目的bundleID,手动管理Profile(必填)
bundle_identifier=""
# 下面两个参数只是在手动指定Pofile文件的时候用到,如果使用Xcode自动管理Profile,直接留空就好
#(跟method对应的)mobileprovision文件名,需要先双击安装.mobileprovision文件.手动管理Profile时必填
# 最终形成的api包的名称,有的是上面workspace_name或者scheme_name一样的,但是我项目名称是固定的
ipa_name="FetaphonHome"
mobileprovision_name=""
build_configuration=""
if [ ${schemeType} == "app" ] ; then
method="development"
build_configuration="Debug"
elif [ ${schemeType} == "app_release" ] ; then
#method="development" #可设置,生成环境的开发包,用于上传蒲公英测试
method="app-store" #上传app-store的包
build_configuration="Release"
elif [ ${schemeType} == "app_test" ] ; then
method="development"
build_configuration="Test"
fi
#echo "--------脚本配置参数检查-----------"
echo "-------- Script configuration parameter check -----------"
echo "workspace_name = ${workspace_name}"
echo "scheme_name = ${scheme_name}"
echo "build_configuration = ${build_configuration}"
echo "method = ${method}"
echo "bundle_identifier = ${bundle_identifier}"
echo "mobileprovision_name = ${mobileprovision_name}"
# ==========脚本的一些固定参数定义(基本不需要修改)======== #
# 获取当前脚本所在目录
#script_dir="$WORKSPACE/$workspace_name"
script_dir="$WORKSPACE"
# 工程根目录
project_dir=$script_dir
# 指定输出导出文件夹路径
export_path="$project_dir/Build"
# 指定输出归档文件路径
export_archive_path="$export_path/$scheme_name.xcarchive"
# 指定输出ipa文件夹路径
export_ipa_path="$export_path"
# 指定导出ipa包需要用到的plist配置文件的路径
export_options_plist_path="$project_dir/ExportOptions.plist"
#echo "--------脚本参数检查-----------"
echo "-------- Script parameter check -----------"
echo "project_dir = ${project_dir}"
echo "export_path = ${export_path}"
echo "export_archive_path = ${export_archive_path}"
echo "export_ipa_path = ${export_ipa_path}"
echo "export_options_plist_path = ${export_options_plist_path}"
# =======================自动打包部分(无特殊情况不用修改)====================== #
echo "------------------------------------------------------"
#echo "开始构建项目"
echo "start building project"
# 进入项目工程目录
cd ${project_dir}
# 指定输出文件目录不存在则创建
if [ -d "$export_path" ] ; then
chmod +x $export_path
rm -rf "$export_path"
else
mkdir $export_path
fi
# 编译前清理工程
xcodebuild clean -workspace ${workspace_name}.xcworkspace -scheme ${scheme_name} -configuration ${build_configuration} -UseModernBuildSystem=YES
#编译工程
xcodebuild archive -workspace ${workspace_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${build_configuration} \
-archivePath ${export_archive_path}
# 检查是否构建成功
# xcarchive 实际是一个文件夹不是一个文件所以使用 -d 判断
if [ -d "$export_archive_path" ] ; then
#echo "项目构建成功"
echo "Successful project construction"
else
#echo "项目构建失败"
echo "Project build failed"
exit 1
fi
echo "------------------------------------------------------"
#echo "开始导出ipa文件"
echo "Start exporting IPA files"
# 先删除ExportOptions.plist文件
if [ -f ${export_options_plist_path} ] ; then
rm -f ${export_options_plist_path}
fi
#生成ExportOptions.plist文件,这个平常手动打包成功导出ipa包时就可以看到
/usr/libexec/PlistBuddy -c 'Add :provisioningProfiles:'${bundle_identifier}' string '${mobileprovision_name}'' $export_options_plist_path
/usr/libexec/PlistBuddy -c 'Add :method string '${method}'' $export_options_plist_path
/usr/libexec/PlistBuddy -c 'Add :compileBitcode bool NO' $export_options_plist_path
#导出ipa包
xcodebuild -exportArchive -archivePath ${export_archive_path} -exportPath ${export_ipa_path} -exportOptionsPlist ${export_options_plist_path} -allowProvisioningUpdates
# 检查文件是否存在
if [ -f "$export_ipa_path/${ipa_name}.ipa" ] ; then
echo "export ${ipa_name}.ipa Successful"
open $export_ipa_path
else
echo "export ${ipa_name}.ipa failed"
exit 1
fi
# 删除export_options_plist文件(中间文件)
if [ -f "$export_options_plist_path" ] ; then
echo "${export_options_plist_path} File exists, ready to delete"
rm -f $export_options_plist_path
fi
# 输出打包总用时
#echo "使用AutoPackageScript打包总用时: ${SECONDS}s"
echo "Total packaging time using autopackagescript: ${SECONDS}s"
#echo -e "打包成功"
echo -e "Package succeeded"