美文网首页
iOS使用fastlane实现本地一键打包和发布

iOS使用fastlane实现本地一键打包和发布

作者: 雪落天涯 | 来源:发表于2020-10-29 10:14 被阅读0次
    image.png

    fastlane简介

    fastlane是一套主要使用Ruby语言开发的自动化工具集,可用于iOS和Android的自动化打包、发布等工作,做到一键集成发布,为广大开发者节约大量时间。fastlane详细介绍可参考下面资料。
    Github:https://github.com/fastlane/fastlane
    官网:https://fastlane.tools/
    文档:https://docs.fastlane.tools/
    截止目前fastlane Github上Star数已3W+。

    安装fastlane

    1、首先要安装正确的 Ruby 版本。需要2.0及以上版本,在终端窗口中用下列命令来确认:

    ruby -v
    

    2、然后检查 Xcode 命令行工具是否安装。在终端窗口中输入命令:

    xcode-select --install
    

    如果未安装,终端会开始安装,如果报错误:command line tools are already installed, use "Software Update" to install updates.代表已经安装。
    3、以上配置好之后就可以安装fastlane了,可以通过RubyGems或Homebrew 安装

    //RubyGems (macOS/Linux/Windows)
    sudo gem install fastlane
    
    //Homebrew (macOS)
    brew install fastlane
    

    安装过程中有可能被墙导致卡在bundle update,解决方法可自行谷歌.

    初始化

    打开终端,cd到你的工程目录,然后执行
    fastlane init
    执行后会在当前目录下创建fastlane文件夹,并有下面4个选项供选择,这里选择4,其他三项功能可查阅官方文档

    What would you like to use fastlane for?
    1. 📸  Automate screenshots
    2. 👩‍✈️  Automate beta distribution to TestFlight
    3. 🚀  Automate App Store distribution
    4. 🛠  Manual setup - manually setup your project to automate your tasks
    

    初始化成功后生成的fastlane文件结构如下

    fastlane
    ├── Appfile
    ├── Deliverfile
    ├── Fastfile
    ├── metadata
    │   ├── copyright.txt
    │   ├── en-US
    │   │   ├── description.txt
    │   │   ├── keywords.txt
    │   │   ├── marketing_url.txt
    │   │   ├── name.txt
    │   │   ├── privacy_url.txt
    │   │   ├── release_notes.txt
    │   │   └── support_url.txt
    │   ├── primary_category.txt
    │   ├── primary_first_sub_category.txt
    │   ├── primary_second_sub_category.txt
    │   ├── secondary_category.txt
    │   ├── secondary_first_sub_category.txt
    │   ├── secondary_second_sub_category.txt
    │   └── zh-Hans
    │       ├── description.txt
    │       ├── keywords.txt
    │       ├── marketing_url.txt
    │       ├── name.txt
    │       ├── privacy_url.txt
    │       ├── release_notes.txt
    │       └── support_url.txt
    └── screenshots
        ├── README.txt
        ├── en-US
        │   ├── 一堆png图片
    
    • 这里肯定会被创建的是Appfile和Fastfile。如果Deliverfile,screenshots和metadata目录没被创建,可以运行fastlane deliver init重新初始化,在执行deliver init的过程中,会同步iTC中的所有语言的元数据和截图。

    • fastlane的配置会要求输入开发者账号密码,所有的密码都加密保存在系统的Keychain里

    • Matchfile: match 这个action的配置文件,fastlane match init 自动生成,存放git地址等

    fastfile文件配置

    • Appfile:用于指定 app_identifier, apple_id, team_id
    • Fastfile:配置管理 lane
    • Deliverfile:配置应用在 ITC 中的各种信息,和 ICC 中的数据是一一对应的
    • metadata:包含应用在 ITC 中的各种信息
    • screenshots:包含截图数据

    为了方便可以在fastlane目录下创建一个.env配置文件,存储相关配置信息
    touch .env
    配置信息参考如下

    #APP唯一标识符
    APP_IDENTIFIER = "com.xxx.xxx.xxx"
    
    #发布版本号
    APP_VERSION_RELEASE = "1.0.0"
    
    #苹果开发者账号
    APPLE_ID = "xxxxxxxxxxxx"
    
    #TeamID
    TEAM_ID = "xxxxxxx"
    
    #应用名称
    SCHEME_NAME = "xxxxx"
    
    # AppIcon
    APPICON_PATH = './fastlane/metadata/app_icon.jpg'
    
    # Firim Token
    Firim_Api_Token = "xxxxxxxxxx"
    
    #Firim short url
    Firim_Short_url = "http://xxxxxxxxx"
    

    配置 Appfile

    # For more information about the Appfile, see:
    #     https://docs.fastlane.tools/advanced/#appfile
    
    app_identifier ENV['APP_IDENTIFIER'] # The bundle identifier of your app
    
    apple_id ENV['APPLE_ID'] # Your Apple email address
    
    team_id ENV['TEAM_ID'] # Developer Portal Team ID
    

    配置 Fastfile

    default_platform(:ios)
    
    platform :ios do
    
      lane :dev do |option|
    
        increment_build_number
    
        scheme_name = ENV['SCHEME_NAME']
        app_ipa_name = "#{scheme_name}"
        print("app_ipa_name: #{app_ipa_name}")
        puts "请输入版本描述:"
        desc = STDIN.gets
    
        #打包
        gym(
            scheme: "#{scheme_name}",
            export_method: "development",#打包所选的种类(就是App Store,生产测试,企业,开发测试那四种), app-store,ad-hoc,enterprise,development
            output_directory: "./build",
            output_name: "#{app_ipa_name}.ipa"
            )
    
      #上传到firim,上传Fir.im需要提前安装Fir.im插件 fastlane add_plugin fir_cli
        firim(
              firim_api_token:ENV['Firim_Api_Token'],
              app_changelog:"#{desc}",
              icon:ENV['APPICON_PATH']
              ) 
    
      #上传成功后 弹窗通知提醒
        notification(
                    subtitle: "Finished upload to fir.im",         
                    message: "all work done",
                    open: ENV['Firim_Short_url']
                    )
    
        clean_build_artifacts
      end
    end
    

    metadata文件夹

    如果只是简单的打包提交到蒲公英,Firim分发平台,metadata目录下的所有文件都可以删除,只保留app_icon.jpg,(图片名称不要修改,图片为1024x1024的App icon,否则打包后上传Fir.im 包没有App icon)
    metadata文件夹结构如下

    ├── metadata
    │   └── app_icon.jpg
    

    自动打包 发布

    最后在工程目录下 输入命令 fastlane dev(dev 为Fastfile中lane 对应的名称)
    几分钟后打包成功并自动上传到Fir.im,Mac 会弹出通知提醒
    (上传Fir.im需要安装Fir.im插件 fastlane add_plugin firim)

    相关文章

      网友评论

          本文标题:iOS使用fastlane实现本地一键打包和发布

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