iOS & Android 上傳代碼庫+持續集成+單元測試

背景

本文將介紹如何把iOS & Android項目分別上傳到CocoaPods和Jitpack,並用Travis CI作持續集成,codecov作代碼單元測試覆蓋率的報告展現。android

上傳代碼

建立Github代碼倉庫

首先須要在Github上建立代碼倉庫,編寫好本身的代碼並提交,打上一個tag標籤做爲版本。ios

iOS上傳CocoaPods

對於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來正常使用了。

之後每次升級版本,只須要按步驟執行:

  1. 修改代碼並提交
  2. 打新的tag
  3. 編輯podspec文件中的tag信息
  4. pod lib lint --allow-warnings
  5. 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按鈕,咱們就能夠經過下面的方式正常使用了。

之後每次升級版本,只須要按步驟執行:

  1. 修改代碼並提交
  2. 打新的tag
  3. 在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代碼打包上傳、持續集成、單元測試報告的詳細步驟,你們能夠在本身項目中動手試試了。

相關文章
相關標籤/搜索