記fastlane一次實(shí)踐

關(guān)于fastlane是什么,怎么安裝,網(wǎng)上已經(jīng)有很多文章,請(qǐng)自行baidu Google
fastlane 官網(wǎng)
最終想要實(shí)現(xiàn)的流程執(zhí)行命令-->打包-->上傳蒲公英-->提取下載鏈接二維碼地址-->展示下載二維碼

  • 首先進(jìn)入工程根目錄執(zhí)行 根據(jù)提示操作完成初始化,最終會(huì)在工程根目錄下生成一個(gè)fastlane文件夾以及里面相關(guān)所需的文件
fastlane init
  • 打開(kāi)fastlane文件夾中的Fastfile文件,按照需要編寫(xiě),我的工程是配置了多target,所以需要對(duì)每次打包的target做區(qū)分,同時(shí)內(nèi)部測(cè)試也是用的企業(yè)賬號(hào),同樣也要區(qū)分

fastlane_version "2.19.1"
default_platform :ios

# 上傳企業(yè)證書(shū)包
def upload_inhouse(op)
    scheme = ""
    if op[:env] == "ci"
        scheme = "ShowStart_3.0_PRO_CI"
    elsif op[:env] == "dev"
        scheme = "ShowStart_3.0_PRO_DEV"
    else
        scheme = "ShowStart_3.0_PRO"
    end
    sh "chmod +x ./uploadipa.sh && ./uploadipa.sh ../build/#{scheme}.ipa"
end

#上傳線上證書(shū)包
def upload_ipa(op)
    scheme = ""
    if op[:env] == "ci"
        scheme = "ShowStart_3.0_CI"
    elsif op[:env] == "dev"
        scheme = "ShowStart_3.0_DEV"
    else
        scheme = "ShowStart_3.0_PRO"
    end
    sh "chmod +x ./uploadipa.sh && ./uploadipa.sh ../build/#{scheme}.ipa"
end

# 企業(yè)證書(shū)打包
def prepare_inhouse(op)
    scheme = ""
    if op[:env] == "ci"
        scheme = "ShowStart_3.0_PRO_CI"
    elsif op[:env] == "dev"
        scheme = "ShowStart_3.0_PRO_DEV"
    else
        scheme = "ShowStart_3.0_PRO"
    end

    gym(
      scheme: "#{scheme}",
      workspace: "ShowStart_3.0.xcworkspace",
      clean: true,
      export_method: "enterprise",
      output_directory: "build",
      include_bitcode: false,
      configuration: "Release"
    )
    # sh "chmod +x ./uploadipa.sh && ./uploadipa.sh ../build/#{scheme}.ipa"
    upload_inhouse(op)
end



# 正式環(huán)境證書(shū)打包
def prepare_adhoc(op)
    scheme = ""
    if op[:env] == "ci"
        scheme = "ShowStart_3.0_CI"
    elsif op[:env] == "dev"
        scheme = "ShowStart_3.0_DEV"
    else
        scheme = "ShowStart_3.0_PRO"
    end

    gym(
      scheme: "#{scheme}",
      workspace: "ShowStart_3.0.xcworkspace",
      clean: true,
      export_method: "ad-hoc",
      output_directory: "build",
      include_bitcode: false,
      configuration: "Release"
    )
    # sh "chmod +x ./uploadipa.sh && ./uploadipa.sh ../build/#{scheme}.ipa"
    upload_ipa(op)
end
# 修改 版本號(hào)和build號(hào)
def prepare_version(op)
    increment_version_number(
        version_number: op[:v]
    )

    increment_build_number(
        build_number: op[:b]
    )
end

