Fastlane 使用记录

安装

fastlane的快速上手文档:https://docs.fastlane.tools/
这篇文章也不错
使用brew安装总是失败,更新了ruby后貌似就不失败了

N-000:~ admin$ brew install ruby

安装过程中,可能会遇到环境变量问题,按照提示在 .bash_profile文件中添加 export PATH="$HOME/.fastlane/bin:$PATH" 即可,如果文件不存在,可手动创建

使用蒲公英分发测试的话,需要安装蒲公英的传包插件, 使用 Fastlane 上传 App 到蒲公英

N-000:~ admin$ fastlane add_plugin pgyer

在安装插件时,可能会遇到错误


An error occurred while installing json (2.1.0), and Bundler cannot continue.
Make sure that `gem install json -v '2.1.0'` succeeds before bundling.
// 运行gem install json -v '2.1.0' 可能会提示没权限
// 使用 sudo 即可解决
N-000:~ admin$ sudo gem install json -v '2.1.0'

使用

cd 到项目文件夹中

N-000:fastlane_test admin$ fastlane init

初始化中需要输入Apple ID....

这里列出来init成功后的,自己修改后的fastfile文件,

# Customise this file, documentation can be found here:
# https://github.com/fastlane/fastlane/tree/master/fastlane/docs
# All available actions: https://docs.fastlane.tools/actions
# can also be listed using the `fastlane actions` command

# Change the syntax highlighting to Ruby
# All lines starting with a # are ignored when running `fastlane`

# If you want to automatically update fastlane if a new version is available:
# update_fastlane

# This is the minimum version number required.
# Update this, if you use features of a newer version
fastlane_version "2.28.3"

default_platform :ios

# post请求需要
require 'net/http'
require 'uri'
require 'json'


#https://docs.fastlane.tools/actions/



platform :ios do
  before_all do
    # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
  end

  desc "Runs all the tests"
  lane :test do
    scan
  end

  desc "Submit a new Beta Build to Apple TestFlight"
  desc "This will also make sure the profile is up to date"
  lane :beta do
    # match(type: "appstore") # more information: https://codesigning.guide
    gym # Build your app - more options available
    pilot

    # sh "your_script.sh"
    # You can also use other beta testing services here (run `fastlane actions`)
  end


  desc "Deploy a new version to the App Store"
  lane :release do
    # match(type: "appstore")
    # snapshot
    gym # Build your app - more options available
    deliver(force: true)
    # frameit
  end






  # You can define as many lanes as you want
    

    lane :dftt_adhoc_1 do
      dftt_ad_hoc(release: true)
    end
    lane :dftt_adhoc_0 do
      dftt_ad_hoc(release: false)
    end


    # arctive with ad_hoc and autoUplod to pgyer
    desc "dftt_ad_hoc(release:true/false)"
    lane :dftt_ad_hoc do |options|

       isrelease = options[:release]

       # 修改配置文件 - 正式环境/测试环境
       # 获取当前目录(/fastlane)的父目录 
        patch = File.expand_path("..", File.dirname(__FILE__)).to_s
        patch = patch + "/Class/InterFace/product.h"

        File.open(patch,"r+:utf-8") do |lines|  #r:utf-8表示以utf-8编码读取文件,要与当前代码文件的编码相同
            content = lines.read
    
            if isrelease
              content = "#ifndef product_h\n#define product_h\n#define Release 1\n#endif"
            else
              content = "#ifndef product_h\n#define product_h\n#define Release 0\n#endif"
            end

            lines.seek(0)
            lines.write(content)    
        end

      # 打包ip
      ipadir  = “fs_build/“ + Time.new.strftime('%Y-%m-%d_%H:%M')
      ipaname = "newapp"
      gym( 
          workspace: "xxxxxx.xcodeproj/project.xcworkspace",      # 必须是.xcworkspace路径,
          export_method:  "ad-hoc",               # app-store, ad-hoc, enterprise, development,
        #  configuration: "Debug",                 # Defaults to 'Release'
          scheme: "xxxxxx",             # scheme Name
          silent: true,                           # 隐藏不必要的信息 在bulding时
          clean: true,                            # bulding前clean工程
          output_directory: ipadir,               # 输出文件夹. Defaults to current directory.
          output_name: ipaname,                   # ipa fileName
          include_bitcode: false                  # close bitcode
        )


      # 上传到蒲公英
      password = "xxx"
      updateStr = isrelease ? "正式环境" : "测试环境"
      updateStr = "fastlane: " + updateStr
      
      pgyer(
         api_key: "xxx",
         user_key: "xxx",
         update_description: updateStr,
         password: password,
         install_type: password.length > 0 ? "2" : "1"
        )


      # 通知钉钉机器人 - 项目组
      patch   = ipadir + "/#{ipaname}.ipa"
      appversion = get_ipa_info_plist_value(ipa: patch, key: "CFBundleShortVersionString")
      appname    = get_ipa_info_plist_value(ipa: patch, key: "CFBundleDisplayName")
  
      # 这里不支持获取,只能先写死了
      installurl = "https://www.pgyer.com/xxx"

      # url = "https://oapi.dingtalk.com/robot/send?access_token=bba95cff81603acd229d6a231fd351d21061888c2efaxxxx"     
      # test route
      url = "https://oapi.dingtalk.com/robot/send?access_token=4b4f9daa81de6dbb6df459041a931a6e86c9020a38fxxx"

      toSend = {
                msgtype: "actionCard",
                actionCard: {
                            title: "",

                            text: "### #{appname}#{appversion}\n" + "- #{updateStr}\n" + "- password:#{password}",

                            singleTitle: "点击安装",
                            singleURL: installurl
                          }
                }
      uri = URI.parse(url)
      https = Net::HTTP.new(uri.host, uri.port)
      https.use_ssl = true

      req = Net::HTTP::Post.new(uri.request_uri)
      req.add_field('Content-Type', 'application/json')
      req.body = toSend.to_json

      res = https.request(req)
      puts "------------------------------"
      puts "Response #{res.code} #{res.message}: #{res.body}"


    end








  after_all do |lane|
    # This block is called, only if the executed lane was successful

    # slack(
    #   message: "Successfully deployed new App Update."
    # )
  end

  error do |lane, exception|
    # slack(
    #   message: exception.message,
    #   success: false
    # )
  end
end


# More information about multiple platforms in fastlane: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md
# All available actions: https://docs.fastlane.tools/actions

# fastlane reports which actions are used
# No personal data is recorded. Learn more at https://github.com/fastlane/enhancer

待续。。。。

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

推荐阅读更多精彩内容