iOS & Android 上傳程式碼庫+持續整合+單元測試
本文將介紹如何把iOS & Android專案分別上傳到CocoaPods和Jitpack,並用Travis CI做持續整合,codecov做程式碼單元測試覆蓋率的報告展示。
上傳程式碼
建立Github程式碼倉庫
首先需要在Github上建立程式碼倉庫,編寫好自己的程式碼並提交,打上一個tag標籤作為版本。
iOS上傳CocoaPods
對於iOS程式碼,首先需要編寫好專案的podspec描述檔案,可以參照 我專案中的描述檔案 。下面都將以我的Applepie專案為例,你的專案需要替換為自己的專案名字。
其中有幾個地方需要注意:
s.name = "Applepie" s.version = "0.1.2" 複製程式碼
name是CocoaPod上的專案名稱,version是版本,通常和tag是一一對應的。
s.source = { :git => "https://github.com/cdtschange/ios-applepie.git", :tag => s.version.to_s } 複製程式碼
這是專案所在的Github地址。
s.ios.deployment_target = "9.0" s.swift_version = "4.2" 複製程式碼
這是對應支援的最低iOS版本和Swift語言版本。
s.source_files= "Applepie/**/*.{h,m,swift,xcdatamodeld}" s.resource = "Applepie/Applepie.bundle" 複製程式碼
這是專案的程式碼檔案路徑和資原始檔路徑。
如果專案包含一些圖片等資原始檔需要外部能使用,就需要把資原始檔打包成bundle放在根目錄,並在程式碼中通過bundle的方式來訪問。
s.dependency "xxx", "~> 1.0.0" 複製程式碼
這是專案依賴的其他第三方庫。
有了podspec檔案之後,就需要執行下面的命令來校驗程式碼是否正確:
> pod lib lint --allow-warnings 複製程式碼
上面步驟通過之後,就可以執行下面命令將程式碼打包上傳到CocoaPods了
> pod trunk push Applepie.podspec --allow-warnings 複製程式碼
這一步可能會等較長時間,成功之後就可以通過 pod install Applepie
來正常使用了。
以後每次升級版本,只需要按步驟執行:
pod lib lint --allow-warnings pod trunk push Applepie.podspec --allow-warnings
Android上傳Jitpack
修改專案根目錄 build.gradle
檔案
de buildscript->dependencies
中加入依賴:
classpath "com.github.dcendents:android-maven-gradle-plugin:2.1" 複製程式碼
allprojects->repositories
中加入:
maven { url 'https://jitpack.io' } 複製程式碼
修改要打包的library目錄 build.gradle
檔案
頂部加入,其中group替換為 com.github.自己的github賬號名
:
apply plugin: 'com.github.dcendents.android-maven' group='com.github.cdtschange' 複製程式碼
根目錄新增 .jitpack.yml
檔案
因為我在使用jitpack的時候遇到了Android SDK的Licenses需要同意才能執行的問題,所以在編譯專案之前我需要先執行一些命令來同意Licenses。
在專案的根目錄新增 .jitpack.yml
檔案:
language: android jdk: - oraclejdk8 before_install: - echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --update && echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --licenses 複製程式碼
Jitpack中拉取專案
將Github上的專案提交併打好tag之後,就可以在Jitpack中用Github賬號登入並檢視到專案了。找到專案並在Release標籤下看到自己的Tag Version,如果一切正常,會在版本號右邊看見綠色的 Get it
按鈕,我們就可以通過下面的方式正常使用了。
以後每次升級版本,只需要按步驟執行:
- 修改程式碼並提交
- 打新的tag
- 在Jitpack中檢視新tag的專案是否編譯成功
使用Jitpack
首先在要使用的專案根目錄 build.gradle
檔案中加入下面的maven源:
allprojects { repositories { ... maven { url 'https://jitpack.io' } } } 複製程式碼
然後就可以在需要的module的gradle檔案中新增依賴了,下面是以我的Oreo專案為例,你的專案需要替換為自己的專案名字和版本:
dependencies { implementation 'com.github.cdtschange:android-oreo:1.0.0' } 複製程式碼
整合Travis CI
Travis CI可以為我們提供方便的程式碼自動編譯、執行單元測試的能力,把它和Github結合使用,效果更佳。 很多開源Github專案中的

