iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore

一、fastlane简介

Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包、发布等工作。

Github:https://github.com/fastlane/fastlane

官网:https://fastlane.tools/

文档:https://docs.fastlane.tools/

工具集说明如下:
  1. scan
    • 自动运行测试工具,并且可以生成HTML文档报告
  2. cert
    • 自动创建和管理iOS签名证书(Certificates)
  3. sigh
    • 创建、更新、下载、修复Provisioning Profiles的工具
  4. pem
    • 自动生成、更新推送配置文件
  5. snapshot
    • 使用Xcode7的UITest功能实现自动化截图
  6. frameit
    • 把截取的图片套上一层外边框
  7. gym
    • 自动化编译工具,用来打包ipa或者pkg文件
  8. deliver
    • 自动上传截图、App的元数据、二进制(ipa)文件到iTunes Connect
  9. produce
    • 在iTunes Connect或者Apple Developer Center上创建新的iOS应用程序

备注:还有一些工具因为不常用或者被弃用了(比如:shenzhen),这里就不一一列举了。

二、操作步骤

  1. 安装fastlane

    • 确保安装了最新版的Xcode command line tools
      xcode-select --install
    • 安装fastlane
      [sudo] gem install fastlane -NV
      或者也可以使用brew cask 来安装fastlane
  2. 初始化fastlane

    • 打开terminal(终端),进入项目根目录下,初始化fastlane
      fastlane init
      出现如下选项,选择4:
      iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第1张图片
      DB610C68-5EC2-4FBF-8E3D-FDF8261444A1.png

      ① 自动化截图
      ② 将测试版分发自动化到TestFlight
      ③ 自动上传、发布到App Store
      ④ 手动设置 - 手动设置您的项目以使您的任务自动化
      然后,输入开发者账号密码
      iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第2张图片
      76080789-2B98-4218-9F67-EEEF0DD4F93F.png

      如果开发者账号上没有对应的bundle id的App,会提示是否创建一个新的App,这里我们选择否(n),因为这样快速创建的App设置的信息有限,只能设置App名称等一些基本信息,我们可以通过produce工具创建一个可以设置更多信息的App
      iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第3张图片
      image.png
  3. 使用produce,在iTunes Connect或者Apple Developer Center上创建新的iOS应用程序
    进入项目根目录,找到fastlane文件夹下的Fastfile文件, 编辑文件,内容如下:


platform :ios do
 desc "create new app"
 lane :produce_app do
   produce(
     username: "[email protected]",# APPle ID
     app_name: "小鱼小鱼吃虾米",#App 名称
     app_identifier: "com.test.www.FastlaneTest",#App bundle id
     app_version: "1.0",#App 版本
     sku: "10023500",#App sku
     language: "Simplified Chinese",#App 语言,默认English
   )
 end
end
iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第4张图片
2F7D1732-1771-41E4-A2AA-F9F20EFA4C8C.png

备注:language这个选项不能直接写Chinese,语言选项如下
["Brazilian Portuguese", "Danish", "Dutch", "English", "English_Australian", "English_CA", "English_UK", "Finnish", "French", "French_CA", "German", "Greek", "Indonesian", "Italian", "Japanese", "Korean", "Malay", "Norwegian", "Portuguese", "Russian", "Simplified Chinese", "Spanish", "Spanish_MX", "Swedish", "Thai", "Traditional Chinese", "Turkish", "Vietnamese"]

在terminal中执行fastlane produce_app命令,创建成功提示如下:


iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第5张图片
938F5AFA-738A-44A0-82D2-B3AD2CC30279.png

iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第6张图片
95F95FAC-7B1C-4297-8732-D49B74E9C543.png
  1. 使用cert创建签名证书(Certificates)
    ① 在Fastfile中添加以下内容,生成开发证书:
  lane :create_certificates do
    cert(
      username: "[email protected]",# APPle ID
      development: true,# 创建一个开发证书
      force: "false",#即使存在现有证书,也要创建证书,默认为false
      output_path: "./certs/development",#存储所有证书和私钥的目录的路径
    )
  end

