成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS自動化的打渠道包解決方案

移動開發(fā) iOS 自動化
如今為每個渠道打包也成為特別耗費時間和體力的一項技術活了,而這一般大多數(shù)都是由rd來完成的。這樣就占用了rd很多的開發(fā)時間,何不把這些東西寫成一個自動化的腳本,然后交給qa 或是 pm來完成這個打包過程了。經(jīng)過一番調研發(fā)現(xiàn)網(wǎng)上這種腳本還是很少的,不過xcode 提供了shell編譯工具 xcodebuild 和 ipa打包工具xcrun ,這就有理由讓我們利用這兩個工具寫一個自動化的打包腳本來提高我們的工作效率和自動化程度。

1、背景

隨著ios程序發(fā)布的渠道逐漸的增多,為每個渠道打包也成為特別耗費時間和體力的一項技術活了,而這一般大多數(shù)都是由rd來完成的。這樣就占用了rd很多的開發(fā)時間,何不把這些東西寫成一個自動化的腳本,然后交給qa 或是 pm來完成這個打包過程了。經(jīng)過一番調研發(fā)現(xiàn)網(wǎng)上這種腳本還是很少的,不過xcode 提供了shell編譯工具 xcodebuild 和 ipa打包工具xcrun ,這就有理由讓我們利用這兩個工具寫一個自動化的打包腳本來提高我們的工作效率和自動化程度。

2、ios程序包格式、渠道包格式

1) 產生多渠道的原因及多渠道帶來的打包問題:隨著iphone、 ipad、itouch等手持設備火熱銷售,而它們上面的應用也隨之火爆了起來,而隨之而來的就是以上設備被越獄后就可以在越獄的設備上直接運行ipa程 序包 而不用通過appstore去下載,這樣一來國內就產生了眾多的專門為越獄手機而開設的渠道提供ipa程序包的下載。隨著越來越多的渠道,推廣時為各個渠道打包就成了一項比較耗費時間和精力的技術活了,因此我們必須尋找一種自動化的方式 讓打包變得高效簡單。

2) Ios程序包分為appstore二進制文件跟渠道包兩種格式

appstore二進制文件:通過xcode工具可以生成一個.app格式的二進制文件。

渠道包:格式為.ipa格式,在沒有自動化打包工具之前都是利用xcode來生成相應的渠道包,而且每次只能生成一個渠道包,每次打包之前都得手動該渠道ID,帶來的問題就是耗費時間、效率低下、容易出錯、增加風險。

3、傳統(tǒng)的ios打包方式

利用xcode 打包

1) appstore 二進制程序包

打開你的項目,進入“Edit Project Settings”,進入Configuration頁面,選中Release點擊下面的Duplicate,復制一個新的配置項出來,命名為 Distribution。然后進入Build頁面,頂上的Configuration下拉框選中Distribution,下面的Code Signing Identity里面的Any iPhone OS Device后面對應的值選中你的那個Distribution的證書。然后點擊“Build”–> “Build” 就可以編譯程序了

編譯成功后,你就可以在相應的build目錄下看到一個.app的二進制文件。

2) 渠道ipa包

根據(jù)以上步驟同樣配置好Distribution 證書 ,然后點擊 “Build”–> “Build and Archive” 就可以編譯程序了。接著打開“Window””Organizer” 左邊欄中選擇”ARCHIVED APPLICATIONS” 然后再右側列表中選中剛才編譯的程序包 再點擊右側右邊頂部的”Share”按鈕 保存到磁盤即可。就會生成一個.ipa的文件 即為渠道包。

注意:以上運行設備必須選擇“Deveice“

4、傳統(tǒng)的打包帶來的問題

耗費時間、耗費體力、效率低下、只能依賴RD來完成、容易出錯、發(fā)布風險比較高、QA回歸確認比較困難、 不智能化。

自動化打包具體實現(xiàn)

1、xcodebuild 介紹:

[html] view plaincopyprint?

  1. xcodebuild[-project][-activetarget][-alltargets][-target]...[-parallelizeTargets][-activeconfiguration][-configuration][-sdk |][=]...[]...     
  2. xcodebuild[-version[-sdk |]]     
  3. xcodebuild[-showsdks]     
  4. xcodebuild[-find ][-sdk |]     
  5. xcodebuild[-list]    

也可以在終端輸入:xcodebuild –help 或 –h查看具體的選項

顯示xcodebuildversion:xcodebuild –version

顯示當前系統(tǒng)安裝的sdk:xcodebuild –showsdks

顯示當前目錄下project Information:xcodebuild –list

需要注意的是:執(zhí)行以上命令時必須把位置定位在ios項目文件的根目錄下 否則會提示找不相關命令的。

2、xcrun 介紹:

此工具主要用于將app文件打包成ipa格式的程序包。(主要用于已越獄手機)。

具體用法如下:

  1. /usr/bin/xcrun -sdk iphoneos PackageApplication –v [{TARGET}.app] -o [{TARGET}.ipa] --sign [{Iphone Distribution:xxx}] –embed [{xxx.mobileprovision}] 

