在 Zama 0.1 发布之前,就开始尝试使用 Travis 对提交的代码进行一个简单的审核。最开始是使用 pod lib lint
去做,因为用 xcodebuild 指令用的少,配置各种麻烦,要指定模拟器,不然 xcodebuild test 会报错,analyse 也不能直接判断版本质量。而 lint 只需要简单一行,不需要额外配置。
但是后来 app 收到一个来自 iOS11 的崩溃记录,而这个问题是在测试的时候没有出现的问题,于是就在想,会不会是 iOS 11 的实现机制不同。
事实上,虽然很多时候库的最低支持版本是 iOS11、10,甚至 9、8,但是由于开发的时候用的都是最新的 SDK,所以其实是有可能出现向后兼容性问题的。为了测试库在各个系统版本下的表现,自然需要让 travis 能够在各种系统版本下测试。
Martix
直接 Google 没有太多的结果,怎么办呢,那就看看其它三方库的.travis.yml
是怎么写的。
参照 Mantle 和 AFNetworking 的配置,发现了matrix:
字段,可以实现在多环境下的测试。然后按照 Travis 官方文档,确定不同的 osx_image
支持的 SDK 版本,实现了从 iOS 9 到 iOS 13 的版本覆盖:
matrix:
include:
- osx_image: xcode11.2
env: XCODETEST_SIMULATOR='platform=iOS Simulator,name=iPhone 8,OS=13.2'
- osx_image: xcode11.2
env: XCODETEST_SIMULATOR='platform=iOS Simulator,name=iPhone 8,OS=12.2'
- osx_image: xcode11.2
env: XCODETEST_SIMULATOR='platform=iOS Simulator,name=iPhone 8,OS=11.4'
- osx_image: xcode10.1
env: XCODETEST_SIMULATOR='platform=iOS Simulator,name=iPhone 6,OS=10.3.1'
- osx_image: xcode10.1
env: XCODETEST_SIMULATOR='platform=iOS Simulator,name=iPhone 6,OS=9.3'
before_install:
- gem install cocoapods # Since Travis is not always on latest version
- pod install --project-directory=Example
script:
- set -o pipefail && xcodebuild clean test -enableCodeCoverage YES -workspace Example/Zama.xcworkspace -scheme Zama-Unit-Tests -destination "$XCODETEST_SIMULATOR" ONLY_ACTIVE_ARCH=NO | xcpretty
- pod lib lint
这样一来,提交代码就更有底气了,不至于出现开发的时候基于 iOS 13 SDK,然后上线后发现 iOS 9 的系统版本逻辑不同导致崩溃的问题。