iOS自動打包平臺搭建:一 概述

前言

新到公司的時候發(fā)現(xiàn)公司還在使用傳統(tǒng)的手動打包測試方式从撼,所以利用自己的閑暇時間開發(fā)了一個 iOS 打包平臺,經(jīng)過不斷改良钧栖,現(xiàn)在公司在使用新一款的打包平臺低零,測試人員可以輕松完成打包工作婆翔。我目前也在重新構(gòu)建平臺,發(fā)布開源版本掏婶。

本系列文章記錄完整的 iOS 打包平臺搭建過程啃奴,文章列表記錄如下:

iOS自動打包平臺搭建:一 概述
iOS自動打包平臺搭建:二 模塊(組件)化開發(fā)
iOS自動打包平臺搭建:三 Master/Slave架構(gòu)
iOS自動打包平臺搭建:四 打包腳本(待完成)
iOS自動打包平臺搭建:五 內(nèi)網(wǎng)OTA(待完成)
iOS自動打包平臺搭建:附 安卓打包(待完成)

開端

因為在開發(fā)過程中,為測試人員打包是一個耗時雄妥、重復(fù)操作較多并且容易出錯的一個部分最蕾,如果能將這一部分由測試人員自助完成,將節(jié)省很多時間老厌,而為測試人員提供自助打包的服務(wù)揖膜,就需要搭建一個簡(sha)單(gua)易(dou)用(hui)的平臺來提供支持。
Jenkins 是業(yè)界使用最多梅桩,評價最高的開源服務(wù)壹粟,但是因為使用 Jenkins 需要進行二次開發(fā)才能提供一個很友好的操作界面,并且很難自定義化我們的需求宿百。而二次開發(fā)對于我們目前的情況而言并不是很合適趁仙。
使用 shell 開發(fā)可能會遇到各種難題,但相對于 Jenkins 垦页,得到的產(chǎn)品更容易被我們掌控雀费,而且我們的需求也僅限于持續(xù)打包和模塊集成, shell 很輕松能應(yīng)對這些痊焊。

下面先簡要介紹一下第一版的一些情況及新版的一些展示盏袄,我們后續(xù)的文章將圍繞新版展開。

第一版

打包流程

打包的想法來源于 xcode 自身提供的命令集薄啥,市面所有的 iOS 打包的底層實現(xiàn)全部都是依賴這些命令集辕羽,僅僅有這些命令是不夠的,即使每次使用命令沒有問題垄惧,但這些命令依賴于 xcode 刁愿,也就是說只能在 Mac 系統(tǒng)下進行(Jenkins為什么可以?它并不可以到逊,它需要我們設(shè)置代理機器來執(zhí)行操作铣口,而這個代理機器只能是 Mac)。
到這里觉壶,我們需要一個 Mac 來做為這些腳本的暖床脑题,果斷選擇自己的電腦,不過用命令行執(zhí)行我電腦中的命令讓我毫無思路铜靶,開啟服務(wù)叔遂,apache + PHP 或者 nodejs,第一版中我選擇了前者。
打包用到的腳本為 1.sh掏熬、2.sh、3.sh秒梅, 直接丟到一個 PHP 函數(shù)中執(zhí)行旗芬,看上去并沒有問題,但是好像并不能看到當(dāng)前的進度捆蜀,頁面會一直處于加載頁面疮丛,直到腳本結(jié)束,這對于一個需要很長時間的操作用戶體驗很差啊辆它,索性再將腳本分開誊薄,每一個 PHP 函數(shù)執(zhí)行一個腳本,并且對結(jié)果做處理锰茉,然后在頁面使用 ajax 請求 觸發(fā) PHP 函數(shù)呢蔫,將每次的結(jié)果更新到界面,再根據(jù)結(jié)果處理是否繼續(xù)向下執(zhí)行飒筑,如果成功生成一條記錄寫入數(shù)據(jù)庫片吊,第一版就這樣完成了。
第一版開發(fā)中受限于時間問題沒有深入了解 PHP 的一些功能协屡,所以使用了 js 一步一步驅(qū)動打包的進展俏脊,而這種方式的弊端也是顯而易見的,無法在頁面關(guān)閉的情況下完成打包操作肤晓,而且架設(shè)在我的電腦上爷贫,造成對我的電腦的嚴(yán)重依賴,如果有一天我請假补憾,那么整個打包流程無法進行漫萄。
新一版的想法是回歸最開始的想法,所有腳本丟到一個 PHP 函數(shù)中盈匾,通過 ajax 請求執(zhí)行函數(shù)卷胯,將執(zhí)行的結(jié)果實時寫入數(shù)據(jù)庫,并且檢測到一旦正在打包威酒,開啟輪詢的方式獲取當(dāng)前進度窑睁。或許 redis 會是更好的選擇葵孤,但是對于我們沒有那么高的需求担钮,檢測到打包結(jié)束,關(guān)閉輪詢尤仍。

安裝包分發(fā)

有一種方式可以讓用戶下載安裝包箫津,可能你更多的了解是很多分發(fā)平臺在使用這種技術(shù),它叫 OTA ,是蘋果在 iOS 4 發(fā)布的一種技術(shù)苏遥,可以讓測試人員通過非商店方式安裝應(yīng)用饼拍,它的協(xié)議頭是 itms-services ,從最開始的只有 safari 到現(xiàn)在大部分瀏覽器都支持(微信不支持)田炭,我們通過如下 HTML 就可以安裝對應(yīng)的應(yīng)用:

