#!/bin/bash
#set -ex
#source ~/.bash_profile
#export PPL_SVN_URL='_ios.git?branch=master_archive'
#export PPL_VERNO='45.0.0'
#export vt2_global_id='null'
#export vt2_runpipeline_id='11257288'
#export scm_url='_ios.git?branch=master_archive'
#export vt2_pipeline_name='iOSApp'
#export branch='master'
#export PPL_SUB_SYS='-DR'
#export JOB_PIPELINE_ID='11257288'
#export scm_branch_0='master_archive'
#export vt2_runjob_id='82102014'
#export vt2_project_id='9550'
#export vt2_runpipeline_seq='509284#35'
#export vt2_pipeline_version='45.0.0'
#export scm_type_0='GIT'
#export scm_revision_0='73b5e55bc97f0e847827d17f89c9cbe35bae713a'
#export vt2_unique_suffix='509284-82102014'
#export PPL_SVN_URL_0='_ios.git?branch=master_archive'
#export vt2_workspace_root_path='/Users/admin/prd/slavec2/run_slave/works/core_pipeline_id_509284/core_job_id_4162840/'
#export scm_revision='73b5e55bc97f0e847827d17f89c9cbe35bae713a'
#export scm_url_0='code.paic.com.cn/insurance/i…'
#export vt2_corejob_id='4162840'
#export PPL_BASE_REVISION='1'
#export vt2_corepipeline_id='509284'
#export PPL_SVN_VERSION_0='73b5e55bc97f0e847827d17f89c9cbe35bae713a'
#export scm_branch='master_archive'
#export vt2_subsys_name='ICP-DR'
#export scm_type='GIT'
#export PPL_SVN_VERSION='73b5e55bc97f0e847827d17f89c9cbe35bae713a'
#find /Users/admin/prd/slavec2/run_slave/works/core_pipeline_id_509284/core_job_id_4162840/ -name "*.ipa" -and -type f -exec rm -rf {} ;
#find /Users/admin/prd/slavec2/run_slave/works/core_pipeline_id_509284/core_job_id_4162840/ -name "*.xcarchive" -and -type f -exec rm -rf {} ;
##先执行 xcodebuild -showsdks 和 xcodebuild -version,给用户后续打包做必要指引
#xcodebuild -showsdks
#xcodebuild -version
#.xcproject的名字,必填
workspace_name="xxx.xcworkspace"
#指定项目的scheme名称(也就是工程的scheme名称),必填
scheme_name="XXXProject"
plistbuddy="/usr/libexec/PlistBuddy"
#指定要打包编译的方式 : Release,Debug。一般用Release。必填
build_configuration="Debug"
if [ ${ENV_TYPE} -eq 1 ]; then
build_configuration="Release"
echo "当前是生产环境"
fi
if [ ${ENV_TYPE} -eq 2 ]; then
build_configuration="Release"
echo "当前是灰度"
fi
#MacOS 系统 SDK 版本
iphoneos_version="iphoneos14.3"
#method,打包的方式。方式分别为 app-store,ad-hoc,enterprise 和 development。此处神兵生产打包用 enterprise。 必填
method="enterprise"
#下面两个参数只是在手动指定Pofile文件的时候用到,如果使用Xcode自动管理Profile,直接留空就好
#(跟method对应的)mobileprovision文件名,需要先双击安装.mobileprovision文件.手动管理Profile时必填
#mobileprovision_name="e43c9cf1-084f-4cd4-9006-2bfed244739e"
#mobileprovision_name="fc63f41b-c381-4fdb-915f-247438f0a3a8"
mobileprovision_name="6b9f80f6-e637-4ac0-be7d-dc02a00dbda7"
#项目的bundleId,手动管理Profile时必填
bundle_identifier="com.xxx.xxx"
#证书名称
codde_sign_identify_name="iPhone Distribution: Ping An Life Insurance Co., Ltd."
DATE=date +%Y%m%d%H%M
echo "--------------------脚本配置参数检查--------------------"
echo "workspace_name = $workspace_name"
echo "scheme_name = $scheme_name"
echo "build_configuration = $build_configuration"
echo "bundle_identifier = $bundle_identifier"
echo "method = $method"
echo "mobileprovision_name = $mobileprovision_name "
#=======================脚本的一些固定参数定义(无特殊情况不用修改)====================== #
#工程根目录
project_dir=pwd
#配置文件目录
pbxproj_dir_path="$project_dir/ZNSLProject/ZNSLProject.xcodeproj"
plist_dir_path="$project_dir/ZNSLProject/ZNSLProject"
buildNumber_path="$project_dir/ZNSLProject/ZNSLProject/Insured"
#指定输出导出文件夹路径
export_path="$project_dir/export"
#指定output路径
export_output_path="$export_path"
#指定输出归档文件路径
export_archive_path="scheme_name.xcarchive"
#指定输出ipa文件夹路径
export_ipa_path="target_name.ipa"
export_dsym_path="$export_output_path/dSYM.zip"
export_compileInfo_path="$export_output_path/compileInfo.zip"
#指定导出ipa包需要用到的plist配置文件的路径
export_options_plist_path="ExportOptions.plist"
echo "创建打包过程输出文件output目录 "$export_output_path
mkdir -p $export_output_path
echo "开始前:ls -alth $export_output_path:"
ls -alth $export_output_path
cd $buildNumber_path
temp_path=pwd
echo "设置版本号的路径:$temp_path"
sed -i "" "s/xxx_buildNumber_xxx/构建号:{vt2_runpipeline_seq#*#}_DATE/g" ZNSLInsuredViewController.m
sed -i "" "s/buildNumberLabel.hidden = YES;/buildNumberLabel.hidden = NO;/g" ZNSLInsuredViewController.m
cd ..
sed -i "" "s/xxx_buildNumber_xxx/{vt2_runpipeline_seq#*#}_DATE/g" AppDelegate.m
echo "--------------------脚本固定参数检查--------------------"
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_dsym_path = "$export_dsym_path
echo "export_options_plist_path = "$export_options_plist_path
#echo "user_config_archive_path = "$user_config_archive_path
#=======================自动打包部分(无特殊情况不用修改)====================== #
echo "------------------------------------------------------"
echo "开始构建项目 "
#修改配置文件
cd $plist_dir_path
temp_path=pwd
echo "修改plist路径:$temp_path"
fn="Info.plist"
plistbuddy -c "Set CFBundleIdentifier \"bundle_identifier"" $fn
cd $pbxproj_dir_path
temp_path=pwd
echo "修改pbxproj路径:$temp_path"
fn="project.pbxproj"
sed -i "" "s/CODE_SIGN_STYLE = .*/CODE_SIGN_STYLE = Manual;/g" $fn
sed -i "" "s/ProvisioningStyle = .*/ProvisioningStyle = Manual;/g" $fn
sed -i "" "s/CODE_SIGN_IDENTITY = .*/CODE_SIGN_IDENTITY = "fn
sed -i "" "s/"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ".*"/"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "fn
sed -i "" "s/PROVISIONING_PROFILE_SPECIFIER = .*/PROVISIONING_PROFILE_SPECIFIER = fn
sed -i "" "s/PRODUCT_BUNDLE_IDENTIFIER = .*/PRODUCT_BUNDLE_IDENTIFIER = fn
sed -i "" "s/DEVELOPMENT_TEAM = .*fn
#进入项目工程目录
cd $project_dir
#指定输出文件目录不存在则创建
if [ -d "$export_path" ];
then rm -rf "$export_path"
fi
#编译前清理工程
xcodebuild clean -workspace $workspace_name \
-scheme $scheme_name \
-configuration $build_configuration
xcodebuild archive -workspace $workspace_name \
-scheme $scheme_name \
-configuration $build_configuration \
-sdk $iphoneos_version \
-archivePath $export_archive_path \
\
\
-quiet
#检查是否构建成功
#xcarchive 实际是一个文件夹不是一个文件所以使用 -d 判断
if [ -d "$export_archive_path" ] ; then
echo "项目构建成功 🚀 🚀 🚀 "
else
echo "项目构建失败 😢 😢 😢 "
exit 1
fi
echo "------------------------------------------------------"
echo "开始导出ipa文件 "
先删除export_options_plist文件
#if [ -f "$export_options_plist_path" ] ; then
#echo "$export_options_plist_path文件存在,进行删除"
#rm -f $export_options_plist_path
#fi
# # 用户自定义的 导出 ipa 文件的 plist文件绝对路径
# user_config_export_plist_abs_path="/Users/admin/prd/slavec2/run_slave/works/core_pipeline_id_509284/core_job_id_4162840//UserConfigExport.plist"
# echo "$user_config_export_plist_abs_path 文件存在,内容如下:"
# cat $user_config_export_plist_abs_path
# export_options_plist_path=$user_config_export_plist_abs_path
#echo "开始打印 ExportOptions.plist 文件:"
#cat $export_options_plist_path
xcodebuild -exportArchive \
-archivePath $export_archive_path \
-exportPath scheme_name.ipa \
-exportOptionsPlist $export_options_plist_path \
-allowProvisioningUpdates
if [ -d $export_archive_path ] ; then
cd $export_archive_path
echo "开始压缩dsym:$export_archive_path/dSYMs"
zip -r -T "$export_dsym_path" "./dSYMs"
else
echo "没有dsym文件夹"
fi
#删除export_options_plist文件(中间文件)
if [ -f "$export_options_plist_path" ] ; then
echo "$export_options_plist_path 文件存在,准备删除"
rm -f $export_options_plist_path
fi
echo "导出配置信息,方便查看编译出的结果是如何配置的"
cd $project_dir
fn="compileInfo.plist"
if [ -f $fn ];
then
plistbuddy -c "Set ENV_TYPE \"{ENV_TYPE}"" $fn
plistbuddy -c "Set BUILD_SDK \"{BUILD_SDK}"" $fn
plistbuddy -c "Set SDK_NAME \"{SDK_NAME}"" $fn
plistbuddy -c "Set GIT_BRANCH \"{GIT_BRANCH}"" $fn
zip -r -T $export_compileInfo_path "./compileInfo.plist"
mv export_output_path/${GIT_BRANCH}_info.zip"
echo "压缩编译信息到输出目录"
else
echo "没有编译信息"
fi
env_name=""
#根据打包环境,设置不同的包名
if [ ${ENV_TYPE} -eq 0 ]; then
env_name="Debug"
echo "当前是Debug环境"
fi
if [ ${ENV_TYPE} -eq 1 ]; then
env_name="Release"
echo "当前是Release环境"
fi
if [ ${ENV_TYPE} -eq 2 ]; then
env_name="Gray"
echo "当前是Gray环境"
fi
mv scheme_name.ipa/export_ipa_path/scheme_name-$env_name.ipa
#输出打包总用时
echo "本次打包用时: $SECONDS s"
exit 0