Fastlane使用總結(jié)(二)

常用命令:
fastlane actions: 展示所有有效action列表
fastlane action [action_name]: 展示一個(gè)action的詳細(xì)說明,使用方法等
fastlane lanes: 展示fastfile中的所有l(wèi)ane
fastlane list: 展示fastfile中的所有的有效的lane
fastlane new_action: 創(chuàng)建一個(gè)新的action
fastlane env: 打印fastlane、ruby環(huán)境,一般提bug到issue的時(shí)候會(huì)要求提供

生命周期:

執(zhí)行順序 方法名 說明
1 before_all 在執(zhí)行 lane 之前只執(zhí)行一次
2 before_each 每次執(zhí)行 lane 之前都會(huì)執(zhí)行一次
3 lane 自定義的任務(wù)
4 after_each 每次執(zhí)行 lane 之后都會(huì)執(zhí)行一次
5 after_all 在執(zhí)行 lane 成功結(jié)束之后執(zhí)行一次
6 error 在執(zhí)行上述情況任意環(huán)境報(bào)錯(cuò)都會(huì)中止并執(zhí)行一次

Sigh

如果你不確定證書目前是否可用,可以用Sigh自動(dòng)生成獲取證書。Sigh會(huì)自動(dòng)根據(jù)Appfile里設(shè)置的app_identifier從ADC(蘋果開發(fā)者中心)生成證書,并下載到項(xiàng)目根目錄下(不是fastlane目錄),下載后自動(dòng)安裝。你可以通過指定output_path指定證書下載位置。

PS:建議不要把這個(gè)文件夾同步到項(xiàng)目的git中(Fastlane提供了match專門管理所有證書)??梢栽?gitignore中可以忽略這個(gè)文件夾。

Sigh常用的配置項(xiàng):

Name Type Description Default
adhoc bool 獲取adhoc證書 fasle
development bool 更新開發(fā)證書,不更新production證書 false
force bool 強(qiáng)制更新證書,不管證書是否在ADC中存在 false

iOS里code打包證書有4種,adhoc,inhouse,appstore,development證書。

價(jià)格 AppStore證書 In-House證書 AdHoc證書 Development證書
企業(yè)帳戶 $299
公司賬號(hào) $99
個(gè)人賬戶 $99

其中In-House的方式打包的ipa安裝沒有設(shè)備的限制。AdHoc打包的ipa必須提前把設(shè)備的UDID添加到證書中,并且有100臺(tái)設(shè)備限制。

所以如果你不指定adhoctrue,Sigh會(huì)識(shí)別帳戶類型,企業(yè)帳戶默認(rèn)生成In-House證書,公司賬號(hào)和個(gè)人帳戶默認(rèn)生成AppStore證書。

Gym

Gym常用配置項(xiàng):

Name Type Description Default
scheme string 指定需要編譯的scheme
clean bool 是否在編譯前clean false
output_directory string 導(dǎo)出目錄 ./
output_name string 導(dǎo)出ipa名字 [app_name].ipa
export_options hash/string 這里指定Xcode API的外部配置文件地址,或者配置hash,見下文
export_method string 打包方式,可選項(xiàng)app-store ad-hoc package``enterprise``development``developer-id 如果在fastlane中使用了sigh,這個(gè)值會(huì)從上下文獲取
include_bitcode bool 是否開啟bitcode Xcode API 默認(rèn)值為true
include_symbols bool 是否生成符號(hào)表 Xcode API 默認(rèn)值為true

Xcode7之后,Xcode API允許我們指定一個(gè)plist文件作為額外的配置文件。gym默認(rèn)會(huì)幫你創(chuàng)建這個(gè)文件,你可以直接指定配置。更多關(guān)于plist可配置項(xiàng),執(zhí)行xcodebuild -help查看Available keys for -exportOptionsPlist。

export_method, include_symbols,和include_bitcode 這些參數(shù)都是exportOptionsPlist的配置,對(duì)應(yīng)method,uploadSymbolsuploadBitcode

