前言

在iOS上,實現遠程打包的思路多種多樣,但是幾乎都離不開Jenkins這一利器。在本文中,將以一种简单的方式實現iOS項目多個(测试&灰度&线上等)環境下的远程自动打包。

思路讲解

  1. 安装Fastlane,实现通过lane本地打包;
  2. 安装Jenkins,结合Fastlane实现自动化构建iOS项目;
  3. 结合融云SDK,实现远程触发Jenkins构建打包上传。

步骤实现

  1. Fastlane本地打包
  • Fastlane是ruby脚本集合,所以ruby版本需要更新到至少最低支持Fastlane的版本,以及更换源防止部署被墙事故;
1
2
3
$ ruby -v ##查看版本
$ gem update ##更新版本
$ gem sources --add https://gems.ruby-china.com --remove https://rubygems.org/ ##源更换
  • Xcode安装xcodebuild
1
2
$ xcode-select --install ##install
$ sudo xcode-select --switch /Applications/Xcode.app/ ##确保是在xcode目录下
  • 安装Fastlane,以下两种方式任选一种即可
1
2
$ sudo gem install -n /usr/local/bin fastlane --verbose
$ brew cask install fastlane
  • 在iOS项目下初始化Fastlane;
1
2
3
$ cd <your iOS Project Path>
$ fastlane init ## 根据提示操作(选择·4·)后会在项目目录下生成fastlane文件夹和Gemfile
$ export PATH="$HOME/.fastlane/bin:$PATH" ## 此命令在fastlane不生效的时候使用,可加在~/.bash_profile文件中默认export fastlane

fastlane文件夹下存在Appfile和Fastfile两个文件,Appfile -用于存储应用程序标识符和Apple ID, Fastfile<重要> -用于管理您创建的用于调用某些操作的通道(自定义)

  • 编辑Fastfile创建打包lane管道;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
default_platform(:ios)
platform :ios do
desc "Ad_Hoc IPA"
##options代表参数集合
lane :adhoc do |options|
time = Time.new.strftime("%Y%m%d")
version = get_version_number
build_app(workspace: "yourproject.xcworkspace",
scheme: options[:scheme],
include_bitcode: false,
include_symbols: false,
output_directory: "./fastlane/output_directory",
export_method: "ad-hoc")
end
end
  • Xcode打开项目,将项目改造成多Scheme项目,并将Scheme的”share”选项勾选上
    1.添加scheme
    2.添加configurations
    3.编辑对应scheme的各个build configuration
    4 为每个Configurations编辑不同BundleID和预处理宏 e.g. DEVELOPMENT=1
    5.在管理项目接口域名处根据configurations的预处理宏设置不同的环境
  • 配置好证书及各个configurations下的描述文件,实现不同环境下本地打包
1
2
$ cd <project path>
$ fastlane adhoc <your-project-scheme> ## 等待结束后即可在./fastlane/output_directory目录下找到IPA
  1. Jenkins自动化构建
1
$ /usr/libexec/java_home -V ## 查看Java版本,若无这点击以上链接下载安装包安装
  • 点击Jenkins下载Jenkins安装包进行安装,(安装过程中取消勾选start at boot as “jenkins”,取消自启动);
  • 安装完成后启动Jenkins
1
$ java -jar /Applications/Jenkins/jenkins.war –httpPort=8080 ## 若是brew安装的话直接➜ jenkins启动就好了
  • 打开http://localhost:8080 会出现重设初始密码的界面。根据界面中的路径提示去相应文件中取出密码,接着按提示创建管理员用户,配置建议的插件。
1
$ sudo cat /Users/Shared/Jenkins/Home/secrets/initialAdminPassword ## 复制初始密码
  • 安装完插件后则进入了Jenkins后台,现在我们需要创建一个项目,点击【新建任务】构建一个【自由风格的软件项目】,输入名称后完成以下配置:
    1.点击项目的【配置】,【General】-【高级】,勾选【使用自定义的工作空间】,目录输入自定义的工作空间,显示名称可随意;
    2.【参数化构建】,添加一个参数【scheme】以及你需要的参数;
    3.【触发远程构建】,设置身份令牌;
    4.【源代码管理】,勾选【Subversion】或【Git】,并配置好相关账号密码;
    5.【构建】可选择【执行shell】,➜ cd 【项目路径】下,通过fastlane打包,以及通过curl指令上传至相关平台;
  1. 借助融云实现远程构建
  • 最简思路-以融云为媒介实现端到端的连接,从而触发Jenkins项目构建;
  • 触发机-创建iOS-Project,集成RongIMLib,实现Token(融云控制台可生成)登录,由用户点击按钮发送Scheme参数至构建机融云账号。
  • 构建机-创建iOS-Project,集成RongIMLib,实现Token(融云控制台可生成)登录并监听消息,判断是否触发构建相应的Task,若触发则调用WKWebView加载对应JenkinsToken触发构建;

thanks for your reading~