自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python實(shí)現(xiàn)iOS自動(dòng)化打包詳解

開發(fā) 后端 移動(dòng)開發(fā) 自動(dòng)化
可能是最簡單的iOS自動(dòng)化打包方式:無需手動(dòng)配置證書,無需填寫配置文件名稱,更無需配置Bundle Identifer,總之無需很多繁瑣配置,讓打包流程一句命令完成!下面將會(huì)分享兩種打包方式,一種是快速打包(打包時(shí)間就在一眨眼),一種是基于shenzhen(速度會(huì)比較慢),都實(shí)現(xiàn)了一行命令完成打包并上傳蒲公英!

可能是最簡單的iOS自動(dòng)化打包方式:無需手動(dòng)配置證書,無需填寫配置文件名稱,更無需配置Bundle Identifer,總之無需很多繁瑣配置,讓打包流程一句命令完成!下面將會(huì)分享兩種打包方式,一種是快速打包(打包時(shí)間就在一眨眼),一種是基于shenzhen(速度會(huì)比較慢),都實(shí)現(xiàn)了一行命令完成打包并上傳蒲公英!

一:基于編譯的打包

這種打包方式應(yīng)該是目前所有打包方式中最快的,就是編譯工程--找到.app文件--新建Payload文件夾--拷貝.app到Payload文件夾--壓縮成zip--更改后綴名為ipa--完成!

1.我們演示過程如下圖: 


手動(dòng)打包

2.其實(shí)上面的打包過程快的話2分鐘左右可以完成,作為一個(gè)追求效率的攻城獅,怎么可能滿足在此,而基于測試包的頻繁性,我們肯定不想一直做這樣重復(fù)性而沒多少技術(shù)含量的工作,接下來,我們就把這個(gè)過程自動(dòng)化! 

自動(dòng)化打包1

在上圖中,我們只需要執(zhí)行python腳本,可以看到桌面很快生成了一個(gè)ProgramBag的文件夾,打開文件夾,彩蛋就在里面了!由于我寫的腳本里包含了上傳蒲公英的代碼,這個(gè)包有28.3M,網(wǎng)絡(luò)不太好會(huì)影響上傳時(shí)間,真正的打包時(shí)間是可以忽略不記的,也就是執(zhí)行腳本,敲擊回車就好了的事! 


自動(dòng)化打包2

這里我們將打好的包自動(dòng)上傳到蒲公英網(wǎng)站,完成后自動(dòng)打開下載地址,這個(gè)過程在網(wǎng)絡(luò)好的條件下2分鐘左右完成,99.9%的時(shí)間是發(fā)在上傳包上!這里上傳完成會(huì)自動(dòng)打開到下載的網(wǎng)頁。

