iOS打包自動化實踐(四)
上一篇: iOS打包自動化實踐(三)
打包到分發全程自動化的閉環。
本篇文章介紹了iOS包自動化分發的實現。
效果
功能實現的效果如圖

效果.png
紅框1:構建介面,包括選擇remote,選擇簽名型別和填寫分支名的功能。
紅框2:構建歷史,包括展示分發二維碼和對應功能分支名的功能

掃描結果.png
掃描後頁面如圖,包括安裝應用和安裝證書兩個功能。
知識掃盲
1、裝置條件
由於此係統主要支援Debug簽名,因此裝置必須是裝置id在developer.apple中註冊過的測試機。如果是企業證書籤名的話所有裝置均可安裝
2、分發條件
iOS的分發與安卓不同,安卓分發只需把包的下載連結在手機上開啟即可,iOS包分發首先需要把包放在一個https伺服器上,其次需要生成固定格式的plist檔案(後文會講),在plist檔案中寫入包的下載地址,並把plist檔案放在一個https伺服器上,在手機上開啟該plist檔案的下載地址,才可以觸發下載安裝。
實現
1、配置Mac環境
我們提到分發需要https伺服器,正好我們可以通過打包的Mac自帶的ApachCtrl將Mac直接配置成一臺Https伺服器,省的找運維了啊哈哈哈哈哈。
配置的主要原理是由於https建立連結需要SSL握手過程,SSL握手需要https證書,為了避免額外申請證書的費用和麻煩這裡直接用openssl生成一張自簽名的證書,自簽名證書和權威機構頒發的證書主要區別是裝置【手機】在與伺服器通訊之前需要下載並信任該自簽名證書【原理同Charles抓https請求】,而權威機構頒發的證書不需要手動下載和信任。這就是為什麼上文提到的掃描二維碼之後除了安裝應用之外還有安裝證書的功能【證書只需要安裝和信任一次即可】。
跟著 這篇教程 配置即可,主要是一些機械操作。
配置結束後站點目錄即為/Library/WebServer/Documents,在該目錄下的檔案,在本地機器上拼接host【Mac的內網IP】可以訪問,即表示配置成功。
例如:生成的證書放在路徑:/Library/WebServer/Documents/server.crt,Mac的IP地址為192.168.1.25,則證書下載連結為: https://192.168.1.25/server.crt
2、基本流程
1、首先需要設計站點的檔案目錄。

檔案目錄.png
紅框1:https證書
紅框2:專案資料夾
紅款3:根據build號(Jenkins的任務build號,環境變數名BUILD_NUMBER)命名資料夾,內包含分發頁(index.html),ipa包,plist配置檔案和二維碼(qrcode.png)。
2、自動化流程
1、Archive生成ipa包。 2、根據檔案目錄規則建立資料夾,並把ipa包放入指定目錄【此時ipa的下載連結已確定。 3、根據ipa的下載連結生成plist檔案,放入指定目錄【plist檔案下載連結確定】。 4、根據plist檔案下載連結生成二維碼,並放入指定目錄。 5、Jenkins配置介面展示二維碼。
3、指令碼
1、根據下載連結生成plist檔案。plist格式固定,僅有一個變數url。使用cat重定向將內容寫入plist_path。 create_plist.sh
2、根據plist下載連結生成html分發頁。 create_html.sh
3、根據plist下載連結生成png二維碼。 create_qrcode.swift)
4、 完整指令碼 (僅供參考)。入口指令碼test_package.sh,在Jenkins配置介面的【Execute shell】中的入口呼叫:
#!/bin/bash project_path=`pwd` script_path="$project_path/fastlane/scripts/TestPackage/test_package.sh" chmod +x $script_path #執行指令碼 $script_path\ --projectPath $project_path\ --buildNumber $BUILD_NUMBER\ --buildCause $BUILD_CAUSE\ --signingType $signingType\ --remote $remote\ --branch $branch\ --nodeName $NODE_NAME\
4、Jenkins配置介面
1、要實現在構建歷史介面插入二維碼和分支名。先下載【Description setter】外掛,然後在【配置-構建後的操作】中新增【Set build description】,並在【Description】中新增html程式碼。程式碼中有兩個變數,BUILD_NUMBER和branch,分別對應Jenkins的build號和分支名。
<img src='http://192.168.1.24/Test_iOS_Package/${BUILD_NUMBER}/qrcode.png' /><br><br> <p><font color="blue">$branch</font></p>
FAQ
1、移動檔案命令。
正常來講/Library/WebServer/Documents路徑需要root許可權,因此需要使用sudo -S命令。
echo $root_password | sudo -S mv $new_dir_path ${server_dirpath}/${dir_name}