本文將介紹如何把iOS & Android項目分別上傳到CocoaPods和Jitpack,並用Travis CI作持續集成,codecov作代碼單元測試覆蓋率的報告展現。android
首先須要在Github上建立代碼倉庫,編寫好本身的代碼並提交,打上一個tag標籤做爲版本。ios
對於iOS代碼,首先須要編寫好項目的podspec描述文件,能夠參照我項目中的描述文件。下面都將以個人Applepie項目爲例,你的項目須要替換爲本身的項目名字。git
其中有幾個地方須要注意:github
s.name = "Applepie" s.version = "0.1.2" 複製代碼
name是CocoaPod上的項目名稱,version是版本,一般和tag是一一對應的。objective-c
s.source = { :git => "https://github.com/cdtschange/ios-applepie.git", :tag => s.version.to_s } 複製代碼
這是項目所在的Github地址。shell
s.ios.deployment_target = "9.0" s.swift_version = "4.2" 複製代碼
這是對應支持的最低iOS版本和Swift語言版本。swift
s.source_files = "Applepie/**/*.{h,m,swift,xcdatamodeld}" s.resource = "Applepie/Applepie.bundle" 複製代碼
這是項目的代碼文件路徑和資源文件路徑。xcode
若是項目包含一些圖片等資源文件須要外部能使用,就須要把資源文件打包成bundle放在根目錄,並在代碼中經過bundle的方式來訪問。ruby
s.dependency "xxx", "~> 1.0.0" 複製代碼
這是項目依賴的其餘第三方庫。bash
有了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
build.gradle
文件de buildscript->dependencies
中加入依賴:
classpath "com.github.dcendents:android-maven-gradle-plugin:2.1" 複製代碼
allprojects->repositories
中加入:
maven { url 'https://jitpack.io' } 複製代碼
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 複製代碼
將Github上的項目提交併打好tag以後,就能夠在Jitpack中用Github帳號登陸並查看到項目了。找到項目並在Release標籤下看到本身的Tag Version,若是一切正常,會在版本號右邊看見綠色的Get it
按鈕,咱們就能夠經過下面的方式正常使用了。
之後每次升級版本,只須要按步驟執行:
首先在要使用的項目根目錄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能夠爲咱們提供方便的代碼自動編譯、運行單元測試的能力,把它和Github結合使用,效果更佳。 不少開源Github項目中的
首先在項目的根目錄添加.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查看編譯的結果。
首先在項目的根目錄添加.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爲咱們提供了代碼覆蓋率友好的展示形式,不少Github開源項目中的
首先在項目的根目錄添加.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中了。
首先在項目的根目錄添加.codecov.yml
文件,仍是以個人Oreo項目爲例:
comment: layout: header, changes, diff coverage: ignore: - app 複製代碼
ignore中能夠添加咱們不想測試的module。
其餘接下來的部分就和iOS同樣了,再也不贅述。
以上就是iOS & Android代碼打包上傳、持續集成、單元測試報告的詳細步驟,你們能夠在本身項目中動手試試了。