iOS老專案整合Flutter產物 pod整合

2021-10-20 09:59:14 字數 4005 閱讀 1909

摘要:

~~~~~~

理想的ios原生整合flutter,需要滿足一下條件:1.flutter模組由單獨一位同學負責維護,其他同學不關心flutter模組; 2. 考慮到flutter環境的版本問題,其他同學不需安裝flutter環境,避免flutter版本差異產生未知問題; 3.負責flutter模組的同學不需要過多手動操作,就可以方便實現flutter模組的開發,除錯,迭代。

~~~~~~

本文主要講解我個人使用的ios與flutter整合方案,已在專案中實施,暫時未產生問題,如果有問題,歡迎來溝通。另外,個人寫了一套python指令碼來支援此方案,如果沒有指令碼能力,不建議嘗試此方案。此文章僅做拋磚引玉,歡迎各位大牛來指正。

ios原生整合flutter產出的本質

ios整合flutter模組,本質上是ios工程嵌入flutter工程產出的多個framework。

flutter環境給出了乙個podhelper.rb的ruby指令碼,幫助ios整合flutter。指令碼使用方式如下,【在podfile檔案,編寫如下**】: =

'../flutter_module_***x'

defflutter_source_project_embased_function()

load file

.join

(, 『.ios』, 『flutter』, 『podhelper.rb』)

install_all_flutter_pods()

endtarget 'fflutterkit'

do flutter_source_project_embased_function

end終端執行

pod install –verbose
之後檢視ios工程目錄,會產生如下資料夾:

至於為什麼是development pods,這需要分析podhelper.rb指令碼,可以發現如下語句:

pod plugin_name,

:path

=>

file

.join

(symlink,

'ios'),

:inhibit_warnings

=>

true

~~~~~~

以上簡單分析了通過podhelper.rb指令碼整合flutter模組。此方式有個問題, 每個同學的電腦都需要安裝flutter環境,而flutter環境是存在版本差異的,且更新比較快。故,這種方式不是理想的整合方式。

理想的整合方式,應當滿足如下要求:

~~~

1. flutter模組由單獨一位同學負責維護,其他同學不關心flutter模組。

~~~

2. 考慮到flutter環境的版本問題,其他同學不需安裝flutter環境,避免flutter版本差異產生未知問題。

~~~

3. 負責flutter模組的同學不需要過多手動操作,就可以方便實現flutter模組的開發,除錯,迭代。

~~~~~~

那麼重頭戲來了。

~~~~~~

我們換個思路,我們是不是可以自己把這些flutter產出的.podspec檔案篩選出來, 並把每個.podspec檔案對應的資源檔案、**檔案以及二進位制檔案也篩選出來,製作為私有pod,通過cocoapod整合這些私有pod。如此一來,整合flutter就變得和整合常規pod一樣簡單了。

~~~~~~

如果可以,我們是否可以通過編寫指令碼,將這些步驟自動化執行,工程師只需要簡單一條指令,就可以去喝茶了,坐等指令碼成功。好訊息是,此想法已在我的專案中實現,且已線上驗證。

~~~~~~

至於製作私有pod,此處不做贅述,有需要的同學,需要去問度娘 『ios 私有pod製作』以及『.podspec檔案語法』,建議檢視cocoapods官網

下面來分析一下需要做的工作:

~~~

1. 篩選出每個.podspec檔案;

~~~

2. 解析每個.podspec檔案,收集每個.podspec檔案關聯到的檔案;

~~~

3. 整理每個.podspec檔案以及其資源檔案,形成自己的私有pod;

~~~

4. 將每個.podspec製作為私有pod,並交由git管理;ios原生專案整合私有pod

以下是重頭戲,請仔細品味

篩選出.podspec檔案

分析flutter module工程,會發現,所有關於ios的產出,都集中在.ios資料夾下。我們可以以此為切入點來搜尋.podspec格式的檔案。

此處有個問題, flutter也有很多三方供開發者使用,隨著專案的迭代,可能會增加或刪除flutter三方,就導致了.podspec檔案個數的變化。 故,篩選出來的.podspec檔案個數是不確定的。而且.podspec檔案所處的目錄層級也是不確定的。~

**解析.podspec檔案

.podspec檔案是ruby指令碼檔案,不容易解析。但是,cocoapods提供了指令,可以將.podspec轉換為.json檔案, 而cocoapods本省是可以解析.podspec.json格式的檔案。 github官方的spec索引檔案最終也是轉換成了.podspec.json檔案。 轉換指令如下:

pod ipc spec ***.podspec >

> ***.podspec.json

檔案轉化為.json格式,下一步就好做了,分析json中引用了哪些路徑的問題,把這些檔案暫存起來,為製作私有pod做準備**

3.為每個.podspec檔案製作私有pod

flutter產生的.podspec檔案數目是不確定的,這就意味著,我們製作的私有pod的個數是存在變化的, 那麼如何交由git管理呢,難道要為每個私有pod都創乙個git倉庫? 這不是我們想要的, 我的目標是乙個git倉庫來管理多個私有pod。 幸運的是通過檢視cocoapods官網,我找到了解決辦法。 我最終產出的目錄結構如下:~

此處有個細節,我將每個.podspec.json檔案放在了git倉庫的根目錄,每個.podspec檔案的資源檔案放在了與pod同名的乙個資料夾下統一管理, 並在解析.podspec.json檔案時候,對資源檔案的路徑做了修改,新添了名稱的層級,如圖:

原始:~

修改後:~

4.私有pod的git管理

將.podspec檔案解析並修改後,放置在乙個git倉庫中,並將對應的資源檔案也放置在這個git倉庫中。 每次flutter模組打包後,都篩選,解析一次spec檔案, 並修改版本號。

6.如果專案配置了打包機,且打包機負責flutter模組的打包,那麼負責flutter模組的同學,只需要保證打包機的flutter環境版本無誤, 其他不負責甚至不懂flutter開發的同學也可以打包flutter模組。

~~~

iOS專案整合flutter

1.建立flutter module 假設我們已經有了乙個ios專案,路徑為 path nativeaddflutter test 工程名 那我們要在testflutter同級目錄下建立 flutter module cd users huangzengsong desktop nativeaddf...

為現有 iOS專案整合 Flutter

flutter 0.5.1 xcode 9.4.1 flutter工程 flutter examples hello world 首先,在你的專案裡面拖入flutter.framework,這個庫是 flutter engine,承載了 dart執行時和繪圖引擎。flutter.framework和...

iOS專案中整合Flutter的最新適配公升級

如果你在2019年8月之前將flutter新增到現有ios專案,本文值得你一看。在2019年7月30日,合併合併 請求flutter flutter 36793 之前flutter 1.8.4 pre.21,將flutter新增到現有的ios應用程式需要更改podfile,並在現有xcode專案中新...