Gym可以指定配置文件Gymfile。 初始化:

gym init

Firim

Fir.im是一個(gè)ipa托管網(wǎng)站。你可以用AdHoc或者In-House的方式打包,上傳到fir.im發(fā)送給測(cè)試人員測(cè)試。需要先注冊(cè)Fir.im帳戶,并生成Token。這種方式適合:

  • 小團(tuán)隊(duì) => 測(cè)試的機(jī)器數(shù)量很少并且非??煽?。直接連上開發(fā)機(jī),真機(jī)調(diào)試一次,就可以添加
  • 土豪 => 有企業(yè)帳戶可以打In-House的包

Firim常用配置項(xiàng):

Name Type Description Default
firim_api_token string 指定fir.im的token
ipa string ipa地址 如果使用gym,可以通過上下文獲取
icon string icon的path,注意這里有個(gè)非??拥牡胤剑琭ir.im只支持jpg格式的圖片

還有項(xiàng)如app_name等等,是用來配置fir.im頁面屬性的。firim --help

Firim的配置文件是Firimfile。初始化:

firim init

Firim是我完全仿照fastlane組件的方式寫的,所以也可以單獨(dú)作為CLI使用。

Deliver

Deliver可以完全管理與iTC的交互。其中包括:

  • 上傳和下載多語言截圖
  • 上傳和下載多語言元數(shù)據(jù)
  • 上傳二進(jìn)制文件

還記得上面初始化的時(shí)候初始化的metadata,screenshots目錄么?iTC中的所有的元數(shù)據(jù)信息都被保存在metadata中,所有的截圖信息都被保存在screenshots中。

metadata:

  • 可以很容易的管理對(duì)應(yīng)目錄下的文件和iTC后臺(tái)的表單項(xiàng),在執(zhí)行deliver時(shí)會(huì)自動(dòng)被傳到iTC。
  • metadata目錄下的文件,如copyright.txt,是沒有本地化的,在二層目錄中的文件都是需要對(duì)應(yīng)不同語言的表單項(xiàng)。
  • 如果你不想修改某些項(xiàng)的信息,直接把對(duì)應(yīng)的文件刪除即可。
  • 所有這些表單項(xiàng)也可以在Deliverfile中指定,Deliverfile中指定的項(xiàng)優(yōu)先級(jí)比文件高

screenshots:

  • 如果不想更改截圖,可以把整個(gè)截圖目錄刪除
  • 如果不使用snapshot(自動(dòng)化截圖),也可以自己截圖放到對(duì)應(yīng)目錄下,比一張一張上傳iTC快的多。截圖在iTC中的排列順序就是本地文件名的「字母表順序」(在目錄中右擊,按文件名排序)。deliver會(huì)識(shí)別圖片分辨率,上傳到對(duì)應(yīng)設(shè)備中。

如果要通過deliver修改元數(shù)據(jù)或截圖,你必須提供所有iTC后臺(tái)中有的語言。比如后臺(tái)中有「簡(jiǎn)體中文」和「英文」,你也必須提供對(duì)應(yīng)的zh-Hansen-US文件,否則deliver會(huì)報(bào)缺少語言的錯(cuò)誤??梢栽趇TC后臺(tái)提交的版本中刪除語言。

Deliver常用配置項(xiàng):

