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]

  拿到的就是渠道信息了。

相關文章
相關標籤/搜索