结果如下:


iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第7张图片
6D2519C1-D251-4028-BFD5-F315CE0F90AE.png

② 生成生产证书

  lane :create_dcertificates do
    cert(
      username: "[email protected]",# APPle ID
      development: false,# 创建一个开发证书
      force: "false",#即使存在现有证书,也要创建证书,默认为false
      output_path: "./certs/distribution",#存储所有证书和私钥的目录的路径
    )
  end
iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第8张图片
A252E1CE-C95F-4E4E-83DD-136BB7CD1E4E.png

开发和生产证书,修改development的boolean值及output_path路径即可

  1. 使用sigh 生成描述文件(mobileprovision)
    在Fastfile中
    ①生成开发mobileprovision
lane :get_dev_provisioningProfile do
  get_provisioning_profile(
    username: "[email protected]",# APPle ID
    development: true,# 创建一个开发mobileprovision
    app_identifier: "com.test.www.FastlaneTest",#bundle identifier
    output_path: "./certs/development",#存储mobileprovision的目录的路径
    filename: "fastlane_dev.mobileprovision",#用于生成的供应配置文件的文件名(必须包含.mobileprovision)
  )
end
iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第9张图片
24FAC5E3-77CC-411F-8203-69EBCACF1A51.png

② 生成生产mobileprovision

 lane :get_provisioningProfile do
   get_provisioning_profile(
     username: "[email protected]",# APPle ID
     development: false,# 创建一个开发证书
     app_identifier: "com.test.www.FastlaneTest",#bundle identifier
     output_path: "./certs/distribution",#存储mobileprovision的目录的路径
     filename: "fastlane_distr.mobileprovision",#用于生成的供应配置文件的文件名(必须包含.mobileprovision)
   )
 end

iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第10张图片
47590B9B-5772-4C5F-93BF-4B6C843BEDB7.png

找到certs/development&&distribution目录下的证书及.mobileprovision文件,并安装到电脑上
iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第11张图片
FC980321-CAF1-4DCA-81DF-8C246C449AF7.png

  1. 使用gym来打包ipa
    • 插件(Plugins)
      可以在fastlane1.3.0以及更高版本的添加插件,通过添加插件,可以增加一些扩展功能,以便更好的使用
      查看所有可用插件
      fastlane search_plug
      查找插件
      fastlane search_plugins [query]
      添加插件
      fastlane add_plugin [name]
      这里介绍两个将会用到插件:
      ① astlane-plugin-versioning => 用来修改build版本号和version版本号。
      Fastlane内嵌的actionincrement_build_number使用的是苹果提供的agvtool,agvtool在更改Build的时候会改变所有target的版本号。这时如果你在一个工程里有多个产品的话,每次编译,所有的Build都要加1。
      有了fastlane-plugin-versioning不仅可以指定target增加Build,而且可以按照「语义化版本」规范增加Version,当然也可以直接设定Version。
      ② fastlane-plugin-firim => 直接把AdHoc或者InHouse打包的ipa上传到fir.im,供测试下载。
      安装以上两个插件
   fastlane add_plugin versioning
   fastlane add_plugin firim

使用gym打包ipa

  • 打包之前,先使用xcode的archive一下,保证项目可以运行起来
  • 打包企业版
  lane :inhouse do
  # 以下两个action来自fastlane-plugin-versioning,
  # 第一个递增 Build,第二个设定Version。
  # 如果你有多个target,就必须指定target的值,否则它会直接找找到的第一个plist修改
    increment_build_number_in_plist(target: 'FastlaneTest')
    increment_version_number_in_plist(
      target: 'FastlaneTest',
      version_number: '1.0'
    )
    # gym用来编译ipa
    gym(scheme: 'FastlaneTest',#打包scheme
    export_method:"enterprise",#打包类型app-store, ad-hoc, enterprise, development
    output_directory: "./build",#ipa打包存放路径
    output_name: 'inhouse.ipa'#ipa名称
    )
  end
  • 上传到firim
    firim(firim_api_token:'38536e6737457d269979734fdsfdsfa')
    打包其他版本只需要把export_method方法改成对应的字段即可,这里就一一叙述了
  1. 通过deliver 上传截图、App的元数据、二进制(ipa)文件到iTunes Connect
    ①在Deliverfile中填写要上传的App元数据
