美文网首页
使用fastlane自动化构建iOS应用

使用fastlane自动化构建iOS应用

作者: jialing_lee | 来源:发表于2019-08-29 14:41 被阅读0次

    前篇文章介绍Android多环境编译打包

    本篇介绍如何使用fastlane构建多版本应用。

    安装

    工具的起源本身是专门针对 iOS 项目,因此目前依赖于 macOS 10.9 以上系统,Ruby 是一个众所周知的轮子发明者,很多知名的工具都是它开发的,fastlane 也不例外。以下是依赖环境:

    • macOS 10.9+
    • Ruby 2.0+ (推荐 rvm 或 rbenv 安装)
    • Xcode + command line tools

    安装最新的Xcode命令行工具

    xcode-select --install
    

    安装fastlane

    # Using RubyGems
    sudo gem install fastlane -NV
    
    # Alternatively using Homebrew
    brew cask install fastlane
    

    使用

    切换到你的iOS工程目录,在目录下执行:

    fastlane init
    

    初始化过程会有选项提示,根据自己的情况选择即可,我一般选择“Manual setup”。

    完成后会看到目录下多了一个Gemfile,还有一个fastlane文件夹,里面包含两个文件:AppFile和Fastfile。

    • Fastfile: 核心文件,主要用于 cli 调用和处理具体的流程
    • Appfile: 从 Apple Developer Portal 获取和项目相关的信息

    先将注意力集中在Fastfile中。新创建的文件内容如下:

    default_platform(:ios)
    
    platform :ios do
      desc "Description of what the lane does"
      lane :custom_lane do
        # add actions here: https://docs.fastlane.tools/actions
      end
    end
    

    我们需要编写的内容都在platform :ios do到末行end之间。

    • lane:定义一个名为custom_lane的任务方法。任务可以定义多个并互相调用,支持参数。
    • desc:任务描述

    我们的目标是构建应用,先来创建一个最简单的任务:

    platform :ios do
      desc "构建beta版本"
      lane :beta do
        # add actions here: https://docs.fastlane.tools/actions
      build_app(scheme: "myapp",
                workspace: "myapp.xcworkspace",
                export_method: "development",
                include_bitcode: true)
      end
    end
    

    执行命令:fastlane beta
    编译结束后,你就会在根目录看到已经编译好的ipa文件:MyApp.ipa

    build_app是一个action,是build_ios_app的别名,常用的参数配置如下:

    • workspace:xcworkspace工程文件路径
    • project:xcodeproj工程文件路径,如果是workspace工程不需要填这个
    • scheme:指定scheme
    • clean:编译前是否清理
    • output_directory:ipa文件保存路径
    • output_name:自定义ipa文件名
    • export_method:支持app-store, ad-hoc, package, enterprise, development, developer-id
    • include_bitcode:是否开启include_bitcode选项

    更详细的参数列表请看文档:https://docs.fastlane.tools/actions/build_app/#parameters

    除了build_app之外,falstlane还支持非常多的action,更多action查看文档https://docs.fastlane.tools/actions

    下面列举几种:

    • increment_version_number:自动更新版本号
    • update_app_identifier:更新bundleID
    • update_info_plist:更新info.plist,不过只能更新bundle id和Display Name。不要用此方法更新bundle id,而是建议用update_app_identifier更新。
    • update_plist:更新plist文件中,可以修改plist中的键值对。

    多版本构建

    我希望通过fastlane在本地快速构建开发、生产环境不同版本的App,需求点依然是每个版本的bundle id、接口地址、应用名称、sdk secret key不一样,最终只通过命令完成一键构建。

    我们先定一个任务(lane),用来修改配置

      desc "修改项目配置"
      desc "参数 prod 判断是否为生产版本"
      lane :set_app_mode do |options|
        prod = options[:prod] || false
        # bundle id
        app_id_suffix = prod ? "prod" : "dev"
        # 应用名称
        app_name_suffix = prod ? "" : "测试版"
    
        # app center应用统计sdk的secret key,分环境
        app_center_dev_secret = "aaaaaa"
        app_center_prod_secret = "bbbbbb"
        app_center_secret = prod ? app_center_prod_secret : app_center_dev_secret
    
        # 接口地址
        backend_dev = "https://dev.example.com"
        backend_prod = "https://prod.example.com"
        backend = prod ? backend_prod : backend_dev
    
        # 更新bundle id
        update_app_identifier(
          xcodeproj: "myapp.xcodeproj",
          plist_path: "myapp/Info.plist",
          app_identifier: "com.example.myapp.#{app_id_suffix}"
        )
        # 更新应用名称字段display_name
        update_info_plist(
          xcodeproj: "myapp.xcodeproj",
          plist_path: "myapp/Info.plist",
          display_name: "MyApp#{app_name_suffix}"
        )
        update_plist(
          plist_path: "myapp/Config.plist",
          block: proc do |plist|
            plist[:appSecret] = app_center_secret
            plist[:backend] = backend
          end
        )
      end
    

    有了这个方法,我们可以轻松得通过fastlane命令来切换环境配置

    # 切换到生产环境
    fastlane set_app_mode prod:true
    

    接着我们编写一个编译任务

      desc "编译任务"
      lane :build do |options|
        prod = options[:prod] || false
        suffix = prod ? "prod" : "dev"
        set_app_mode(prod: prod)
        build_app(
          scheme: "myapp",
          workspace: "myapp.xcworkspace",
          include_bitcode: true,
          export_method: prod ? "ad-hoc" : "development",
          output_directory: "./build",
          output_name: "myapp_#{suffix}.ipa"
        )
        # 重置回开发版配置。日常开发使用的就是开发版配置,这里只是置到日常状态
        set_app_mode(prod: false)
      end
    
      desc "编译beta版本"
      lane :beta do
        build(prod: false)
      end
    
      desc "编译release版本"
      lane :release do
        build(prod: true)
      end
    
    

    这里就实现了轻松编译两个版本的命令

    #编译生产环境ipa,保存路径 ./build/myapp_prod.ipa
    fastlane release
    #编译开发环境ipa,保存路径 ./build/myapp_dev.ipa
    fastlane beta
    

    实现分发

    fastlane还有个很好用的插件机制,官方还提供了个可用的插件列表https://docs.fastlane.tools/plugins/available-plugins/

    我app分发用的fir.im,当然也可以使用蒲公英。他们在fastlane中都有对应的插件:fir
    pgyer

    首先引入插件,执行

    fastlane add_plugin fir
    

    如果你之前没有装过插件,它会在fastlane文件夹中创建一个Pluginfile文件,内容如下:

    # Autogenerated by fastlane
    #
    # Ensure this file is checked in to source control!
    
    gem 'fastlane-plugin-firim'
    

    好了,这样插件就装好了,接着是使用,直接定义两个任务

      desc "编译beta版本并上传至fir.im"
      lane :beta_fir do
        beta
        firim(firim_api_token: ENV["FIR_TOKEN"])
      end
    
      desc "编译release版本并上传至fir.im"
      lane :release_fir do
        release
        firim(firim_api_token: ENV["FIR_TOKEN"])
      end
    

    这样就非常方便的打包和发布不同版本的安装包了。

    # 编译beta版本并上传至fir.im
    fastlane beta_fir
    # 编译release版本并上传至fir.im
    fastlane release_fir
    

    推荐写的非常详细的关于fastlane的博客:
    Fastlane - iOS 和 Android 的自动化构建工具
    深入浅出 Fastlane 一看你就懂

    相关文章

      网友评论

          本文标题:使用fastlane自动化构建iOS应用

          本文链接:https://www.haomeiwen.com/subject/goemectx.html