iOS使用脚本批量打渠道包

  最近咱们接到了新的需求,须要打出相似xx001-xx100共100个这样的ipa渠道包,不须要签名。(这批ipa包后续会用企业证书签名,不会影响AppStore的)

  这些包全部的功能、内容都是同样的,区别在于不一样的包在统计、链接咱们服务器时会提供一个不一样的字符串标示。

  若是按照常规的打包方式,咱们须要不断的修改工程中的值,而后一个个打包……这种毫无技术含量的活怎么能忍受!

  简单思考以后能够想到,咱们能够经过使用shell脚原本实现批量打包,渠道信息能够保存在应用的info.plist里面。

  批量处理思路:

  1. 经过改变某个设置或变量,引发工程中info.plist中某个值改变

  2. 使用xcodebuild命令进行打包等处理

  细分的话其实又能够有几种作法:

  1.使用多个target

  这种的优势是能够更深度的定制信息

  缺点是对于咱们这种简单需求来讲,操做略繁琐,代价较高。

  脚本和下面的2相似,只是变量是target而已。

  2.使用多个buildSetting

  不一样的build active architecture 设置不一样的User-Defined值

  初版脚本由个人同事提供,采用的就是这种方式,比上面那种方式稍微简单了点

  思路和步骤以下:

  1. 在Xcode的build设置中,经过拷贝release生成多个build active architecture,分别以渠道名命名

  2. User-Defined属性下增长名为Channel的key,针对不一样的build设置不一样的渠道值

  3. info.plist中增长Channel键,值引用User-Defined下的设置${Channel}

  (因为方案不够完美,该脚本就不在此贴出了)

  当我看到这种方案的时候其实仍是不知足的,由于须要改动工程配置等相关信息,仍是很麻烦。

  对于咱们来讲,打出来的包其实只有info.plist中一个预设的值不同而已,其实能够不须要那么多的target或者那么多的buildsetting,只须要在打包时,用脚本改一下info.plist中对应的键值便可。

  查找资料发现,命令修改plist值已经有内置的工具PlistBuddy,不过这工具使用时须要使用其绝对路径才能引用到,路径为/usr/libexec/PlistBuddy,工具的更多功能有兴趣的能够本身搜一下。

  调整后,脚本为:

  channels=( 渠道1 渠道2 渠道3 )

  for i in ${channels[@]}

  do

  xcodebuild -project ./你的工程。xcodeproj -scheme 你的scheme名称 -configuration Release archive -archivePath ./$i

  /usr/libexec/PlistBuddy -c "Set :Channel ""$i" ./$i.xcarchive/Products/Applications/*.app/info.plist

  rm -Rf ./$i.ipa

  xcodebuild -exportArchive —exportFormat ipa -archivePath ./archive.xcarchive -exportPath ./$i.ipa -exportWithOriginalSigningIdentity

  rm -Rf ./$i.xcarchive

  done[/code]

  好了,完事具有,能够批量打包了

  打包没有问题,嗯,不过好像很费时间啊……

  回过头来咱们再分析下打包流程:

  1. 使用xcodebuild命令根据工程生成xcarchive文件

  2. 使用xcarchive文件导出ipa,此过程当中能够签名

  对于一次打包过程来讲,期间生成了xx.xcarchive文件,这个文件此时尚未进行任何的签名之类的操做,其实咱们能够直接修改这个xcarchive包中对应app文件内的plist,而后再导出成ipa,这样就能够共用一个xcarchive文件,节省下了N屡次打包出该文件的时间。

  好了调整一下获得咱们的最终版:

  xcodebuild -project ./你的工程。xcodeproj -scheme 你的scheme名称 -configuration Release archive -archivePath ./archive

  channels=( 渠道1 渠道2 渠道3 )

  for i in ${channels[@]}

  do

  /usr/libexec/PlistBuddy -c "Set :Channel ""$i" ./archive.xcarchive/Products/Applications/*.app/info.plist

  rm -Rf ./$i.ipa

  xcodebuild -exportArchive —exportFormat ipa -archivePath ./archive.xcarchive -exportPath ./$i.ipa -exportWithOriginalSigningIdentity

  done

  rm -Rf ./archive.xcarchive[/code]

  须要注意的是

  1. 项目的info.plist文件中要提早设置一个Channel的键,值写上默认渠道。

  2. 工程中相应的证书等仍是要配置好,不然可能打包失败

  3. 本文中打出来的ipa都是未签名的,须要签名的话自行搜索下,比较简单

  将这脚本保存为archive文件,丢在工程目录下,使用方式:

  打开终端,执行两行命令

  cd 你的工程目录[/code]

  ./archive[/code]

  好了,打完收工,这样你在工程中,使用

  NSString* channel = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"Channel"];[/code]

  拿到的就是渠道信息了。

相关文章
相关标签/搜索