其中:-v 對應的是app文件的絕對相對路徑 –o 對應ipa文件的路徑跟文件名 –sign

對應的是 發(fā)布證書中對應的公司名或是個人名  –embed 對應的是發(fā)布證書文件

注意如果對應的Distribution 配置中已經(jīng)配置好了相關證書信息的話 –sign 和 –embed可以忽略

3、具體方案

a) 從源程序一次性打出所有渠道的ipa包 跟appstore的二進制包

為了讓自動化腳本執(zhí)行一次把所有的渠道包都打好,所以必須有一個配置文件用來存儲所有的渠道名跟渠道號,而項目文件中也應該有個對應存儲當前渠道號的文件,每次程序都從這個存放渠道號的文件中讀取渠道號即可,大概的思路就是利用腳本循環(huán)執(zhí)行打包過程,而每次打包前都通過腳本修改項目中存放渠道號的文件為當前循環(huán)的***渠道號,讓后逐個打包。

注:具體事例見附錄

b) 提供一個ipa格式的母包 從母包生成其它所有的渠道包跟 appstore 包

qa的一些疑問,如何確保所有的渠道包就是他們驗證過的那份代碼呢?

的確,以上代碼每次都是重新對程序進行打包,可qa往往測試驗證的只有一個包,如果個個去驗證無意中之中又增加了qa的工作量哈?。《绎L險也不可控。因此基于上面的問題我們想出了一下辦法:qa只驗證一個程序包(即母包)如果這個包通過驗證 我們就通過母包去生成其它渠道的包,這樣一來qa也不用確認那么多的渠道包了,風險也得到了有效的控制。

可能你會問:用一個包生成其他的包可行么??

原因是這樣的:因為每個渠道只是渠道號發(fā)生變化,而其他的內容又不會發(fā)生變化,而我們的渠道號又是存儲在sourceid.dat這個文件中的,所以只要改變母包中的sourceid.dat文件的內容即可,而ipa包又是同zip格式進行壓縮,所以基本思路就是通過zip先對母包進行解壓,然后改變sourceid.dat的內容 ***再用zip進行壓縮成相應的渠道包即可。

Ipa包的目錄:

注:具體事例見附錄

一些問題

當有些shell命令在mac的終端中運行不通過時,請確保你的shell腳本是在mac環(huán)境下編寫的而不是同xp等其他環(huán)境中copy過來的。因為mac跟xp的編碼是不一樣所以會有問題。

總結:

通過從母包打出其他渠道的包這種方法:得到以下好處

i.降低了rd的工作量,一起qa的工作量。

ii.讓測試發(fā)布程序時的風險得到了控制。

iii.提高了打包發(fā)布工作效率。(幾十個包 只需短短的幾分鐘)。

iv.提高了自動化。

v.不依賴mac 以及xcode環(huán)境 直接在linux 下即可完成 從母包生成其它包

附錄