platform :ios do
  before_all do
    # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
    # cocoapods
    # sh "chmod +x ./checkfile.sh && ./checkfile.sh"
  end

  desc "Build appstore"
  lane :appstore do |op|
      sh "chmod +x ./checkfile.sh && ./checkfile.sh"
      prepare_version(op)
      gym(
        scheme: "ShowStart_3.0",
        workspace: "ShowStart_3.0.xcworkspace",
        clean: true,
        export_method: "app-store",
        output_directory: "build",
        include_bitcode: false,
        configuration: "Release"
      )
  end

  desc "Build inhouse"
  lane :pro do |op|
      sh "chmod +x ./checkfile.sh && ./checkfile.sh"
      prepare_inhouse(op)
  end

  desc "Build adhoc"
  lane :adhoc do |op|
      sh "chmod +x ./checkfile.sh && ./checkfile.sh"
      prepare_adhoc(op)
  end

  desc "upload_inhouse"
  lane :uploadpro do |op|
      upload_inhouse(op)
  end

  desc "upload_ipa"
  lane :upload do |op|
      upload_ipa(op)
  end

  after_all do |lane|
      
  end

  error do |lane, exception|

  end
end

  • 如何執(zhí)行上面定義的lane呢?
#在工程根目錄下
fastlane pro env:ci
# 意思就是 執(zhí)行定義的lane為 :pro 的 
# env:ci 參數(shù) 
# 然后就會(huì)安裝你定義的lane里面流程運(yùn)行
  • 上傳到蒲公英,如果上傳成功則解析出安裝地址的二維碼鏈接,然后下載二維碼圖片,然后直接在terminal中展示
#!/bin/sh

echo "~~~~~~~~~~~~~~~~上傳ipa到蒲公英~~~~~~~~~~~~~~~~~~~"
echo "ipa 文件路徑"
echo $1

if [[ ! -f "$1" ]]
then
    echo "ipa 文件不存在"
    exit 0