圖示就是用了Travis CI生成的。
iOS整合Travis CI
首先在專案的根目錄新增 .travis.yml
檔案,還是以我的Applepie專案為例:
language: objective-c osx_image: xcode10 cache: cocoapods # xcode_workspace: ApplepieDemo/ApplepieDemo.xcworkspace # xcode_scheme: ApplepieDemo # xcode_sdk: iphonesimulator12.0 # podfile: ApplepieDemo/Podfile branches: only: - master before_install: - gem install xcpretty -N --no-ri --no-rdoc - pod repo update - pod install --project-directory=ApplepieDemo script: - | set -o pipefail xcodebuild clean test -workspace ApplepieDemo/ApplepieDemo.xcworkspace -scheme ApplepieDemo -destination 'platform=iOS Simulator,name=iPhone XS Max,OS=12.0' -enableCodeCoverage YES | bundle exec xcpretty after_success: - sleep 5 - bash <(curl -s https://codecov.io/bash) 複製程式碼
branches only: master
表示只有master分支有變化的時候才會觸發自動編譯,因此每次我們將程式碼合併到master分支,Travis CI就會為我們自動編譯整個專案,並輸入結果,帶來的變化就是這個圖示

會隨著每次編譯的結果不同而不同。
before_install
描述的是在編譯之前我們需要做的一些準備工作,例如我們的專案如果也有一些依賴的第三方庫,就要先執行 pod install
命令來安裝。
script
就是編譯命令了,我們指定用 iOS Simulator,name=iPhone XS Max,OS=12.0
環境來進行編譯,並且執行單元測試和輸出程式碼覆蓋率報告 enableCodeCoverage
。
after_success
是描述執行成功之後需要做的事,我們在等待5秒之後,把單元測試報告上傳到codecov,為後面的程式碼覆蓋率工作做準備。
專案中有了這個檔案之後,每次提交了master程式碼,我們都可以去我們專案所在的Travis CI檢視編譯的結果。
Android整合Travis CI
首先在專案的根目錄新增 .travis.yml
檔案,還是以我的Oreo專案為例:
language: android android: components: - tools - build-tools-28.0.3 - android-22 - android-28 - extra-android-m2repository - extra-android-support - sys-img-armeabi-v7a-android-22 branches: only: - master script: #- ./gradlew assembleRelease - ./gradlew build connectedCheck before_script: # 修改你的 gradlew的許可權,預設gradlew沒有許可權執行的 - chmod +x gradlew # Emulator Management: Create, Start and Wait - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a - emulator -avd test -no-audio -no-window & - android-wait-for-emulator - adb shell input keyevent 82 & after_success: - sleep 5 - bash <(curl -s https://codecov.io/bash) 複製程式碼
內容基本和iOS的差不多,執行環境我是用的android-22版本跑的單元測試,版本高於22的好像都有些問題。
整合Codecov程式碼覆蓋率報告
單元測試和程式碼覆蓋率能直觀地體現出一個專案質量好壞,程式碼覆蓋率高的專案質量一定是不低的。Codecov為我們提供了程式碼覆蓋率友好的展現形式,很多Github開源專案中的

這個圖示就是用Codecov生成的。
iOS整合Codecov
首先在專案的根目錄新增 .codecov.yml
檔案,還是以我的Applepie專案為例:
comment: layout: header, changes, diff coverage: ignore: - ApplepieDemo 複製程式碼
ignore中可以新增我們不想測試的project。
在Codecov網站上登入自己的Github,找到自己的專案,在Setting中找到一串金鑰,複製下來。
在Travis CI網站上,找到自己專案,Setting的 Environment Variables
中加入環境變數:
CODECOV_TOKEN: 剛才複製的金鑰 複製程式碼
這樣就可以在Travis CI每次自動編譯並執行完單元測試,生成測試報告之後,自動上傳到Codecov中了。

圖示也會隨著每次編譯後覆蓋率不同而變化。
Android整合Codecov
首先在專案的根目錄新增 .codecov.yml
檔案,還是以我的Oreo專案為例:
comment: layout: header, changes, diff coverage: ignore: - app 複製程式碼
ignore中可以新增我們不想測試的module。
其他接下來的部分就和iOS一樣了,不再贅述。
總結
以上就是iOS & Android程式碼打包上傳、持續整合、單元測試報告的詳細步驟,大家可以在自己專案中動手試試了。