# For more information, check out the docs
# https://docs.fastlane.tools/actions/deliver/

# bundle identifier
app_identifier "com.test.www.FastlaneTest"

# Apple ID用户名
username "[email protected]"

# 版权声明
copyright "#{Time.now.year} xiaoyuchixiami"

# 支持的语言
supportedLanguages = {
    "cmn-Hans" => "zh-Hans"
}

# 副标题
subtitle(
  'zh-Hans' => "小鱼小鱼,虾米虾米"
)

# App应用名称
name(
  'zh-Hans' => "小鱼小鱼吃虾米"
)

# 关键字
keywords(
  'zh-Hans' => "小鱼小鱼吃虾米,小鱼,吃虾米"
)

# 营销地址
marketing_url({
  'zh-Hans' => "https:www.xiaoyuchixiami.com"
})

# 隐私地址
privacy_url({
  'zh-Hans' => "https:www.xiaoyuchixiami.com"
})

# 支持网址
support_url({
  'zh-Hans' => "https:www.xiaoyuchixiami.com"
})

# 发行说明
release_notes({
  'zh-Hans' => "这是第一个版本哦"
})

# 应用说明
description({
  'zh-Hans' => "小鱼小鱼吃虾米, 虾米被小鱼吃",
})

# App价格
price_tier 0

# 应用程序图标的路径
app_icon './fastlane/metadata/AppIcon.png'

# 屏幕截图的文件夹的路径
screenshots_path './fastlane/screenshots'

# ipa路径
ipa './build/release.ipa'

# 自动发布 app: false,则需要手动发布
automatic_release false

# 提交审核信息:加密, idfa 等
submission_information({    
    export_compliance_encryption_updated: false,
    export_compliance_uses_encryption: false,
    content_rights_contains_third_party_content: false,
    add_id_info_uses_idfa: false
})

# 应用审核小组的联系信息 app 审核信息
app_review_information(
  first_name: "杨",
  last_name: "过",
  phone_number: "13522945883",
  email_address: "[email protected]",
  demo_user: "测试账号",
  demo_password: "测试密码",
  notes: "account needed"
)

② 在Fastfile中编写上传元数据action

  lane :upload_message do
    deliver
  end

③ 在terminal中执行fastlane upload_message,会生成一份app元数据确认的htm,输入y上传


iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第12张图片
FEB6D95E-B214-41EF-83DF-861912D7CD90.png

iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第13张图片
925FDCDF-DB5D-4ADA-AA91-CE62D6DA539D.png

上传成功截图:


iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第14张图片
38C53584-7A71-4EE6-8E11-3BF6C08915AB.png

iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第15张图片
image.png

iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第16张图片
image.png

iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第17张图片
image.png

通过以上截图,可以看到,我们打包的ipa包和其他元数据都上传到了iTunes Connect

④ 发布应用
在Deliverfile文件中添加以下内容即可

# 上传完成后提交新版本进行审查
submit_for_review: true
# 跳过HTML报告文件验证
force: true

注意事项:

  1. 截图文件需要区分语言,所以一个文件夹对应一种语言,以下是简体中文对应的截图,另外,同一个分辨率的图片排序顺序是根据字母顺序排列的。


    iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第18张图片
    image.png

    2.Deliverfile文件元数据是区分语言的,所以app名称等信息需要加上语言标识,如下图:


    iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore_第19张图片
    image.png

你可能感兴趣的:(iOS 使用fastlane实现打包,上传到fir.im、pgyer及appstore)