<a title="iPhone" href=“itms-services://?action=download-manifest&url=https://192.168.0.1/installIPA.plist">
Iphone Download</a>
其中的 plist 文件是對應(yīng)用的描述文件师抄,其中包含應(yīng)用名、版本教硫、包地址等信息叨吮,具體展示如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>items</key>
    <array>
        <dict>
            <key>assets</key>
            <array>
                <dict>
                    <key>kind</key>
                    <string>software-package</string>
                    <key>url</key>
                    <string>https://ipack.pub/Packages/installer/1.2.0/1.2.7.ipa</string>
                </dict>
            </array>
            <key>metadata</key>
            <dict>
                <key>bundle-identifier</key>
                <string>pub.ipack.installer</string>
                <key>bundle-version</key>
                <string>1.2.0</string>
                <key>kind</key>
                <string>software</string>
                <key>title</key>
                <string>iPack</string>
            </dict>
        </dict>
    </array>
</dict>
</plist>

我們將安裝包存放在本地,然后配置好 plist 文件瞬矩,在網(wǎng)頁中配置好鏈接的按鈕就可以了茶鉴,為了方便我們開發(fā)了一款專門用來安裝的 APP,因為蘋果在介紹中有說過景用,可以通過網(wǎng)頁涵叮、郵件、APP 等方式讓用戶安裝 APP伞插,能有多少員工會在手機端接受公司郵件呢围肥? 顯然郵件不在我們考慮范圍內(nèi)。而提到網(wǎng)頁的形式蜂怎,如果讓用戶手動輸入 url穆刻,也不是明智的方案,如果簡化呢杠步?二維碼氢伟,這是一項偉大的發(fā)明,而我們公司使用釘釘交流幽歼,釘釘提供的機器人加上二維碼簡直就是上天安排好的一次約會朵锣,果斷用起來。

遇到的問題

shell 與 PHP 的交互是一個很蛋疼的問題甸私, shell 獲取 PHP 的參數(shù)容易诚些,但是獲取 shell 執(zhí)行的結(jié)果還真有些難度,打包的腳本會輸出很多信息皇型,怎么才能知道最后執(zhí)行的結(jié)果呢诬烹,一旦判斷錯了,會影響后續(xù)的操作弃鸦,可能明明成功了我們誤判為失敗了绞吁。。唬格。
因為第一次使用腳本做這樣的事兒家破,所以在腳本的調(diào)試過程中颜说,也出現(xiàn)了很多事故,現(xiàn)在的平臺也無法保證不出現(xiàn)問題汰聋,但至少經(jīng)過了上百次打包的洗禮门粪。
部分設(shè)備無法安裝,良思許久終不得解烹困,蘋果官網(wǎng)上也只見有人發(fā)問玄妈,不見官方答復(fù),不得不將 plist 文件由本地存放移動到 github 上韭邓,后經(jīng)同事點醒措近,找到問題所在溶弟,之后又移回本地女淑。

展示

平臺首頁
APP打包及打包記錄頁
打包時界面展示
打包完成界面展示
模塊(組件)管理頁展示

新版

展示

APP打包及打包記錄頁
添加APP展示
模塊列表(組件)展示
添加模塊(組件)展示
個人中心展示
管理菜單欄展示

總結(jié)

本文主要針對第一版打包思路進行介紹,并且對我們后續(xù)要展開介紹的新版進行簡要的展示辜御,如發(fā)現(xiàn)錯誤或有任何疑問歡迎留言交流鸭你。

更多內(nèi)容請訪問 http://blog.makaiwen.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市擒权,隨后出現(xiàn)的幾起案子袱巨,更是在濱河造成了極大的恐慌,老刑警劉巖碳抄,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愉老,死亡現(xiàn)場離奇詭異,居然都是意外死亡剖效,警方通過查閱死者的電腦和手機嫉入,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來璧尸,“玉大人咒林,你說我怎么就攤上這事∫猓” “怎么了垫竞?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蛀序。 經(jīng)常有香客問我欢瞪,道長,這世上最難降的妖魔是什么徐裸? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任引有,我火速辦了婚禮,結(jié)果婚禮上倦逐,老公的妹妹穿的比我還像新娘譬正。我一直安慰自己宫补,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布曾我。 她就那樣靜靜地躺著粉怕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抒巢。 梳的紋絲不亂的頭發(fā)上贫贝,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音蛉谜,去河邊找鬼稚晚。 笑死,一個胖子當(dāng)著我的面吹牛型诚,可吹牛的內(nèi)容都是我干的客燕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼狰贯,長吁一口氣:“原來是場噩夢啊……” “哼也搓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涵紊,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤傍妒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后摸柄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颤练,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年驱负,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗦玖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡电媳,死狀恐怖踏揣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匾乓,我是刑警寧澤捞稿,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站拼缝,受9級特大地震影響娱局,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咧七,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一衰齐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧继阻,春花似錦耻涛、人聲如沸废酷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澈蟆。三九已至,卻和暖如春卓研,著一層夾襖步出監(jiān)牢的瞬間趴俘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工奏赘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寥闪,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓磨淌,卻偏偏與公主長得像疲憋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伦糯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容