假设现在有个需求,就是打出100个包,每个包对应不同的渠道号。(一般有这种需求的大多为企业版app)这个渠道号可以在项目中info.plist添加一个key 和 value。如下:

image.png
项目中就可以直接使用[[[NSBundle mainBundle] infoDictionary] objectForKey:@"Channel"]
但是这样每打一个包就得改一下这个value重新打包,如果要打100个包那就太麻烦了。使用脚本就可以很好的解决这个问题了,原理就是每次打包时,执行脚本修改plist文件下Channel对应的值。
脚本如下(适用workspace,如:通过cocoapods等集成三方库的项目):
#clean build
xcodebuild -workspace ./打包的项目名字.xcworkspace -scheme 打包的scheme名字 -configuration Release clean build
#archive
xcodebuild -workspace ./打包的项目名字.xcworkspace -scheme 打包的scheme名字 -configuration Release archive -archivePath ./archive
#设置渠道号,例如channel_01、channel_02、channel_03……
channels=("channel_01" "channel_02" "channel_03")
for i in ${channels[@]}
do
#修改plist文件中渠道号key(例如:Channel)
/usr/libexec/PlistBuddy -c "Set :Channel "$i"" ./archive.xcarchive/Products/Applications/打包出来的app名字(一般同scheme).app/info.plist
#删除以渠道号名字命名的文件夹,防止下次打包时文件覆盖
rm -Rf ./$i
#导出ipa
xcodebuild -exportArchive —exportFormat ipa -archivePath ./archive.xcarchive -exportPath ./$i -exportOptionsPlist ExportOptions.plist
done
#for循环完成以后删除.xcarchive文件
rm -Rf ./archive.xcarchive
注意:ExportOptions.plist文件是需要自己创建的。也可以用Xcode Archive出来一个app导出目录里自动会生成一个ExportOptions.plist文件,复制过来用即可。
ExportOptions.plist文件内容一般如下:

image.png
如何使用?
1、新建一个.sh脚本文件(如:archive.sh)(不会?创建一个txt,保存为.sh就OK了)
2、复制上面的脚本内容到刚刚创建的.sh文件,修改脚本中对应项目名字
3、新建一个.plist文件(如:ExportOptions.plist)设置打包方式(不会,就先用Xcode 手动archive一个包,导出目录中会自动生成这个文件,拷贝过来用)
4、将.sh文件和.plist文件复制到你的工程目录(xcworkspace同级)
5、打开终端,cd到工程目录,执行./archive.sh即可(若提示:Permission denied说明没有读写权限,解决办法:执行chmod 777 archive.sh命令后重试)
完成以后就会在该目录生成对应的文件,例如:

image.png