Name Type Description Default
ipa string ipa地址 如果使用gym,可以通過上下文獲取
metadata_path string 指定metadata目錄地址 如果在fastlane./fastlane/metadata,如果作為獨(dú)立的命令行應(yīng)用./metadata
screenshots_path string 指定screenshots目錄地址 如果在fastlane./fastlane/screenshots,如果作為獨(dú)立的命令行應(yīng)用./screenshots
skip_binary_upload bool 跳過二進(jìn)制文件上傳,適用于只想改metadata false
skip_screenshots bool 跳過截圖上傳,如果截圖沒有變化,開啟這項(xiàng)節(jié)約時(shí)間 false
skip_metadata bool 跳過元數(shù)據(jù)上傳 false
force bool deliver會(huì)在上傳時(shí)匯總信息生成HTML也,等待你審核。跳過這項(xiàng)審核此項(xiàng)設(shè)為true false
submit_for_review bool 上傳完成是否自動(dòng)提交審核 false
automatic_release bool 審核通過是否自動(dòng)釋放 false
price_tier int App價(jià)格級(jí)別。注意:這項(xiàng)提交當(dāng)時(shí)就會(huì)生效,所以更改價(jià)格還是在后天手動(dòng)操作
submission_information hash 這是在iTC上點(diǎn)擊提交之后的問答表格,可選項(xiàng)
app_review_information hash 提供審核時(shí)的信息,詳情
app_icon string 指定icon圖片地址,必須為png格式
  • submission_information =>

    • 前綴export_compliance => 對(duì)應(yīng)「出口合規(guī)信息」,沒有特殊情況都選false就可以。

    • 前綴content_rights => 問你是否包含,顯示,訪問第三方內(nèi)容(這項(xiàng)我沒在我提交過程中找到),沒有特殊情況也都選false就可以。

    • 前綴add_id_info => 可就關(guān)鍵了,對(duì)應(yīng)「廣告標(biāo)識(shí)符」,如果你在App中使用了IDFA。你必須在這給個(gè)理由,而不能直接選false。

      下圖等價(jià)下表,App中投放了廣告。

      [
      submission_information
        submission_information({

          export_compliance_available_on_french_store: "false",

          export_compliance_contains_proprietary_cryptography: "false",

          export_compliance_contains_third_party_cryptography: "false",

          export_compliance_is_exempt: "false",

          export_compliance_uses_encryption: "false",

          export_compliance_app_type: nil,

          export_compliance_encryption_updated: "false",

          export_compliance_compliance_required: "false",

          export_compliance_platform: "ios",

          content_rights_contains_third_party_content: "false",

          content_rights_has_rights: "false",

          add_id_info_limits_tracking: "true",

          add_id_info_serves_ads: "true",

          add_id_info_tracks_action: "false",

          add_id_info_tracks_install: "false",

          add_id_info_uses_idfa: "true"

deliverCLI工具:

  • 下載iTC上的截圖deliver download_screenshots
  • 下載iTC上的元數(shù)據(jù) deliver download_metadata

發(fā)布到App Store

lane :deploy do

  # 如果你用 pod install
  cocoapods

  # 不帶adhoc參數(shù),sigh會(huì)自動(dòng)生成App Store證書(公司或個(gè)人帳戶)
  sigh

  increment_build_number_in_plist(target: [target_name])

  increment_version_number_in_plist(
    target: [target_name],
    version_number: '7.1.3'
    )

  # 指定輸出目錄

  gym(
    output_directory: './build',
    )

  # 上傳所有信息到App Store
  deliver(force: true)

end

appicon插件

安裝 fastlane-plugin-appicon

fastlane add_plugin appicon

可能會(huì)報(bào)以下錯(cuò)誤ImageMagick/GraphicsMagick is not installed

  • 安裝GraphicsMagick:
brew install graphicsmagick
  • 卸載
brew uninstall imagemagick graphicsmagick libpng jpeg
brew cleanup -s

多scheme寫法

platform :ios do     #指定持續(xù)集成對(duì)象的平臺(tái)名稱
lane :dev do|options|      #給lane命名
branch = options[:branch]

#這里我們項(xiàng)目為了區(qū)分線上環(huán)境和測(cè)試環(huán)境,而做了兩個(gè)target
#關(guān)于target區(qū)分環(huán)境的方法,可以參考我同事的簡(jiǎn)書文章http://www.itdecent.cn/p/23cc84d40423
#下面代碼通過在終端輸入1或者其他數(shù)字來選擇要打包的target
#puts是ruby中的輸出,gets為獲取終端中輸入的文字,gets需要指定STDIN包中的gets方法,否則會(huì)識(shí)別為其他包中的gets方法,具體為什么我也不知道
puts "請(qǐng)選擇要打的scheme:(1:項(xiàng)目Target1,else: 項(xiàng)目Target2)"      
scheme = STDIN.gets
#  通過判斷輸入內(nèi)容,來區(qū)分一些打包信息,1后面加\n是因?yàn)樵诮K端輸入1再敲回車的時(shí)候scheme就包含了回車的內(nèi)容,所以scheme == "1\n"
if scheme == "1\n" 
#項(xiàng)目中target的名稱,以QQ為例,如果我的target叫QQ,則下面填寫QQ,如果是wechat,就填wechat
  schemeName = "項(xiàng)目Target1"
#打包的用途,也就是app-store, package, ad-hoc, enterprise, development這幾個(gè)中的一個(gè),這里我們項(xiàng)目的target1用的是公司帳號(hào),打的是開發(fā)包
  export_method = "development"      
 else
  schemeName = "項(xiàng)目Target2"
#這里我們項(xiàng)目的target2用的是企業(yè)帳號(hào),打的是企業(yè)包
  export_method = "enterprise"      
end

#從蒲公英平臺(tái)拿到的api_key和user_key,下面我會(huì)講怎么拿到這兩個(gè)key,存在下面兩個(gè)變量中
api_key = "xxxxxxxxxxxxxxxxxxx"
user_key = "xxxxxxxxxxxxxxxxxxx"



#輸入蒲公英上傳ipa包后輸入的版本描述信息
puts "請(qǐng)輸入版本描述:"
desc = STDIN.gets



puts "開始打包 #{schemeName}"
# 開始打包
gym(
#指定scheme的名字
scheme: "#{schemeName}",
#輸出的ipa名稱
output_name:"#{schemeName}",
# 是否清空以前的編譯信息 true:是
clean:true,
# 指定打包方式,Release 或者 Debug
configuration:"Release",
# 指定打包所使用的輸出方式,目前支持app-store, package, ad-hoc, enterprise, development
export_method:"#{export_method}",
# 指定輸出文件夾,這里會(huì)保存我們最后生成的ipa文件,也就是存到了我們上面提到的fastlane文件夾中的build文件夾中
output_directory:"./fastlane/build",
)

puts "開始上傳到蒲公英"
#開始上傳ipa到蒲公英,這里用的是蒲公英提供的插件
#update_description代表更新信息,password代表安裝密碼
pgyer(update_description: "#{desc}", api_key: "#{api_key}", user_key: "#{user_key}", password: "1111", install_type: "2")



#在上傳完ipa后,打開ipa的存放文件夾,起到提示上傳完成的作用
system "open ../fastlane/build"

end
end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 前言 應(yīng)公司項(xiàng)目要求,需要自動(dòng)化打包不同App,為了避免重復(fù)性的工作和節(jié)省時(shí)間,以下是研究和學(xué)習(xí)Fastla...
    奮斗的蝸牛閱讀 11,673評(píng)論 5 16
  • fastlane運(yùn)行所需要的環(huán)境: OS X 10.9以上 Ruby 2.0 以上 Xcode 擁有一個(gè)開發(fā)者賬號(hào)...
    阿姣_0405閱讀 3,258評(píng)論 0 4
  • 更新節(jié)點(diǎn):2019-05-15由于fastlane更新頻繁,已更新到 2.105.2 2.122.0更新內(nèi)容:fa...
    就叫yang閱讀 62,131評(píng)論 73 146
  • 摘要 手動(dòng)打包、手動(dòng)上傳是一件非常煩瑣的事件,通常會(huì)浪費(fèi)開發(fā)者大量的時(shí)間,這時(shí)候自動(dòng)打包與分發(fā)就起到的重要的角色。...
    Lxyang閱讀 1,511評(píng)論 3 4
  • 一、FastLane介紹 1.1 FastLane是什么? FastLane是一種配置iOS和Android自動(dòng)化...
    IT越越閱讀 1,329評(píng)論 0 2

友情鏈接更多精彩內(nèi)容