fi
# 保存蒲公英上傳結(jié)果
result=""
qrcodepath=""
# 上傳蒲公英 并將結(jié)果賦值給 result變量
result=$(curl -F "file=@$1" \
-F "uKey=xxx" \
-F "_api_key=xxxx" \
-F "password=xxx" \
-F "isPublishToPublic=xx" \
https://qiniu-storage.pgyer.com/apiv1/app/upload --verbose)

if [ $? = 0 ]
then
    echo "\n~~~~~~~~~~~~~~~~上傳蒲公英成功~~~~~~~~~~~~~~~~~~~"
else
    echo "\n~~~~~~~~~~~~~~~~上傳蒲公英失敗~~~~~~~~~~~~~~~~~~~"
    exit 0
fi
# 提取二維碼地址
# 刪除 result 中的字符串 保留 "appQRCodeURL":" 之后的字符串  
qrcodepath=${result#*\"appQRCodeURL\":\"}
# echo $qrcodepath
# 刪除 qrcodepath 中的字符串 保留 "}} 之前的字符串  
qrcodepath=${qrcodepath%\"\}\}*}
# echo $qrcodepath
# 替換 \/ 為 /
qrcodepath=${qrcodepath//\\/}
# echo $qrcodepath
# 驗(yàn)證提取出來(lái)的地址的前綴是不是 http 
if [[ ! "$qrcodepath" =~ ^http ]]; then
    #statements
    echo "提取二維碼地址不對(duì)"
    exit 0
fi
# 下載二維碼
echo "二維碼地址:" $qrcodepath
# 使用 curl 下載 二維碼圖片并保存到當(dāng)前目錄下
curl -o code.jpg $qrcodepath

if [[ ! -f "./code.jpg" ]]
then
    echo "二維碼下載失敗"
    exit 0
else
    echo "二維碼下載成功"
    # 顯示二維碼
   # 調(diào)用 imgcat.sh 腳本 展示二維碼
   # imgcat 是網(wǎng)上找的一個(gè) https://github.com/Dorian/imgcat/blob/master/imgcat
    chmod +x ./imgcat.sh && ./imgcat.sh code.jpg
fi

exit 0

  • Fastfile 中調(diào)用的 checkfile.sh腳本,沒(méi)啥內(nèi)容就是檢查目錄的
#!/bin/sh

if [ -d "../build" ]
then
    rm -rf ../build
fi

  • 最終的效果
fastlane pro env:ci
# 稍等一下 執(zhí)行命令-->打包-->上傳蒲公英-->提取下載鏈接二維碼地址-->展示下載二維碼 全自動(dòng)完成
QQ20170426-173500@2x.png
  • 上面的步驟其實(shí)還可以簡(jiǎn)化
# 比如專門(mén)配置一臺(tái)Mac電腦并配置好`Jenkins`的一切,再搭配`fastlane`
# 配置Jenkins定時(shí)任務(wù) 比如每天 20:00 自動(dòng)開(kāi)始打包-->上傳分發(fā)平臺(tái)-->通知測(cè)試
# 也可給測(cè)試人員配置一個(gè)Jenkins賬號(hào),由測(cè)試人員登錄Jenkins 自己選擇性打包


# 也可以選擇用NodeJs 寫(xiě)一個(gè)webserver 配合 git hook 在提交時(shí)寫(xiě)入特定的信息 webserver 提取到特定信息后 開(kāi)始執(zhí)行任務(wù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末患民,一起剝皮案震驚了整個(gè)濱河市穿剖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖溅蛉,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杂腰,死亡現(xiàn)場(chǎng)離奇詭異朽合,居然都是意外死亡准验,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)舞骆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)钥弯,“玉大人径荔,你說(shuō)我怎么就攤上這事〈圉” “怎么了总处?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)绪穆。 經(jīng)常有香客問(wèn)我辨泳,道長(zhǎng)虱岂,這世上最難降的妖魔是什么玖院? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮第岖,結(jié)果婚禮上难菌,老公的妹妹穿的比我還像新娘。我一直安慰自己蔑滓,他們只是感情好郊酒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著键袱,像睡著了一般燎窘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蹄咖,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天褐健,我揣著相機(jī)與錄音,去河邊找鬼澜汤。 笑死蚜迅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俊抵。 我是一名探鬼主播谁不,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼徽诲!你這毒婦竟也來(lái)了刹帕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谎替,失蹤者是張志新(化名)和其女友劉穎偷溺,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體院喜,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亡蓉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喷舀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砍濒。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淋肾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出爸邢,到底是詐尸還是另有隱情樊卓,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布杠河,位于F島的核電站碌尔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏券敌。R本人自食惡果不足惜唾戚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望待诅。 院中可真熱鬧叹坦,春花似錦、人聲如沸卑雁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)测蹲。三九已至莹捡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扣甲,已是汗流浹背篮赢。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留文捶,地道東北人荷逞。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像粹排,于是被迫代替她去往敵國(guó)和親种远。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • 前言 眾所周知顽耳,現(xiàn)在App的競(jìng)爭(zhēng)已經(jīng)到了用戶體驗(yàn)為王坠敷,質(zhì)量為上的白熱化階段。用戶們都是很挑剔的射富。如果一個(gè)公司的推廣...
    偏偏就是禰閱讀 8,983評(píng)論 34 59
  • 前言 眾所周知膝迎,現(xiàn)在App的競(jìng)爭(zhēng)已經(jīng)到了用戶體驗(yàn)為王,質(zhì)量為上的白熱化階段胰耗。用戶們都是很挑剔的限次。如果一個(gè)公司的推廣...
    閑云清煙閱讀 2,518評(píng)論 1 4
  • 1.前言 前段時(shí)間應(yīng)測(cè)試要求,需要重復(fù)測(cè)試App安裝啟動(dòng),為了避免重復(fù)性的工作和節(jié)省時(shí)間卖漫,所以就想到了用 Fast...
    sessionCh閱讀 2,949評(píng)論 5 13
  • 1费尽、感恩媽媽為我們準(zhǔn)備了早餐,這幾天早上終于不用那么早起床了羊始。 2旱幼、感恩早上的一場(chǎng)大雨,讓悶熱的這幾天增添了幾分涼...
    淺笑嫣然love閱讀 160評(píng)論 0 0
  • 1突委、地址具有唯一性 2柏卤、地址具有層次性
    Missmiss懵閱讀 143評(píng)論 0 0