Fastlane 使用記錄

安裝

fastlane的快速上手文檔:https://docs.fastlane.tools/
這篇文章也不錯(cuò)
使用brew安裝總是失敗决侈,更新了ruby后貌似就不失敗了

N-000:~ admin$ brew install ruby

安裝過程中其垄,可能會(huì)遇到環(huán)境變量問題,按照提示在 .bash_profile文件中添加 export PATH="$HOME/.fastlane/bin:$PATH" 即可卫病,如果文件不存在警医,可手動(dòng)創(chuàng)建

使用蒲公英分發(fā)測試的話亿胸,需要安裝蒲公英的傳包插件, 使用 Fastlane 上傳 App 到蒲公英

N-000:~ admin$ fastlane add_plugin pgyer

在安裝插件時(shí),可能會(huì)遇到錯(cuò)誤


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.
// 運(yùn)行g(shù)em install json -v '2.1.0' 可能會(huì)提示沒權(quán)限
// 使用 sudo 即可解決
N-000:~ admin$ sudo gem install json -v '2.1.0'

使用

cd 到項(xiàng)目文件夾中

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請(qǐng)求需要
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]

       # 修改配置文件 - 正式環(huán)境/測試環(huán)境
       # 獲取當(dāng)前目錄(/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表示以u(píng)tf-8編碼讀取文件,要與當(dāng)前代碼文件的編碼相同
            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時(shí)
          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 ? "正式環(huán)境" : "測試環(huán)境"
      updateStr = "fastlane: " + updateStr
      
      pgyer(
         api_key: "xxx",
         user_key: "xxx",
         update_description: updateStr,
         password: password,
         install_type: password.length > 0 ? "2" : "1"
        )


      # 通知釘釘機(jī)器人 - 項(xiàng)目組
      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: "點(diǎn)擊安裝",
                            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

待續(xù)。鲁豪。潘悼。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爬橡,一起剝皮案震驚了整個(gè)濱河市治唤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌糙申,老刑警劉巖宾添,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡辞槐,警方通過查閱死者的電腦和手機(jī)掷漱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門粘室,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榄檬,“玉大人,你說我怎么就攤上這事衔统÷拱瘢” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵锦爵,是天一觀的道長舱殿。 經(jīng)常有香客問我,道長险掀,這世上最難降的妖魔是什么沪袭? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮樟氢,結(jié)果婚禮上冈绊,老公的妹妹穿的比我還像新娘。我一直安慰自己埠啃,他們只是感情好死宣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碴开,像睡著了一般毅该。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上潦牛,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天眶掌,我揣著相機(jī)與錄音,去河邊找鬼巴碗。 笑死朴爬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的良价。 我是一名探鬼主播寝殴,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼明垢!你這毒婦竟也來了蚣常?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤痊银,失蹤者是張志新(化名)和其女友劉穎抵蚊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贞绳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年谷醉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冈闭。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俱尼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萎攒,到底是詐尸還是另有隱情遇八,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布耍休,位于F島的核電站刃永,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏羊精。R本人自食惡果不足惜斯够,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喧锦。 院中可真熱鬧读规,春花似錦、人聲如沸裸违。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽供汛。三九已至枪汪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怔昨,已是汗流浹背雀久。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趁舀,地道東北人赖捌。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像矮烹,于是被迫代替她去往敵國和親越庇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 前言 眾所周知奉狈,現(xiàn)在App的競爭已經(jīng)到了用戶體驗(yàn)為王卤唉,質(zhì)量為上的白熱化階段。用戶們都是很挑剔的仁期。如果一個(gè)公司的推廣...
    偏偏就是禰閱讀 8,980評(píng)論 34 59
  • 前言 眾所周知桑驱,現(xiàn)在App的競爭已經(jīng)到了用戶體驗(yàn)為王竭恬,質(zhì)量為上的白熱化階段。用戶們都是很挑剔的熬的。如果一個(gè)公司的推廣...
    閑云清煙閱讀 2,517評(píng)論 1 4
  • 摘要 手動(dòng)打包痊硕、手動(dòng)上傳是一件非常煩瑣的事件,通常會(huì)浪費(fèi)開發(fā)者大量的時(shí)間押框,這時(shí)候自動(dòng)打包與分發(fā)就起到的重要的角色岔绸。...
    Lxyang閱讀 1,257評(píng)論 3 4
  • 概述 持續(xù)集成是一種軟件開發(fā)實(shí)踐,即團(tuán)隊(duì)開發(fā)成員經(jīng)常集成他們的工作强戴,通過每個(gè)成員每天至少集成一次亭螟,也就意味著每天可...
    paintingStyle閱讀 3,902評(píng)論 1 10
  • 曾經(jīng)酒后放言:人生在世短短數(shù)十載挡鞍,何不讓自己活的瀟灑一些骑歹?曾想過要不為錢財(cái)所累,要看遍這世間美景方不負(fù)此生墨微,臨絕頂...
    不吃蟲的豬閱讀 335評(píng)論 0 2