假设现在有个需求,就是打出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文件,复制过来用即可。
网友评论