iOS 批量打包总结(支持多target,自定义基于版本号和时间的ipa包名)

公冶谦
2023-12-01

在游戏开发中,每次版本发布,我们往往需要针对不同的渠道接入不同的SDK,打入不同的渠道资源,输出特定文件名格式的包并提交给渠道。Android在这方便尤其需要耗费很大的精力,iOS由于只需要针对Appstore,且最多两种包:广告包和付费包,所以省了不小力气。不过如果做一个自动打包的脚本,那么我们就可以从电脑前解放出来,少了些996,多些自我提升的时间。

下面给出一个模板

#!/bin/sh
# 你的xcode工程目录
project_path="/Users/用户名/Desktop/工程名"
# 工程编译出app后放置的目录
build_path="${project_path}/build/"
plist_path="${project_path}/Info.plist"

cd $project_path
#app文件名称, 使用shell命令basename,指定一个路径,basename命令会删掉所有的前缀包括最后一个'/'字符,然后将字符串显示出来
appname=$(basename ${project_path})

#获取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" ${plist_path})

#获取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" ${plist_path})

#获取当前时间
now=$(date +"%Y%m%d-%H:%M")

# target列表
TARGETS=("target1" "target2")

for (i=0;i<${#TARGETS[@]};i++)
do
	target_name=${TARGETS[$i]}
	echo ${target_name}
	
	#删除
	rm -rf ${build_path}
	
	#清除
  	xcodebuild -target ${target_name}  clean

    #编译
    xcodebuild -target ${target_name} -configuration Distribution -sdk iphoneos build

    #生成ipa
	ipa_name="${target_name}_${bundleShortVersion}_${bundleVersion}_${now}    
    xcrun -sdk iphoneos PackageApplication -v "${build_path}/Release-iphoneos/${appname}.app" -o "${build_path}/${ipa_name}.ipa"
done

值得一提的是还可以使用命令

/usr/libexec/PlistBuddy -c "set :键 值" ${plist_path}

来修改plist里的属性,以做一些自定义处理。

 类似资料: