使用Fastlane實(shí)現(xiàn)iOS項(xiàng)目自動打包

有的公司分工比較細(xì)护姆,諸如項(xiàng)目打包矾端、發(fā)布這些工作,都會有專門的測試人員去負(fù)責(zé)卵皂,這就為開發(fā)人員省去了大部分時間秩铆。當(dāng)然,當(dāng)你看到這篇文章時灯变,就證明你所在的公司并不是這樣殴玛。


不過不要擔(dān)心,既然你找到了我添祸,我就將Fastlane的使用技巧傳授給你族阅。

Fastlane是麻省理工學(xué)院批準(zhǔn)的開源項(xiàng)目,可以將Mac膝捞、iOS坦刀、android項(xiàng)目的自動打包、發(fā)布等一系列繁瑣的任務(wù)自動化蔬咬。

Fastlane安裝

  • 打開終端輸入xcode-select --install鲤遥,若提示如下圖,則說明已經(jīng)安裝了Xcode命令行工具林艘;否則會彈出對話框盖奈,選擇安裝即可。


  • 輸入ruby -v查看ruby版本狐援,要求2.0及以上版本钢坦。可以通過gem管理ruby版本啥酱,這里需要注意的是爹凹,ruby的鏡像文件路徑已經(jīng)改為https://gems.ruby-china.org/
  • 輸入sudo gem install fastlane -NV ,通過gem安轉(zhuǎn)fastlane镶殷。最近因?yàn)閄code 9的問題禾酱,升級了fastlane。


Fastlane配置

  • 打開終端绘趋,切換目錄到包含xxx.xcodeproj的項(xiàng)目目錄下輸入fastlane init颤陶,期間會讓輸入Apple ID(開發(fā)者賬號)及app_identifier等信息,可以根據(jù)需要自行選擇填寫陷遮。最后會在當(dāng)前目錄下生成fastlane文件夾滓走。
  • 進(jìn)入fastlane文件夾,打開Appfile文件帽馋,里面是剛剛填寫的一些信息搅方∫咧啵可以在里面配置多個app_identifier、apple_id信息腰懂。


  • 打開Fastfile文件梗逮,里面便是自動生成的fastlane使用方法,當(dāng)然绣溜,需要根據(jù)需要進(jìn)行修改慷彤。

在編寫fastfile文件之前,需要說明一下怖喻,F(xiàn)astlane著實(shí)太強(qiáng)大底哗,因此本文只介紹其中的一種方法:本機(jī)已經(jīng)安裝Signing Certificate及其對應(yīng)的Provisioning Profile,也就是說打開Xcode锚沸,將Automatically manage signing選項(xiàng)去掉跋选,手動進(jìn)行選擇,且能編譯運(yùn)行哗蜈。


Fastfile文件的編寫

  • App Store版本
    # You can define as many lanes as you want
    desc "Deploy a new version to the App Store"
    lane :release do |op|
    increment_version_number(version_number: op[:version]) #根據(jù)入?yún)ersion獲取app版本號
    increment_build_number(build_number: op[:version]) #將build號設(shè)置與app版本號相同

        # 設(shè)置app的info.plist文件項(xiàng)
        set_info_plist_value(path: "./xxx/Info.plist",  #info.plist文件目錄
                            key: "UIFileSharingEnabled",  # key前标,將plist文件以Source Code形式打開可查詢對應(yīng)的key
                            value: false)  # value
    
        # 設(shè)置自定義plist文件項(xiàng),用于給app配置不同的服務(wù)器URL
        set_info_plist_value(path: "./xxx/hostAddress.plist",
                            key: "host",
                            value: "https:/zhengshiServer:xx/xxx/xxx")
    
        # 設(shè)置某些服務(wù)是否有效
        # 還可以使用modify_services距潘,具體參考官網(wǎng)相關(guān)文檔
        produce(
            enable_services:{
                push_notification: "on",
           }
        )
    
        # 更新Provisioning Profile
        # 在項(xiàng)目當(dāng)前目錄下創(chuàng)建provisions文件夾炼列,并將App Store版本的.mobileprovision文件保存在里面,名稱隨意音比。
        update_project_provisioning(profile: "./provisions/appstore.mobileprovision")
    
        # 更新項(xiàng)目團(tuán)隊(duì)
        update_project_team(path: "xxx.xcodeproj",
                      teamid: "5JC8GZ432G")
    
        # 開始打包
        gym(# use_legacy_build_api: true,  # Xcode 9之后俭尖,需要去掉
            output_name: "appstore",  # 輸出的ipa名稱
            silent: true,  # 隱藏沒有必要的信息
            clean: true,  # 在構(gòu)建前先clean
            configuration: "Release",  # 配置為Release版本
            codesigning_identity: "iPhone Distribution: xxx Co.,Ltd. (5JC8GZ432G)",  # 代碼簽名證書
            buildlog_path: "./fastlanelog",  # fastlane構(gòu)建ipa的日志輸出目錄
            export_method: "app-store", # Xcode 9增加export_method標(biāo)簽
            output_directory: "/Users/xxx/Desktop")  # ipa輸出目錄
    
    end
    
  • Development版本
    desc "Build a new version use the ceshi"
    lane :ceshi do |op|
    increment_version_number(version_number: op[:version])
    increment_build_number(build_number: op[:version])

        set_info_plist_value(path: "./xxx/Info.plist",
                            key: "UIFileSharingEnabled",
                            value: true)
    
        set_info_plist_value(path: "./xxx/hostAddress.plist",
                            key: "host",
                            value: "https:/ceshiServer:xx/xxx/xxx")
    
        # 設(shè)置某些服務(wù)是否有效
        # 還可以使用modify_services,具體參考官網(wǎng)相關(guān)文檔
        produce(
            enable_services:{
                push_notification: "off",
            }
        )
    
        # 將Development版本的.mobileprovision文件保存在里面洞翩,名稱隨意稽犁。
        update_project_provisioning(profile: "./provisions/development.mobileprovision")
    
        update_project_team(path: "xxx.xcodeproj",
                      teamid: "5JC8GZ432G")
    
        gym(# use_legacy_build_api: true,
            output_name: "ceshi",
            silent: true,
            clean: true,
            configuration: "Debug",
            buildlog_path: "./fastlanelog",
            codesigning_identity: "iPhone Developer: xxx (xxxxxxxxxx)",
            export_method: "development", # Xcode 9增加export_method標(biāo)簽
            output_directory: "/Users/xxx/Desktop"
      )
    end
    
  • 其他版本類似,此處不在給出骚亿。其中export_method標(biāo)簽對應(yīng)的值有:

    1. export_method: "development"
    2. export_method: "enterprise"
    3. export_method: "app-store"
  • 批量處理
    desc "build all version ipa"
    lane :all do |op|
    t = op[:version]
    ceshi version:t
    release version:t
    end

Fastlane使用

最后已亥,只需在終端(相關(guān)項(xiàng)目目錄下)輕輕敲入:
fastlane ceshi version:1.0.0 // 打包c(diǎn)eshi環(huán)境ipa,app版本號為1.0.0
fastlane release version:1.0.0 // 打包App Store版本ipa循未,app版本號為1.0.0
fastlane all version:1.0.0 // 打包c(diǎn)eshi陷猫、App Store版本ipa秫舌,app版本號為1.0.0

我們便可以去喝咖啡了的妖,執(zhí)行打包過程就交給fastlane去完成,是不是很爽足陨?



Fastlane還有很多的功能供大家使用嫂粟,比如match(能夠使團(tuán)隊(duì)通過git同步證書和配置文件)、sigh(生成配置文件)零抬、snapshot(生成截圖)以及git的一些相關(guān)操作等等平夜。大家可以到GitHub或者官網(wǎng)進(jìn)行相關(guān)知識的學(xué)習(xí)。

授人以魚不如授人以漁卸亮,傳送門獻(xiàn)上:
GitHub_Fastlane工具文檔
Fastlane官網(wǎng)


關(guān)注微信公眾號CodingArtist忽妒,可以第一時間得到文章更新通知! _

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市兼贸,隨后出現(xiàn)的幾起案子段直,更是在濱河造成了極大的恐慌,老刑警劉巖溶诞,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸯檬,死亡現(xiàn)場離奇詭異,居然都是意外死亡螺垢,警方通過查閱死者的電腦和手機(jī)喧务,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枉圃,“玉大人蹂楣,你說我怎么就攤上這事⊙镀眩” “怎么了痊土?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長墨林。 經(jīng)常有香客問我赁酝,道長,這世上最難降的妖魔是什么旭等? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任酌呆,我火速辦了婚禮,結(jié)果婚禮上搔耕,老公的妹妹穿的比我還像新娘隙袁。我一直安慰自己,他們只是感情好弃榨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布菩收。 她就那樣靜靜地躺著,像睡著了一般鲸睛。 火紅的嫁衣襯著肌膚如雪娜饵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天官辈,我揣著相機(jī)與錄音箱舞,去河邊找鬼遍坟。 笑死,一個胖子當(dāng)著我的面吹牛晴股,可吹牛的內(nèi)容都是我干的愿伴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼电湘,長吁一口氣:“原來是場噩夢啊……” “哼公般!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胡桨,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤官帘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后昧谊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刽虹,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年呢诬,在試婚紗的時候發(fā)現(xiàn)自己被綠了涌哲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡尚镰,死狀恐怖阀圾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狗唉,我是刑警寧澤初烘,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站分俯,受9級特大地震影響肾筐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缸剪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一吗铐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杏节,春花似錦唬渗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至卒稳,卻和暖如春蹋半,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背充坑。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工减江, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捻爷。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓辈灼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親也榄。 傳聞我的和親對象是個殘疾皇子巡莹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354

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