3.演示過程完畢,接下來我們就來看看原理是怎么實(shí)現(xiàn)的吧!下面開始講解Python的具體代碼~ 靜心看完,相信你能看懂,說不定自己也可以很快寫一個(gè)腳本,用來解決平常重復(fù)性的工作。下面是核心打包腳本: 

  1. #編譯打包流程 
  2. def bulidIPA(): 
  3.     mkdir(PayLoadPath) 
  4.     #將app拷貝到PayLoadPath路徑下 
  5.     commands.getoutput('cp -r %s %s'%(appFileFullPath,PayLoadPath)) 
  6.     #在桌面上創(chuàng)建packBagPath的文件夾 
  7.     commands.getoutput('mkdir -p %s'%packBagPath) 
  8.     #將PayLoadPath文件夾拷貝到packBagPath文件夾下 
  9.     commands.getoutput('cp -r %s %s'%(PayLoadPath,packBagPath)) 
  10.     #刪除桌面的PayLoadPath文件夾 
  11.     commands.getoutput('rm -rf %s'%(PayLoadPath)) 
  12.     #切換到當(dāng)前目錄 
  13.     os.chdir(packBagPath) 
  14.     #壓縮packBagPath文件夾下的PayLoadPath文件夾夾 
  15.     commands.getoutput('zip -r ./Payload.zip .'
  16.     print " 
  17. *************** 打包成功 ********************* 
  18.     #將zip文件改名為ipa 
  19.     commands.getoutput('mv Payload.zip Payload.ipa'
  20.     #刪除payLoad文件夾 
  21.     commands.getoutput('rm -rf ./Payload'

有沒有似曾相識(shí)的感覺?看綠色文字的部分,其實(shí)就是liunx命令,通過腳本包裝了一層,可以理解為我們以前在terminal手動(dòng)輸入的命令,現(xiàn)在是自動(dòng)幫我們輸入并執(zhí)行了,大大解放了我們的雙手!

  1. #將app拷貝到PayLoadPath路徑下 commands.getoutput('cp -r %s %s'%(appFileFullPath,PayLoadPath)) 

我們來分析上面這一句,我用OC的偽代碼來實(shí)現(xiàn)的話對(duì)應(yīng)下面這句:所以上面的%s相當(dāng)于OC中的%@,是一種格式符,后面的appFileFullPath代表我們工程的.app存放的路徑,PayLoadPath代表我們在桌面上新建的PayLoad文件路徑

  1. copy("%@,%@",A,B) 

然后結(jié)合注釋(自戀下:注釋寫的還算挺詳細(xì)的)基本上代碼的執(zhí)行過程我們就一目了然了,至于前面的commands.getoutput是基于commands組件的命令,理解為可以在terminal執(zhí)行命令即可,下面有一句代碼需要說明:這是一句切換當(dāng)前目錄的命令

  1. os.chdir(packBagPath) 

等價(jià)于

  1. commands.getoutput('cd %s'%packBagPath) 

不要問我為什么沒有用下面的命令,那是因?yàn)檫@句命令我這邊執(zhí)行不成功,被坑了很久,至于原因,還不知道為什么(如果你解決了,歡迎騷擾我),所以用上面python提供的命令代替了。

4.至此,我們將第一步的手動(dòng)打包過程實(shí)現(xiàn)了自動(dòng)話,如果不需要上傳蒲公英,上面的9行命令就夠用了!接下來我們實(shí)現(xiàn)上傳蒲公英的腳本:

 

  1. #上傳蒲公英 
  2. def uploadIPA(IPAPath): 
  3.     if(IPAPath==''): 
  4.         print " 
  5. *************** 沒有找到對(duì)應(yīng)上傳的IPA包 ********************* 
  6.         return 
  7.     else
  8.         print " 
  9. ***************開始上傳到蒲公英********************* 
  10.         url='http://www.pgyer.com/apiv1/app/upload' 
  11.         data={ 
  12.             'uKey':USER_KEY, 
  13.             '_api_key':API_KEY, 
  14.             'installType':'2'
  15.             'password':''
  16.             'updateDescription':"測試自動(dòng)化打包" 
  17.         } 
  18.         files={'file':open(IPAPath,'rb')} 
  19.         r=requests.post(url,data=data,files=files) 
  1. def uploadIPA(IPAPath): 
  2. 表示定義了一個(gè)函數(shù)uploadIPA,接受一個(gè)參數(shù) 

requests是一個(gè)網(wǎng)絡(luò)請(qǐng)求的組件,我們可以把它類比為AFNetWorking,data是要傳遞的參數(shù),files是要傳遞的文件,至于上傳的參數(shù)key都是根據(jù)蒲公英提供的API來寫的。上面的password代表安裝app時(shí)所需要的密碼,同時(shí)還有兩個(gè)參數(shù),USER_KEY和API_KEY,在蒲公英應(yīng)用的位置可以找到,如圖: 

Python實(shí)現(xiàn)iOS自動(dòng)化打包詳解

KEY說明

 5.最后一步就是上傳成功,幫我們自動(dòng)打開下載頁: 

  1. def openDownloadUrl(): 
  2.     webbrowser.open(r'https://www.pgyer.com/manager/dashboard/app/40c633aa8dc0ba15191632860558825e',new=1,autoraise=True
  3.     print " 
  4. *************** 更新成功 ********************* 

webbrowser也是一個(gè)組件庫,這些組件庫在使用時(shí),和OC一樣,都要先import,里面的地址代表蒲公英上應(yīng)用的地址,拷過來粘貼即可!

6.整體的腳本就完了,最后在使用時(shí)配置下面的幾個(gè)參數(shù)即可,一次配置,永久使用!

  1. appFileFullPath = '/Users/Qinz/Library/Developer/Xcode/DerivedData/DDDS-bcghxucdqelptddawpsfmvjtoefm/Build/Products/Debug-iphoneos/DDDS.app' 
  2. PayLoadPath = '/Users/Qinz/Desktop/Payload' 
  3. packBagPath = '/Users/Qinz/Desktop/ProgramBag' 
  4. #上傳蒲公英 
  5. USER_KEY = "61ded40a68axxxxxxe9fd278acd2" 
  6. API_KEY = "a4fe2724dc6d8cxxxxxxf1994eec219e" 

上圖中appFileFullPath就是我們工程文件中.app的地址,至于PayLoadPath和packBagPath只需要你將"Qinz"用戶名修改為你自己電腦的用戶名即可!

下圖演示快速設(shè)置appFileFullPath的過程: 


appFileFullPath

到此,第一種自動(dòng)化打包方式講解完畢!

二:基于shenzhen打包,shenzhen是一個(gè)打包相關(guān)的庫,使用也非常方便,比第一中打包方式還要少一個(gè)路徑配置,當(dāng)然打包的速度相對(duì)比較慢,要使用下面的腳本,首先得安裝shenzhen,具體可參考https://github.com/nomad/shenzhen 

  1. def buildIpa(): 
  2.     start = time.time() 
  3.     print " 
  4. *************** IPA包生成中 ********************* 
  5.      #commands.getoutput('ipa build')  #使用shenzheng打包ipa 
  6.     p = subprocess.Popen('ipa build', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
  7.     for line in p.stdout.readlines(): 
  8.         print line, 
  9.     retval = p.wait() 
  10.     end = time.time() 
  11.     print "--------- 打包耗時(shí):%s秒 ---------"%(end-start) 
  12.     print " 
  13. *************** IPA包生成成功,準(zhǔn)備上傳蒲公英 ********************* 

這里我主要是將shenzhen的打包命令"ipa build"封裝在pythone腳本中,同時(shí)記錄了打包的時(shí)間,經(jīng)過測試打包的時(shí)間在4~7分鐘左右,這個(gè)腳本中只需要配置蒲公英的USER_KEY和API_KEY,然后cd到當(dāng)前工程目錄,執(zhí)行腳本即可!打包成功會(huì)在當(dāng)前工程目錄下生成ipa包和符號(hào)化文件!使用如下: 


腳本打包

這里的描述日志是更新到蒲公英的填寫的更新日志,最后打包完成記錄如下,同時(shí)也是支持蒲公英上傳的,最后完成如圖: 

Python實(shí)現(xiàn)iOS自動(dòng)化打包詳解

image.png
Python實(shí)現(xiàn)iOS自動(dòng)化打包詳解
WechatIMG30.jpeg

可以看到,打包時(shí)間耗時(shí)將近5分鐘,在我看來時(shí)間還是有點(diǎn)長的,所以要想快速打包測試,使用第一種方式能提高不少工作效率!

踩坑之旅:完成這個(gè)腳本的過程中,可以說是一部心酸史,一把辛酸淚,踩了不少坑(主要是之前不懂腳本),網(wǎng)上很多關(guān)于自動(dòng)化打包的文章,下載下來執(zhí)行后就沒成功過,有的是需要配置一些參數(shù),繁瑣的不像自動(dòng)化,目前很流行的自動(dòng)化打包庫fastlane,在我使用時(shí),按照官方的教程打包就沒有一次成功過,還有就是報(bào)錯(cuò)后都不知道怎么解決,打包就像碰運(yùn)氣,心里完全沒底,可以說被折磨的體無完膚,經(jīng)過多次失敗的經(jīng)歷后,我決定要自己擼一個(gè)腳本,于是學(xué)習(xí)下Python腳本的語法,也就有了現(xiàn)在的這個(gè)版本!關(guān)于AppStore的包,還是建議使用Xcode打包!

最后,附上這兩個(gè)腳本的下載地址:

iOS自動(dòng)化打包腳本:https://github.com/ys323945/iOSAutoPage/tree/master

責(zé)任編輯:未麗燕 來源: cocoachina
相關(guān)推薦

2024-06-17 10:34:12

2011-08-16 15:36:47

iPhone應(yīng)用測試

2018-11-01 14:50:01

RedisNoSQL數(shù)據(jù)庫

2017-07-21 09:14:21

2010-03-03 16:36:02

Python PAMI

2020-03-18 09:23:24

Python數(shù)據(jù)SQL

2023-10-06 22:12:40

Python開發(fā)工業(yè)系統(tǒng)

2015-10-21 15:08:25

電纜自動(dòng)化

2022-07-05 08:26:10

Python報(bào)表自動(dòng)化郵箱

2017-12-17 21:58:18

2024-06-11 10:41:14

2017-04-10 12:25:32

iOS自動(dòng)化測試

2014-04-16 14:15:01

QCon2014

2018-05-11 08:29:10

Python自動(dòng)化測試數(shù)據(jù)驅(qū)動(dòng)

2010-09-27 09:13:36

Visual Stud

2023-02-15 08:21:22

2023-04-06 07:09:25

自動(dòng)化部署Actions

2022-11-15 17:07:40

開發(fā)自動(dòng)化前端

2018-08-31 09:55:38

Ansible網(wǎng)絡(luò)自動(dòng)化

2009-09-04 13:55:04

C#文檔自動(dòng)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)