iOS持续集成(五) - Fastlane打包与分发

基本思路是在 Mac 服务器上,搭建 tomcat 服务, jenkins 部署到 tomcat 下,Mac 服务器启动时自动启动 tomcat 服务,jenkins 也就启动了,同时一个 iOS 项目在 jenkins 下会有开发、测试、预发部、Beta、正式发布等环境,其中开发、测试、预发部、Beta为 AdHoc 使用证书,打包后上传到第三方发布平台,正式发布使用 Distribution 证书,打包后上传到 AppStore。

集成fastlane

以上通过 Jenkins + shell 脚本算是比较完整的实现了打包、分发与测试,并最终提交到AppStore整套流程化的持续集成工作。在愉快的使用一段时间之后,对自动化流程有了更深刻的理解,迫切需要这套持续集成流程更自动化。这一次我注意到了fastlane,业界对fastlane的评价实在是太高以至于我不关注到它都不行。fastlane是作为iOS、Android持续集成自动化流程必不可少的工具,自动化测试、代码质量检测、自动化部署、自动化提交审核都离不开它。

fastlane安装

使用 RubyGems 安装

1
sudo gem install fastlane -NV

使用 Homebrew 安装

1
brew cask install fastlane

进入项目文件夹下,执行 fastlane init 即可自动生成 AppfileFastfile文件。在开始配置项目之前先安装 fastlane 蒲公英插件,执行 fastlane add_plugin pgyer 即可,安装插件时报错:

1
2
3
An error occurred while installing unf_ext (0.0.7.5), and Bundler
cannot continue.
Make sure that `gem install unf_ext -v '0.0.7.5'` succeeds before bundling.

需要执行:

1
2
bundle exec fastlane add_plugin pgyer
bundle exec fastlane update_plugins

fastlane deliver init 可初始化

在熟悉了使用方式之后,就可以在项目里使用了,在开发阶段都是通过模拟器或者真机测试,以为都很好。但是在搭建 Bamboo 的 CICD 就会报以下错。
fts5_storage.c:305:9: error: ‘sqlite3_api_routines’ has no member named ‘builtin_snprintf_chk’

The following build commands failed:
CompileC /Users/karosli/Library/Developer/Xcode/DerivedData/xxx-dleyffpkgrddqzfvrhnoakpqgdvz/Build/Intermediates.noindex/ArchiveIntermediates/LefitCoach/IntermediateBuildFilesPath/Pods.build/Debug-iphoneos/WCDB.build/Objects-normal/armv7/fts5.o WCDB/sqlcipher/fts5.c normal armv7 c com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)

  1. 尝试 xcodebuild
    由于 CICD 使用的是基于 flastlane gym 的 shell 脚本,因而怀疑是不是 fastlane 的原因呢,因为我在 Xcode 上直接运行是好的。所以就尝试使用 xcodebuild 去编译打包。

    fastlane gym –silent –workspace ${app_workspace} –scheme ${app_schema} –clean –xcargs ‘GCC_PREPROCESSOR_DEFINITIONS=”$GCC_PREPROCESSOR_DEFINITIONS DEBUG=1 COCOAPODS=1”‘ –export_method development –output_directory ${outputDir} –output_name ${app_ipa_file}

把上面替换成下面的命令

archive

xcodebuild archive -sdk iphoneos -workspace ${app_workspace} -scheme ${app_schema} -configuration Debug -archivePath ${outputDir} GCC_PREPROCESSOR_DEFINITIONS=”$GCC_PREPROCESSOR_DEFINITIONS DEBUG=1 COCOAPODS=1”

export ipa

xcodebuild -exportArchive -exportFormat IPA -archivePath ${outputDir} -exportPath ${app_ipa_file} -exportOptionsPlist exportOptions_dev.plist

作者:Karos_凯
链接:https://www.jianshu.com/p/4d111ca5c89f
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

备注


坚持原创技术分享,您的支持将鼓励我继续创作!
----------- 本文结束, 感谢您的阅读 -----------