fastlane自动化打包-iOS

  • 终端判断是否安装了ruby(参考文章讲版本要大于2.0.0)

$ ruby -v
Snip20190702_1.png
  • 检查ruby源

    • 这里需要说明一下, 我的mac之前配置Cocoapods时,ruby源由默认的https://rubygems.org/换成了https://gems.ruby-china.org/ 刚开始简单的测试了下https://gems.ruby-china.org/找不到fastlane,因此这里需要将ruby源更换回来
    • 查看ruby源
    gem sources
    
    fastlane自动化打包-iOS_第1张图片
    Snip20190702_2.png
    • 如果需要更换ruby源
      • 先移除当前ruby源
      gem sources --remove https://gems.ruby-china.org/
      
      • 添加新的ruby源
      gem sources -a https://rubygems.org/
      
      • 再次查看ruby源 就更换为最新的了
      gem sources
      
      fastlane自动化打包-iOS_第2张图片
      Snip20190702_3.png
    • 如果ruby版本过低 可以升级
gem update --system
  • 确认是否安装了Xcode命令行工具

    xcode-select --install
    
    • 如果出现以下情况 则代表已经安装
      Snip20190702_4.png
    • 若出现以下情况 点击【安装】就可
      fastlane自动化打包-iOS_第3张图片
      Snip20190702_5.png
  • 安装fastlane

    gem install fastlane -NV
    
    • 使用[gem install fastlane -NV]命令 若出现如下报错:
    You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
    
    更换以下命令
    sudo gem install fastlane -NV -n /usr/local/bin
    
    • 根据网络状况,等待命令全部执行完毕后 看到如下提示安装成功
      Snip20190702_6.png
  • 配置fastlane

    cd 项目目录
    fastlane init
    
    • 终端框中会出现4种选项 这里我选择的是4
    • 参考说出现以下表明成功
      屏幕快照 2019-07-02 21.01.50.png
      但是我等了好久 终端框没见动静 关闭了终端框 然后重新打开终端框后仍输入
    fastlane init
    
    终端框出现了如上所示图片中内容。
    这时查看你的iOS工程可看到比原先多出了一些文件
屏幕快照 2019-07-02 21.06.16.png
  • 打包上传到蒲公英

    • 安装蒲公英插件
    fastlane add_plugin pgyer
    
    fastlane自动化打包-iOS_第4张图片
    WechatIMG9.png
    等待几分钟后 输入了两次开机密码后 提示成功
    fastlane自动化打包-iOS_第5张图片
    WechatIMG10.png
    • 修改Fastfile 内容
      • 打开自动生成的Fastfile文件
    vim ./fastlane/Fastfile
    
    然后可以看到
    fastlane自动化打包-iOS_第6张图片
    WechatIMG6.png
    用文本编辑方式打开 并修改相应内容
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
#     https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
#

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

default_platform(:ios)

platform :ios do
  desc "上传蒲公英"
  lane :TestPgyer do #TestPgyer 为lane 名称,只要和后面的lane保持一致即可,我们执行时就是执行这个方法
  scheme_name = "xxx"
  #导出路径  我们可以桌面创建IPA_Info(没有的话会自动创建,名字可自定义) 文件夹来集中管理生成的ipa等文件
  output_directory = "/Users/luckycodercai/Desktop/IPA_Info"
    # add actions here: https://docs.fastlane.tools/actions
  #导出名称 
  output_name = "#{scheme_name}_#{Time.now.strftime('Pgyer%Y%m%d%H%M%S')}.ipa"
  gym(
    export_method: "development", #这里填写导出方式 ad-hoc、enterprise、app-store  
    #Xcode 9 默认不允许访问钥匙串的内容,必须要设置此项才可以
    export_xcargs: "-allowProvisioningUpdates", 
    scheme: scheme_name,# target的名字
    clean: true, # 在构建前先clean
    output_directory: output_directory, #ipa输出目录
    output_name: scheme_name #ipa名字
) 
  # 上传蒲公英,update_description为版本更新描述。
  pgyer(api_key: "5d7f7f8f23cc9b636d19a2a7ab165xxx", user_key: "39b4763cb82f856c7d67af5b262e9xxx", update_description: "hello")
  end
end
  • 打包并自动上传 App 到蒲公英

