使用Fastlane實現iOS項目自動打包

有的公司分工比較細,諸如項目打包、發布這些工作,都會有專門的測試人員去負責,這就為開發人員省去了大部分時間。當然,當你看到這篇文章時,就證明你所在的公司并不是這樣。


不過不要擔心,既然你找到了我,我就將Fastlane的使用技巧傳授給你。

Fastlane是麻省理工學院批準的開源項目,可以將Mac、iOS、android項目的自動打包、發布等一系列繁瑣的任務自動化。

Fastlane安裝

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


  • 輸入ruby -v查看ruby版本,要求2.0及以上版本。可以通過gem管理ruby版本,這里需要注意的是,ruby的鏡像文件路徑已經改為https://gems.ruby-china.org/
  • 輸入sudo gem install fastlane -NV ,通過gem安轉fastlane。最近因為Xcode 9的問題,升級了fastlane。


Fastlane配置

  • 打開終端,切換目錄到包含xxx.xcodeproj的項目目錄下輸入fastlane init,期間會讓輸入Apple ID(開發者賬號)及app_identifier等信息,可以根據需要自行選擇填寫。最后會在當前目錄下生成fastlane文件夾。
  • 進入fastlane文件夾,打開Appfile文件,里面是剛剛填寫的一些信息。可以在里面配置多個app_identifier、apple_id信息。


  • 打開Fastfile文件,里面便是自動生成的fastlane使用方法,當然,需要根據需要進行修改。

在編寫fastfile文件之前,需要說明一下,Fastlane著實太強大,因此本文只介紹其中的一種方法:本機已經安裝Signing Certificate及其對應的Provisioning Profile,也就是說打開Xcode,將Automatically manage signing選項去掉,手動進行選擇,且能編譯運行。


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]) #根據入參version獲取app版本號
    increment_build_number(build_number: op[:version]) #將build號設置與app版本號相同

        # 設置app的info.plist文件項
        set_info_plist_value(path: "./xxx/Info.plist",  #info.plist文件目錄
                            key: "UIFileSharingEnabled",  # key,將plist文件以Source Code形式打開可查詢對應的key
                            value: false)  # value
    
        # 設置自定義plist文件項,用于給app配置不同的服務器URL
        set_info_plist_value(path: "./xxx/hostAddress.plist",
                            key: "host",
                            value: "https:/zhengshiServer:xx/xxx/xxx")
    
        # 設置某些服務是否有效
        # 還可以使用modify_services,具體參考官網相關文檔
        produce(
            enable_services:{
                push_notification: "on",
           }
        )
    
        # 更新Provisioning Profile
        # 在項目當前目錄下創建provisions文件夾,并將App Store版本的.mobileprovision文件保存在里面,名稱隨意。
        update_project_provisioning(profile: "./provisions/appstore.mobileprovision")
    
        # 更新項目團隊
        update_project_team(path: "xxx.xcodeproj",
                      teamid: "5JC8GZ432G")
    
        # 開始打包
        gym(# use_legacy_build_api: true,  # Xcode 9之后,需要去掉
            output_name: "appstore",  # 輸出的ipa名稱
            silent: true,  # 隱藏沒有必要的信息
            clean: true,  # 在構建前先clean
            configuration: "Release",  # 配置為Release版本
            codesigning_identity: "iPhone Distribution: xxx Co.,Ltd. (5JC8GZ432G)",  # 代碼簽名證書
            buildlog_path: "./fastlanelog",  # fastlane構建ipa的日志輸出目錄
            export_method: "app-store", # Xcode 9增加export_method標簽
            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")
    
        # 設置某些服務是否有效
        # 還可以使用modify_services,具體參考官網相關文檔
        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標簽
            output_directory: "/Users/xxx/Desktop"
      )
    end
    
  • 其他版本類似,此處不在給出。其中export_method標簽對應的值有:

    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使用

最后,只需在終端(相關項目目錄下)輕輕敲入:
fastlane ceshi version:1.0.0 // 打包ceshi環境ipa,app版本號為1.0.0
fastlane release version:1.0.0 // 打包App Store版本ipa,app版本號為1.0.0
fastlane all version:1.0.0 // 打包ceshi、App Store版本ipa,app版本號為1.0.0

我們便可以去喝咖啡了,執行打包過程就交給fastlane去完成,是不是很爽?



Fastlane還有很多的功能供大家使用,比如match(能夠使團隊通過git同步證書和配置文件)、sigh(生成配置文件)、snapshot(生成截圖)以及git的一些相關操作等等。大家可以到GitHub或者官網進行相關知識的學習。

授人以魚不如授人以漁,傳送門獻上:
GitHub_Fastlane工具文檔
Fastlane官網


關注微信公眾號CodingArtist,可以第一時間得到文章更新通知! _

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,237評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,957評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,248評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,356評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,081評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,485評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,534評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,720評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,263評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,025評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,204評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,787評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,461評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,874評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,105評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,945評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,205評論 2 375

推薦閱讀更多精彩內容