iOS使用指令碼批量打渠道包

來源:互聯網
上載者:User

標籤:

  最近我們接到了新的需求,需要打出類似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]   拿到的就是渠道資訊了。

iOS使用指令碼批量打渠道包

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.