Python實現(xiàn)iOS自動化打包詳解

Qinz

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

一:基于編譯的打包

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

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


    手動打包
  • 2.其實上面的打包過程快的話2分鐘左右可以完成悴侵,作為一個追求效率的攻城獅,怎么可能滿足在此拭嫁,而基于測試包的頻繁性可免,我們肯定不想一直做這樣重復性而沒多少技術含量的工作,接下來做粤,我們就把這個過程自動化浇借!


    自動化打包1

在上圖中,我們只需要執(zhí)行python腳本怕品,可以看到桌面很快生成了一個ProgramBag的文件夾妇垢,打開文件夾,彩蛋就在里面了堵泽!由于我寫的腳本里包含了上傳蒲公英的代碼修己,這個包有28.3M,網絡不太好會影響上傳時間,真正的打包時間是可以忽略不記的迎罗,也就是執(zhí)行腳本,敲擊回車就好了的事片仿!

自動化打包2

這里我們將打好的包自動上傳到蒲公英網站纹安,完成后自動打開下載地址,這個過程在網絡好的條件下2分鐘左右完成,99.9%的時間是發(fā)在上傳包上!這里上傳完成會自動打開到下載的網頁厢岂。

  • 3.演示過程完畢光督,接下來我們就來看看原理是怎么實現(xiàn)的吧!下面開始講解Python的具體代碼~ 靜心看完塔粒,相信你能看懂结借,說不定自己也可以很快寫一個腳本,用來解決平常重復性的工作卒茬。下面是核心打包腳本:
#編譯打包流程
def bulidIPA():
    mkdir(PayLoadPath)
    #將app拷貝到PayLoadPath路徑下
    commands.getoutput('cp -r %s %s'%(appFileFullPath,PayLoadPath))
    #在桌面上創(chuàng)建packBagPath的文件夾
    commands.getoutput('mkdir -p %s'%packBagPath)
    #將PayLoadPath文件夾拷貝到packBagPath文件夾下
    commands.getoutput('cp -r %s %s'%(PayLoadPath,packBagPath))
    #刪除桌面的PayLoadPath文件夾
    commands.getoutput('rm -rf %s'%(PayLoadPath))
    #切換到當前目錄
    os.chdir(packBagPath)
    #壓縮packBagPath文件夾下的PayLoadPath文件夾夾
    commands.getoutput('zip -r ./Payload.zip .')
    print "\n*************** 打包成功 *********************\n"
    #將zip文件改名為ipa
    commands.getoutput('mv Payload.zip Payload.ipa')
    #刪除payLoad文件夾
    commands.getoutput('rm -rf ./Payload')

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

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

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

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

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

 os.chdir(packBagPath)

等價于

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

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

  • 4.至此告私,我們將第一步的手動打包過程實現(xiàn)了自動話,如果不需要上傳蒲公英承桥,上面的9行命令就夠用了!接下來我們實現(xiàn)上傳蒲公英的腳本:
#上傳蒲公英
def uploadIPA(IPAPath):
    if(IPAPath==''):
        print "\n*************** 沒有找到對應上傳的IPA包 *********************\n"
        return
    else:
        print "\n***************開始上傳到蒲公英*********************\n"
        url='http://www.pgyer.com/apiv1/app/upload'
        data={
            'uKey':USER_KEY,
            '_api_key':API_KEY,
            'installType':'2',
            'password':'',
            'updateDescription':"測試自動化打包"
        }
        files={'file':open(IPAPath,'rb')}
        r=requests.post(url,data=data,files=files)
def uploadIPA(IPAPath):
表示定義了一個函數(shù)uploadIPA驻粟,接受一個參數(shù)

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


KEY說明
  • 5.最后一步就是上傳成功,幫我們自動打開下載頁:
def openDownloadUrl():
    webbrowser.open(r'https://www.pgyer.com/manager/dashboard/app/40c633aa8dc0ba15191632860558825e',new=1,autoraise=True)
    print "\n*************** 更新成功 *********************\n"

webbrowser也是一個組件庫喉恋,這些組件庫在使用時沃饶,和OC一樣母廷,都要先import,里面的地址代表蒲公英上應用的地址糊肤,拷過來粘貼即可!

  • 6.整體的腳本就完了琴昆,最后在使用時配置下面的幾個參數(shù)即可,一次配置馆揉,永久使用!
appFileFullPath = '/Users/Qinz/Library/Developer/Xcode/DerivedData/DDDS-bcghxucdqelptddawpsfmvjtoefm/Build/Products/Debug-iphoneos/DDDS.app'
PayLoadPath = '/Users/Qinz/Desktop/Payload'
packBagPath = '/Users/Qinz/Desktop/ProgramBag'

