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

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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351