前言
隨著專案的迭代和規範化, 我們可能不滿足一直重複的手動編譯 打包 釋出 測試, 這時就會去尋找一些自動化持續整合的工具, 比如 Jenkins
FastLane
等, 但是對於 iOS 開發者來說, 這些非我們熟悉的語言和技術來搭建的工具, 總覺得有那麼一點不友好, 那麼有沒有我們能非常容易上手的持續整合方案呢?
有, 答案就是 Xcode Server, 這個工具在 Xcode 9 之前是要 購買 128 元的 macOS Server 才能使用的, 在 Xcode 9 開始就被整合到了 Xcode 開發工具中來了, 我們可以在自己電腦 或一臺專用的 Mac 電腦上, 安裝 Xcode, 並啟用這個功能, 一個持續整合的伺服器就搭建好了.
Xcode Server 有哪些功能呢?
- 按 時間週期 或者 程式碼提交 觸發持續整合
- 在構建前或後執行一些指令碼, 或傳送郵件
- 直接在 Xcode 中檢視整合歷史, 錯誤警告測試等數量, 下載歸檔或ipa檔案, 手動整合等.
- 也提供了網頁版, 上一條的功能基本都有
- 手機可以開啟網頁, 選擇某次構建直接安裝對應App
本文的環境和要求
- macOS High Sierra 10.13.5
- Xcode 9.4 (9.0及以上即可)
- 專案需要使用 Git 進行版本控制, 並且有一個可訪問的遠端倉庫
啟用 Xcode Server
-
點選 Xcode 選單:
Xcode
->Xcode Server...
-
開啟開關, 輸入賬戶密碼, 選擇一個使用者作為 Xcode Server 使用者 (蘋果建議不要用管理員使用者, 我這裡在我自己電腦上演示, 就直接使用了)
-
點選
Continue
等待完成, 即成功啟用. 可以在狀態列上看到一個錘子?圖示
建立 Bot (機器人/自動程式)
-
開啟專案, 先把準備持續整合的專案
Schemes
設定為共享Shared
狀態 -
建立新 Bot: 點選 Xcode 選單:
Product
->Create Bot...
, 輸入 Bot 名稱, 選擇剛才建立好的 Xcode Server, 如果沒有就先新增Add New Server...
-
登入你專案的 Git 倉庫, Xcode Server 會到這個倉庫拉取最新程式碼持續整合. (所以你沒有提交到遠端倉庫的修改不會參與打包之類的), 登入成功後, 如果有多分支就選擇你需要整合的分支, 然後點下一步
-
構建配置:
- 選擇你的 Scheme
- Analyze: 如果需要靜態分析勾上
- Test: 如果需要測試勾上
- Archive: 歸檔, 會生成
.xcarchive
包- Export: 匯出
.ipa
, 可以選擇不匯出 (Do Not Export
)、匯出安裝檔案 (Installable Product
)、和使用自定義匯出選項 (Use Custom Export Options Plist
). 實測只能使用自定義匯出選項, 不然沒法正常匯出, 或匯出的包不能正常安裝. 使用自定義選項的話需要選擇一個 Plist 檔案, 先在 Xcode 手動匯出一個Ad Hoc
包, 生成的資料夾裡面有個ExportOptions.plist
, 選擇這個就是了.
- Export: 匯出
- Configuration: 選擇配置 (一般預設就可以了, 也可以手動選擇 Debug 或 Release)
-
整合計劃:
- Integrate:
- Periodically: 定期. 可以設定每小時、每天、每週 的某個時間點自動整合
- On Commit: 在提交時. 每次提交程式碼並推到遠端倉庫的時候, 會自動整合, 一般需要結合第3步, 在非開發分支上使用, 不然就太頻繁了.
- Manually: 手動整合. 需要打包時手動在 Xcode 或者 Xcode Server 自帶的網頁上點選
Integrate
整合
- 在 Xcode 升級之後自動整合, 可以第一時間知道升級帶來的問題
- Clean: 整合前先清理專案. 可以選擇始終、每天一次、每週一次、從不
- Integrate:
-
證書籤名:
-
Options: 勾選開發團隊賬號, 如果專案是 Xcode 自動管理證書和描述檔案的, 這邊全部勾上就行了.
-
Certificates & Profiles: 如果是手動管理的證書和描述檔案, 選擇需要的點選
Add to Server
新增到 Xcode Server 中.
-
-
新增構建引數 和 環境變數
可以新增執行構建命令時的引數, 和自定義環境變數. 沒有就直接跳過了.
-
配置觸發器:
-
Pre-Integration Script: 整合前的指令碼, 可以新增一些在拉取到最新程式碼後, 構建前需要執行的指令碼, 比如安裝 CocoaPods 第三方SDK:
#!/bin/sh # 設定執行環境的語言編碼 export LANG=en_US.UTF-8 export LANGUAGE=en_US.UTF-8 export LC_ALL=en_US.UTF-8 # 進入到專案目錄 cd $XCS_PRIMARY_REPO_DIR # 執行 pod install /usr/local/bin/pod install 複製程式碼
-
Post-Integration Script: 整合後的指令碼, 可以新增一些構建後需要執行的指令碼, 可以設定執行條件. 比如構建成功後 (專案有警告之類的也要勾上, 不然就不算成功指令碼不會執行), 上傳 ipa 包到蒲公英:
#!/bin/sh # 輸出產品(.ipa)路徑 echo $XCS_PRODUCT # 上傳到蒲公英 curl -F "file=@$XCS_PRODUCT" \ -F "uKey=你的使用者Key" \ -F "_api_key=你的apiKey" \ https://www.pgyer.com/apiv1/app/upload 複製程式碼
-
還可以配置 郵件通知 和 定期郵件報表, 這裡不演示了.
-
-
建立完成
點選
Create
之後, Bot 自動化就建立完成了. 可以在Xcode中看到 Bot 在進行首次構建. 如果沒問題, 過一會兒就可以看到本次整合的明細, 有錯誤、警告、分析、測試的數量; 還有構建的結果, 可以直接儲存.xcarchive
和.ipa
檔案. 不出意外的話蒲公英上也有了剛剛上傳的包. 如果有問題可以檢視 Logs 日誌, 右上角有Integrate
和Edit Bot...
按鈕, 可以點選再次整合構建, 和編輯修改當前 Bot 自動化的配置 -
Xcode Server 自帶的網頁平臺
我們在 Xcode 中可以檢視和儲存整合的結果, 那麼沒有安裝 Xcode 的測試人員怎麼辦呢? Xcode 很貼心的提供了一個網頁的平臺, 上面可以檢視整合歷史, 下載歸檔或者ipa包檔案, 在Xcode開啟本次整合, 直接在網頁上開始一次新的整合構建等.
在瀏覽器輸入
https://電腦名.local/xcode
即可開啟, 當然你本機用 https://127.0.0.1/xcode 或者https://你的ip/xcode
也行. 但是推薦前者, 因為 Xcode Server 是對電腦名.local
這個域名做的 SSL 加密, HTTPS 證書上就是這個域名. -
手機上直接安裝 ipa 包
Xcode Server 提供了一個內建的網頁平臺, 這個網頁也可以直接用手機瀏覽器開啟, 檢視構建歷史之類的. 最重要的是可以直接在網頁上點選安裝 app, 這樣我們的測試包其實就可以不用上傳到蒲公英之類的第三方分發平臺了.
手機系統瀏覽器開啟
https://電腦名.local/xcode
, (注意, 要安裝 app 的話就不能使用 ip 之類的了, 因為iOS網頁安裝 App 要求 HTTPS, 而我們的證書是對這個生成的本地域名進行簽名的.) 選擇某次整合開啟後, 上面有兩個按鈕:-
PROFILE
: 點選會提示安裝描述檔案 (如果域名跟證書不匹配會提示錯誤), 點選允許
, 選擇iPhone
, 點選安裝
, 完成後, 開啟手機設定
->通用
->關於本機
->證書信任設定
->勾選信任 Xcode Server 根證書. -
INSTALL
: 信任了HTTPS證書後, 以後點選就可以直接安裝App了
-