#上傳蒲公英
USER_KEY = "61ded40a68axxxxxxe9fd278acd2"
API_KEY = "a4fe2724dc6d8cxxxxxxf1994eec219e"

上圖中appFileFullPath就是我們工程文件中.app的地址业舍,至于PayLoadPath和packBagPath只需要你將"Qinz"用戶名修改為你自己電腦的用戶名即可!
下圖演示快速設置appFileFullPath的過程:


appFileFullPath

到此,第一種自動化打包方式講解完畢升酣!

二:基于shenzhen打包舷暮,shenzhen是一個打包相關的庫,使用也非常方便拗踢,比第一中打包方式還要少一個路徑配置脚牍,當然打包的速度相對比較慢,要使用下面的腳本巢墅,首先得安裝shenzhen诸狭,具體可參考https://github.com/nomad/shenzhen

def buildIpa():
    start = time.time()
    print "\n*************** IPA包生成中 *********************\n"
     #commands.getoutput('ipa build')  #使用shenzheng打包ipa
    p = subprocess.Popen('ipa build', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    for line in p.stdout.readlines():
        print line,
    retval = p.wait()

    end = time.time()
    print "--------- 打包耗時:%s秒 ---------"%(end-start)
    print "\n*************** IPA包生成成功,準備上傳蒲公英 *********************\n"

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


腳本打包

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


image.png
WechatIMG30.jpeg

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

踩坑之旅:完成這個腳本的過程中预茄,可以說是一部心酸史兴溜,一把辛酸淚,踩了不少坑(主要是之前不懂腳本)耻陕,網上很多關于自動化打包的文章拙徽,下載下來執(zhí)行后就沒成功過,有的是需要配置一些參數(shù)诗宣,繁瑣的不像自動化膘怕,目前很流行的自動化打包庫fastlane,在我使用時,按照官方的教程打包就沒有一次成功過梧田,還有就是報錯后都不知道怎么解決淳蔼,打包就像碰運氣侧蘸,心里完全沒底,可以說被折磨的體無完膚裁眯,經過多次失敗的經歷后鹉梨,我決定要自己擼一個腳本,于是學習下Python腳本的語法穿稳,也就有了現(xiàn)在的這個版本存皂!關于AppStore的包,還是建議使用Xcode打包逢艘!

最后旦袋,附上這兩個腳本的下載地址:
iOS自動化打包腳本:https://github.com/ys323945/iOSAutoPage/tree/master

將Python文件生成可執(zhí)行的文件只需要兩步
    1. 將.py后綴名改為.command
    1. 執(zhí)行chmod 777 text.command即可
      接下來雙擊即可執(zhí)行。
備注:

有一位簡友在該腳本的基礎上完善了發(fā)送郵件的功能它改,希望能有更多的簡友幫助改善并不斷升級該腳本疤孕,可以第一時間發(fā)送簡信給我,我會最終整合最實用的功能更新至github倉庫央拖,方便大家使用祭阀,同時會在此放置作出貢獻的簡友博客地址。

我是Qinz,希望我的文章對你有幫助鲜戒。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末专控,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子遏餐,更是在濱河造成了極大的恐慌伦腐,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件失都,死亡現(xiàn)場離奇詭異柏蘑,居然都是意外死亡,警方通過查閱死者的電腦和手機粹庞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門咳焚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人信粮,你說我怎么就攤上這事黔攒。” “怎么了强缘?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵督惰,是天一觀的道長。 經常有香客問我旅掂,道長赏胚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任商虐,我火速辦了婚禮觉阅,結果婚禮上崖疤,老公的妹妹穿的比我還像新娘。我一直安慰自己典勇,他們只是感情好劫哼,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著割笙,像睡著了一般权烧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伤溉,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天般码,我揣著相機與錄音,去河邊找鬼乱顾。 笑死板祝,一個胖子當著我的面吹牛,可吹牛的內容都是我干的走净。 我是一名探鬼主播券时,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼温技!你這毒婦竟也來了革为?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤舵鳞,失蹤者是張志新(化名)和其女友劉穎震檩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜓堕,經...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡抛虏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了套才。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迂猴。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖背伴,靈堂內的尸體忽然破棺而出沸毁,到底是詐尸還是另有隱情,我是刑警寧澤傻寂,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布息尺,位于F島的核電站,受9級特大地震影響疾掰,放射性物質發(fā)生泄漏搂誉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一静檬、第九天 我趴在偏房一處隱蔽的房頂上張望炭懊。 院中可真熱鬧并级,春花似錦、人聲如沸侮腹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凯旋。三九已至呀潭,卻和暖如春钉迷,著一層夾襖步出監(jiān)牢的瞬間至非,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工糠聪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荒椭,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓舰蟆,卻偏偏與公主長得像趣惠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子身害,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容