利用xcode環(huán)境一次生成所有包的shell 腳本代碼:

  1. #!/bin/sh     
  2. xcodebuild clean -configuration Distribution      //clean項目     
  3. distDir="/Users/xxxx/dist"    
  4. releaseDir="build/Distribution-iphoneos"    
  5. version="1_0_0"    
  6. rm -rdf "$distDir"    
  7. mkdir "$distDir"    
  8. for line in $(cat data.dat)        //讀取所有渠道號data.dat文件     
  9. do    
  10. ipafilename=`echo $line|cut -f1 -d':'//渠道名     
  11. sourceid=`echo $line|cut -f2 -d':'`    //渠道號     
  12. echo "ipafilename=$ipaname"    
  13. echo "sourceid=$sourceid"    
  14. targetName="youtargename"   //項目名稱(xcode左邊列表中顯示的項目名稱)     
  15. echo "sourceid=$sourceid"    
  16. echo "ipafilename=$ipafilename"    
  17. echo "$sourceid" > sourceid.dat     
  18. echo "sourceid.dat: "    
  19. cat sourceid.dat     
  20. rm -rdf "$releaseDir"    
  21. ipapath="${distDir}/${targetName}_${version}_from_${sourceid}.ipa"    
  22. echo "***開始build app文件***"    
  23. xcodebuild -target "$targetName" -configuration Distribution  -sdk iphoneos build     
  24. appfile="${releaseDir}/${targetName}.app"    
  25. if [ $sourceid == "appstore" ]     
  26. then    
  27. cd $releaseDir     
  28. zip -r "${targetName}_${ipafilename}_${version}.zip" "${targetName}.app"    
  29. mv "${targetName}_${ipafilename}.zip" $distDir 2> /dev/null     
  30. cd ../..     
  31. else    
  32. echo "***開始打ipa渠道包****"    
  33. /usr/bin/xcrun -sdk iphoneos PackageApplication -v "$appfile" -o "$ipapath" --sign "iPhone Distribution:xxxxxx"    
  34. fi    
  35. done    

注:以上的data.dat文件為存放渠道號列表的文件 其格式為:3g:1001b 即 (渠道名:渠道號) sourceid.dat 為項目文件中存放渠道號的文件(內容只有一個渠道號)。當然了上面腳本只是說明了下如何利用xcodebuild 和 xcrun 進行打包 以及自動打包的一個邏輯,shell腳本好的同學可以自由發(fā)揮哈。。。

從ipa格式的母包生成其它渠道包的shell腳本實例:

  1. [html] view plaincopyprint? 
  2.  
  3.     #!/bin/sh     
  4.     sourceipaname="母包名.ipa"    
  5.     appname=”app文件名.app”  //加壓后Pauload目錄項.app文件名需要根據(jù)自己的項目修改     
  6.     distDir="/Users/lxxx/Qa"   //打包后文件存儲目錄     
  7.     version="1.0.0"    
  8.     rm -rdf "$distDir "    
  9.     mkdir "$distDir" unzip $sourceipaname     //解壓母包文件     
  10.     for line in $(cat data.dat)   //讀取渠道號文件并進行循環(huán)     
  11.      do    
  12.     ipafilename=`echo $line|cut -f1 -d':'`     
  13.          sourceid=`echo $line|cut -f2 -d':'`     
  14.         echo "ipafilename=$ipaname"    
  15.          echo "sourceid=$sourceid"    
  16.         targetName="ipa包名"    
  17.          echo "sourceid=$sourceid"    
  18.         echo "ipafilename=$ipafilename"    
  19.          cd Payload     
  20.          cd $appname     
  21.          echo "replace sourceid.dat before: "    
  22.          cat sourceid.dat     
  23.          echo "$sourceid" > sourceid.dat     
  24.          echo "replace sourceid.dat after: "    
  25.       cat sourceid.dat     
  26.       if [ $sourceid == "appstroe" ]     
  27.      then    
  28.       cd ..     
  29.      zip -r "${targetName}_${version}_from_${sourceid}.zip" $appname //appstore二進制文件     
  30.          mv "${targetName}_${version}_from_${sourceid}.zip" $distDir     
  31.          cd ..     
  32.          else    
  33.          cd ../..     
  34.          zip -r "${targetName}_${version}_from_${sourceid}.ipa" Payload   //打成其他渠道的包     
  35.      mv "${targetName}_${version}_from_${sourceid}.ipa" $distDir     
  36.          fi    
  37.       done rm -rdf Payload    

注:以上data.dat也是用來存儲所有渠道號的,sourceipaname就是通過qa驗證的母包,appname為ipa包加壓后Payload 目錄下的app文件名并且以上所有文件必須與腳本文件保持在同一目錄下以及在mac環(huán)境中執(zhí)行。

責任編輯:閆佳明 來源: stblog.baidu-tech
相關推薦

2013-05-16 11:07:37

Android開發(fā)Android應用自動化測試

2022-05-26 10:13:22

C/C++GCC插件單元測試

2015-10-21 14:23:08

反模式持續(xù)部署自動化運維

2023-12-04 15:07:25

2024-12-02 14:07:57

2011-07-18 16:26:35

云平臺

2014-05-06 18:00:02

電力通信EPTN解決方案華為

2014-06-30 16:53:31

云計算Aspect

2021-09-02 15:02:27

自動化網(wǎng)絡安全AI

2024-07-30 11:25:31

2015-02-27 11:35:20

云平臺云測試自動化測試

2013-08-21 11:15:54

iOS橫豎屏方案

2013-07-10 15:11:48

華為ICT華為

2012-05-24 16:58:58

華勝天成自動化監(jiān)控

2023-06-02 18:37:52

實時時鐘

2013-10-09 11:27:04

CA TechnoloLISA自動化

2021-02-20 11:55:44

大數(shù)據(jù)DevOps技術

2011-01-17 23:25:58

CA Technolo自動化思科

2014-03-11 11:10:10

PowerShell自動化腳本
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久无码精品亚洲日韩按摩 | 国产欧美日韩综合精品一区二区 | 草久久久 | 中文字幕一区二区三区日韩精品 | 久久亚洲视频网 | 一级毛片成人免费看a | 中文字幕精品视频 | 精品一区二区三区四区 | h视频在线免费 | 伊人伊人 | 欧美成人黄色小说 | 成人不卡视频 | 黄色毛片大全 | 亚洲激情第一页 | 日韩福利 | 毛片免费视频 | 欧美三级视频 | 看片wwwwwwwwwww | 国产精品永久久久久 | 久久久精品久久 | 日日骚视频 | 国产成人99久久亚洲综合精品 | 美女一区| 伊人成人免费视频 | 欧美99久久精品乱码影视 | 色婷婷综合久久久中字幕精品久久 | 国产一区二区三区久久久久久久久 | 国产精品视频综合 | 欧美日高清视频 | 亚洲精品性视频 | 亚洲精品一区中文字幕乱码 | 国产精品夜间视频香蕉 | 日韩伦理一区二区 | 国产乱码一二三区精品 | 夜夜操操操 | 日韩中文字幕2019 | 国内精品久久久久 | 九色视频网站 | 天天拍天天插 | 久久久久久蜜桃一区二区 | 久久精品国产a三级三级三级 |