//在项目目录下执行
fastlane TestPgyer #和前面lane后面的名称保持一致
fastlane自动化打包-iOS_第7张图片
WechatIMG17.png
  • 执行结束后 桌面会生成output_directory定义的文件夹,里面包含一个压缩包和ipa包并且会自动上传到蒲公英
fastlane自动化打包-iOS_第8张图片
WechatIMG19.png
fastlane自动化打包-iOS_第9张图片
WechatIMG8.png

多target打包

target -> Edit Scheme -> 勾选Shared
可以点击Manage Schemes 然后列表中查看或勾选相应的scheme.
fastlane自动化打包-iOS_第10张图片
WechatIMG13.png
fastlane自动化打包-iOS_第11张图片
WechatIMG15.png
fastlane自动化打包-iOS_第12张图片
WechatIMG16.png

比如两个target: 分别为xxx和xxxDev 则若要打包xxx,Fastfile中的scheme_name = "xxx"若要打包 xxxDev 则Fastfile中的scheme_name修改为scheme_name = "xxxDev"


  • 蒲公英有提供多种自动化打包方式,其中使用 Fastlane 上传 App 到蒲公英是种超级简单的方式:
    • 若工程中仅存在一个target,则生成的ipa包等直接存放于工程根目录下,ipa也会自动上传到你设置的蒲公英账号上。
    • 若工程中存在多个target,需要按照上述对需要打包的target勾选Shared选项,打包时,终端会询问你想打包哪个target,生成的ipa包等直接存放于工程根目录下,ipa包会自动上传到设置的蒲公英账号上。

打包并上传到fir.im

与蒲公英操作基本一致:
  • 安装fir插件
    fastlane add_plugin firim
    
fastlane自动化打包-iOS_第13张图片
WechatIMG28.png
中间输入一次y和两次开机密码
提示Successfully installer plugins表示插件安装成功
fastlane自动化打包-iOS_第14张图片
WechatIMG29.png
  • 安装官方工具fir-cli
gem install fir-cli

如果报如下图权限错误,则更换命令:

sudo gem install -n /usr/local/bin fir-cli --no-ri --no-rdoc
fastlane自动化打包-iOS_第15张图片
WechatIMG30.png
提示如下图 Successfully install xxx gems installed时表明安装成功
fastlane自动化打包-iOS_第16张图片
WechatIMG31.png
  • 修改Fastfile内容
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
#     https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
#

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

default_platform(:ios)

platform :ios do
desc "上传fir"
lane :TestFir do #TestFir 为lane 名称,只要和后面的lane保持一致即可,我们执行时就是执行这个方法
scheme_name = "xxxDev"
#导出路径  我们可以桌面创建xxxIPA(没有的话会自动创建) 文件夹来集中管理生成的ipa等文件
output_directory = "/Users/luckycodercai/Desktop/xxxIPA"
  # add actions here: https://docs.fastlane.tools/actions
#导出名称 
output_name = "#{scheme_name}_#{Time.now.strftime('fir_im%Y%m%d%H%M%S')}.ipa"
gym(
  export_method: "development", #这里填写导出方式 ad-hoc、enterprise、app-store  
  #Xcode 9 默认不允许访问钥匙串的内容,必须要设置此项才可以
  export_xcargs: "-allowProvisioningUpdates", 
  scheme: scheme_name,# target的名字
  clean: true, # 在构建前先clean
  output_directory: output_directory, #ipa输出目录
  output_name: scheme_name #ipa名字
) 
# 上传fir
firim(firim_api_token: "7844e5febf265cc35b5d47dfae43bxxx")
end
end
  • cd到工程目录
打开到工程目录
fastlane TestFir
fastlane自动化打包-iOS_第17张图片
WechatIMG32.png
fastlane自动化打包-iOS_第18张图片
WechatIMG33.png
fastlane自动化打包-iOS_第19张图片
WechatIMG34.png
  • 执行fastlane TestFir

遇到报错:

Could not find action, lane or variable 'firim'. Check out the documentation for more details: https://docs.fastlane.tools/actions

使用命令:

sudo fastlane add_plugin firim

重新安装fir插件

fastlane自动化打包-iOS_第20张图片
WechatIMG35.png
fastlane自动化打包-iOS_第21张图片
WechatIMG36.png

参考:
fastlane docs
iOS实现fastlane自动化打包
官方工具 fir-cli 使用说明

你可能感兴趣的:(fastlane自动化打包-iOS)