Fastlane 多target打包

Fastlane

玩这个的初衷:编码规范(SwiftLint)+ 单元测试(Unit Test) + 自动化(Fastlane)

官方文档

安装

  1. 安装最新版Xcode命令行工具

    xcode-select --install
    
  2. 安装fastlane

    • 使用Ruby
    sudo gem install fastlane -NV
    
    • 或使用homebrew
    brew install faslane
    

使用

  1. 进入工程目录,执行fastlane init

    fastlane init
    

    提示如下:4个选择,选个4

    [08:56:33]: 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
    ?
    
  2. 相信很多小伙伴卡在了 $ bundle update 这一步,没关系,在项目根目录找到 Gemfile,编辑:

    source "https://rubygems.org"
    替换为
    source "https://gems.ruby-china.com"
    

    回到终端,ctrl + c中断之后,输入:

    sudo bundle update
    
  3. 导出ipa

    目录下已经多了fastlane文件夹,进入该文件夹,编辑 Fastfile,执行的动作,都可以在Fastfile Actions查询,导出ipa主要是用gym(parameters...)

    # Fastfile
    default_platform(:ios)
    
    platform :ios do
       desc "Description of what the lane does"
       lane :custom_lane do
           # add actions here: https://docs.fastlane.tools/actions
           gym(scheme: "FastlaneDemo", 
               configuration: "Release",
               output_directory: "./fastlane/build",
               output_name: "FastlaneDemo",
               clean: true,
               export_method:"development")
     end
    end
    

    gym()参数表

    Key Description
    scheme 项目的scheme
    configuration 编辑配置,Release、Debug等等
    clean 是否执行clean
    output_directory 导出文件夹
    output_name 导出的ipa名称
    export_method development, add hoc, app-store ...
    ... ...
  4. 打开终端,cd到工程根目录,输入fastlane custom_lane,这个custom_lane就是 fastfile里的定义的方法

    注意:fastlane打包时,会根据该项目当前的xcode证书配置来进行打包

    fastlane custom_lane
    
  5. 关于 cocoapods

    如果想在每次build之前,都进行 pod install,则需要在gym()前加入cocoapods操作

    # Fastfile
    default_platform(:ios)
    platform :ios do
         desc "Description of what the lane does"
         lane :custom_lane do
             # add actions here: https://docs.fastlane.tools/actions
             # 执行pod install
             cocoapods
             # 执行打包,导出
             gym(scheme: "FastlaneDemo",
                 configuration: "Release",
                 output_directory: "./fastlane/build",
                 output_name: "FastlaneDemo",
                 clean: true,
                 export_method:"development")
     end
    end
    

    执行fastlane custom_lane时,会报错:

    Gem::Exception: can't find executable pod for gem cocoapods. cocoapods is not currently included in the bundle, perhaps you meant to add it to your Gemfile?
    

    编辑 Gemfile,加入:

    gem "cocoapods"
    

    重新执行,即可

简单的使用就到此结束了,如果小伙伴还需要上传到蒲公英AppStoreTestFlight测试等等功能,请自行查阅官方文档


多Target和多Scheme的玩法

目的:根据Target和Scheme打包,导出对应ipa,并根据target + scheme + version + buildnumer命名ipa

Example:

  1. 新增 .env.(自定义名字) 文件

    根目录/fastlane文件夹下,根据不同的target生成不同的 .env 文件,Demo里包含了.env.main.env.another

    注意:.env是隐藏文件,可以使用命令 command + shift + . 查看

  2. 编辑 .env.(自定义名字) 文件,对应的项目结构如下表

    Targets Bundle Identifier Scheme .env文件
    FastlaneDemo com.FastlaneDemo.main FastlaneDemo, FastlaneDemoQA .env.main
    FastlaneDemoAnother com.FastlaneDemo.another FastlaneAnother, FastlaneAnotherQA .env.another
    • .env.main填写对应的APP_IDENTIFIER和SCHEME_NAME

      # .env.main
      APP_IDENTIFIER = "com.FastlaneDemo.main"
      TARGET_NAME = "FastlaneDemo"
      SCHEME_NAME = "FaslaneDemo"
      SCHEME_NAME_QA = "FaslaneDemoQA"
      # more scheme ...
      
    • .env.another填写对应的APP_IDENTIFIER和SCHEME_NAME

      # .env.another
      APP_IDENTIFIER = "com.FastlaneDemo.main"
      TARGET_NAME = "FastlaneDemoAnother"
      SCHEME_NAME = "FaslaneDemoAnother"
      SCHEME_NAME_QA = "FaslaneDemoAnotherQA"
      # more scheme ...
      
  3. 插件安装

    因为在获取build number和version时,需要根据target对应的info.plist文件获取,fastlane原生的get_build_number不支持,所以需要安装插件fastlane-plugin-versioning

    cd到项目根目录,打开终端,输入:

    fastlane add_plugin versioning
    

    安装好之后,就可以在 Gemfile 查看到了

  4. 在项目的info.plist里将Bundle version的值改成$(CURRENT_PROJECT_VERSION)

  5. 编辑 Fastfile,步骤:

    5.1 新增lane :deploy方法

    5.2 实现get_build_number和version

    5.3 利用ENV[变量名]获取.env.target里的变量值

    5.4 新增批量执行的lane :deploy_all方法

    注意:sh "fastlane deploy --env main"里的deploy是上面定义的lane :deploy方法名,--env main-env后面接.env.main文件的后缀

    # Fastfile
    default_platform(:ios)
    
    platform :ios do
        desc "Deploy one target"
        lane :deploy do
            build_number = get_build_number_from_plist(
                            target: ENV['TARGET_NAME'],
                            plist_build_setting_support: true,
                           )
            version_number = get_version_number(
                               target: ENV['TARGET_NAME'],
                              )
            gym(scheme: ENV['SCHEME_NAME'], 
                configuration: "Release",
                output_directory: "./fastlane/build",
                output_name: ENV['SCHEME_NAME']+"-V"+version_number+"("+build_number+")",
                clean: true,
                export_method:"development")
        end
    
        desc "Deploy multi targets"
        lane :deploy_all do
            #cocoapods
            sh "fastlane deploy --env main"
            sh "fastlane deploy --env another"
        end
    end
    
  6. 执行fastlane deploy_all

写在暂时的最后,这玩意儿玩法很多,如果需要,可以继续更新此文档。

附上Demo地址

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

推荐阅读更多精彩内容