美文网首页iOS 持续化集成打包持续集成
iOS 使用fastlane实现打包,上传到fir.im、pgy

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

作者: 小胖QAQ | 来源:发表于2018-03-26 11:07 被阅读1108次

    一、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

    相关文章

      网友评论

      • pFruHMXB:很棒,对于多 target 来说,使用 plugin versioning 来说要好很多,之前使用 increment_build_number,却只能修改 Info.plist, 对于第二 target 提示 .plist 找不到

      本文标题:iOS 使用fastlane实现打包,上传到fir.im、pgy

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