iOS - 大量相似App,產(chǎn)品化的APP(通過簡單配置可以得到新的一個(gè)APP)構(gòu)建及全自動流水線化打包

公司做的是產(chǎn)品化的APP,然后這個(gè)APP可以變成很多項(xiàng)目化的APP。具體大致就是替換下圖片啦,顏色啦,用不同的配置文件,就可以重新封裝成一個(gè)新的APP然后給人使用。

一個(gè)產(chǎn)品化的APP衍生出各種邏輯處理相同,外觀不同的APP。

一 . 構(gòu)建

所有衍生品的項(xiàng)目其實(shí)都出自一份代碼,只是資源文件,及配置信息不同。

面臨問題

1.1 數(shù)百家項(xiàng)目,如何只維護(hù)一份代碼。
比如,一個(gè)項(xiàng)目里測出有一個(gè)bug,意味著,所有項(xiàng)目中都存在著bug,如果每個(gè)項(xiàng)目有一份代碼,那么100個(gè)項(xiàng)目,同樣的bug就要修改100遍

1.2 不同的項(xiàng)目個(gè)性化的需求如何合理解決。
每個(gè)項(xiàng)目或多或少都會有不同的需求,如何在不寫死代碼的情況下解決。

研究過程

解決問題1.1的研究過程
初期調(diào)研過很多方法,從最開始每個(gè)項(xiàng)目拷貝黏貼一份新的代碼出來進(jìn)行打包配置,到嘗試使用多target的方式進(jìn)行維護(hù)。通通都不行,第一種方式不用說,最簡單,也是最沒用的。第二種方式,只能適用于只衍生出數(shù)十個(gè)項(xiàng)目產(chǎn)品,要是數(shù)百家的化,那么也是維護(hù)不過來的。

解決問題1.2的研究過程
初期,寫的是硬代碼,一家項(xiàng)目有這樣的需求,代碼是從一份源碼中拷貝出來的嘛,那么就直接改改代碼咯。再然后就是通過各種ifelse判斷,也是寫死的。

方案

排除了拷貝代碼,及多target方式,最終采用的方式是,通過本地配置文件及服務(wù)端配置參數(shù)結(jié)合,一個(gè)項(xiàng)目有一份配置文件,可以實(shí)現(xiàn)多樣化,圖片資源也是進(jìn)行替換。項(xiàng)目功能肯定是可插拔式模塊化的,具體是通過CocoaPods管理本地庫的方式實(shí)現(xiàn)。如此這般,數(shù)百家項(xiàng)目,只對應(yīng)了數(shù)百個(gè)配置文件,通過不同的配置文件,生成對應(yīng)的ipa包。

二. 打包

采用上述方式進(jìn)行設(shè)計(jì)APP產(chǎn)品,在項(xiàng)目化的時(shí)候,就會面臨一些麻煩的事情。

面臨問題

就是替換各種資源圖片,修改配置信息。而且涉及到多個(gè)部門的配合分工。也就是說,如果需要得到一個(gè)新的衍生項(xiàng)目APP,就需要大量的時(shí)間,整合資料(從svn中下載查找),然后再做一些重復(fù)性的操作,如修改配置信息,拷貝圖片資源。并且,這些操作都需要開發(fā)去參與,畢竟要操作xcode工程。

研究過程

一開始手動去做這些修改,直接在基線工程中進(jìn)行修改后,進(jìn)行打包。這樣當(dāng)然費(fèi)時(shí),費(fèi)力。后來,由做了一個(gè)打包工具,就是一個(gè)mac應(yīng)用啦,在打包工具中輸入各種配置信息,然后把整合好的圖片資源導(dǎo)入到打包工具中,即可自動進(jìn)行打包操作,打包工具內(nèi)部的實(shí)現(xiàn)原理是,通過輸入的信息去修改一個(gè)模版工程,然后內(nèi)部用腳本進(jìn)行打包,上傳操作,不過這種方案還是解決不了一個(gè)問題,就是整合資源且需要專業(yè)開發(fā)人員參與。

方案

公司采用svn管理,不過不管用svn還是git其實(shí)都適用。

流水線化全自動打包
由于大家都很反感做些重復(fù)機(jī)械性的勞動。并且,覺的打包這種事情可以讓根本不懂代碼的人來做。所以設(shè)計(jì)了一套全自動的方式。

  • 整合資源
    這一部分,最費(fèi)事,公司采用svn管理的方式,那么當(dāng)收到一個(gè)打包任務(wù)時(shí),我們就要去對應(yīng)的svn路徑下,去找到各種打包所需要的信息,這些信息都是由不同部門,不同的人上傳,所幸的是,每個(gè)存放所需資料的路徑是相對不變的。如圖片資源就會存放于,xx項(xiàng)目/xx圖片資源的目錄下,接口信息,就會存放在某某項(xiàng)目接口配置.xls文件中。有了這些條件,那么腳本自動化整合的前置條件就滿足了。通過腳本(本人采用python腳本),直接訪問svn,然后整合資源。創(chuàng)建出滿足于app使用的資源文件目錄。聽起來很簡單,其實(shí)有點(diǎn)麻煩,就是讀取各類存放于svn的xlsx文件,然后生成打包需要的很多配置信息,文件,然后自動拷貝資源到對應(yīng)目錄

  • 生成ipa包
    資源整合完成之后,腳本就可以進(jìn)行打包操作,具體是先從svn上找到對應(yīng)版本的tag,然后修改其pod文件。然后生成工程文件,然后進(jìn)行打包操作。

  • 上傳ipa包
    ipa包上傳svn及iTunes Connect均可由腳本自動化實(shí)現(xiàn)。

  • 流水化
    由于考慮到需要完全不懂代碼的人打包所以采用以下流程。
    發(fā)起打包的人上傳xls文件到svn對應(yīng)目錄,這個(gè)xls文件以項(xiàng)目為命名(可以通過這個(gè)名字,找到svn下對應(yīng)項(xiàng)目的路徑),文件內(nèi)容就是打包所需要的部分基本信息(其余信息也可以從svn其他目錄中找到)。當(dāng)上傳到svn中會,觸發(fā)腳本(腳本已經(jīng)部署在服務(wù)端,不一定是觸發(fā),也可以是定期更新svn),從而腳本便自動執(zhí)行打包,打完包后就可以上傳到svn,及發(fā)送郵件告知對應(yīng)人員。

后記

寫的比較概括,具體細(xì)節(jié)可以郵件or評論交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,765評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評論 6 342
  • 感情從來沒有相同的模式,喜歡就好。 周末,說故事。 ...
    99小魚9999閱讀 252評論 0 2
  • 春天了,區(qū)文化館舉辦攝影學(xué)習(xí)班,我想,這也是一門藝術(shù),就報(bào)了名。那個(gè)學(xué)習(xí)班辦得很好,請來的老師是解放日報(bào)負(fù)責(zé)攝影的...
    陳家老爺爺閱讀 245評論 0 0

友情鏈接更多精彩內(nèi)容