本文将介绍如何把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代码打包上传、持续集成、单元测试报告的详细步骤,你们能够在本身项目中动手试试了。