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:
      DB610C68-5EC2-4FBF-8E3D-FDF8261444A1.png

      ① 自动化截图
      ② 将测试版分发自动化到TestFlight
      ③ 自动上传、发布到App Store
      ④ 手动设置 - 手动设置您的项目以使您的任务自动化
      然后,输入开发者账号密码
      76080789-2B98-4218-9F67-EEEF0DD4F93F.png

      如果开发者账号上没有对应的bundle id的App,会提示是否创建一个新的App,这里我们选择否(n),因为这样快速创建的App设置的信息有限,只能设置App名称等一些基本信息,我们可以通过produce工具创建一个可以设置更多信息的App
      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: "xxxx@gmail.com",# 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
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命令,创建成功提示如下:


938F5AFA-738A-44A0-82D2-B3AD2CC30279.png

95F95FAC-7B1C-4297-8732-D49B74E9C543.png
  1. 使用cert创建签名证书(Certificates)
    ① 在Fastfile中添加以下内容,生成开发证书:
  lane :create_certificates do
    cert(
      username: "xxxx@gmail.com",# APPle ID
      development: true,# 创建一个开发证书
      force: "false",#即使存在现有证书,也要创建证书,默认为false
      output_path: "./certs/development",#存储所有证书和私钥的目录的路径
    )
  end

结果如下:


6D2519C1-D251-4028-BFD5-F315CE0F90AE.png

② 生成生产证书

  lane :create_dcertificates do
    cert(
      username: "xxxx@gmail.com",# APPle ID
      development: false,# 创建一个开发证书
      force: "false",#即使存在现有证书,也要创建证书,默认为false
      output_path: "./certs/distribution",#存储所有证书和私钥的目录的路径
    )
  end
A252E1CE-C95F-4E4E-83DD-136BB7CD1E4E.png

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

  1. 使用sigh 生成描述文件(mobileprovision)
    在Fastfile中
    ①生成开发mobileprovision
lane :get_dev_provisioningProfile do
  get_provisioning_profile(
    username: "xxxx@gmail.com",# APPle ID
    development: true,# 创建一个开发mobileprovision
    app_identifier: "com.test.www.FastlaneTest",#bundle identifier
    output_path: "./certs/development",#存储mobileprovision的目录的路径
    filename: "fastlane_dev.mobileprovision",#用于生成的供应配置文件的文件名(必须包含.mobileprovision)
  )
end
24FAC5E3-77CC-411F-8203-69EBCACF1A51.png

② 生成生产mobileprovision

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

47590B9B-5772-4C5F-93BF-4B6C843BEDB7.png

找到certs/development&&distribution目录下的证书及.mobileprovision文件,并安装到电脑上
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 "xxxx@gmail.com"

# 版权声明
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: "10023500@gmial.com",
  demo_user: "测试账号",
  demo_password: "测试密码",
  notes: "account needed"
)

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

  lane :upload_message do
    deliver
  end

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


FEB6D95E-B214-41EF-83DF-861912D7CD90.png

925FDCDF-DB5D-4ADA-AA91-CE62D6DA539D.png

上传成功截图:


38C53584-7A71-4EE6-8E11-3BF6C08915AB.png

image.png

image.png

image.png

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

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

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

注意事项:

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


    image.png

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


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

推荐阅读更多精彩内容