iOS自动化打包脚本1

111 阅读3分钟

#!/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="exportpath/export_path/scheme_name.xcarchive"

#指定输出ipa文件夹路径

export_ipa_path="exportoutputpath/export_output_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 =  "coddesignidentifyname;¨/g"{codde_sign_identify_name}\";/g" fn

sed -i "" "s/"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ".*"/"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "coddesignidentifyname/¨g"{codde_sign_identify_name}\"/g" fn

sed -i "" "s/PROVISIONING_PROFILE_SPECIFIER = .*/PROVISIONING_PROFILE_SPECIFIER = mobileprovisionname;/g"{mobileprovision_name};/g" fn

sed -i "" "s/PRODUCT_BUNDLE_IDENTIFIER = .*/PRODUCT_BUNDLE_IDENTIFIER = bundleidentifier;/g"{bundle_identifier};/g" fn

sed -i "" "s/DEVELOPMENT_TEAM = .*//g"//g" 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 exportipapath/export_ipa_path/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 exportcompileInfopath"export_compileInfo_path "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 exportipapath/export_ipa_path/scheme_name.ipa/schemename.ipascheme_name.ipa export_ipa_path/schemename.ipa/scheme_name.ipa/scheme_name-$env_name.ipa

#输出打包总用时

echo "本次打包用时: $SECONDS s"

exit 0