在iOS專案中依賴Flutter Module-②遠端依賴Git資源

JK_溪楓發表於2021-08-12

在上一篇<在iOS專案中依賴Flutter Module-①本地依賴>整理了3種本地依賴方案,這篇則會實現一種簡單但不好用的遠端依賴方案。上篇中說到執行flutter build ios-framework可編譯得到.xcframework產物,遠端依賴的思路有就是把編譯產物放到遠端Git或者遠端檔案伺服器上,並做版本管理,iOS端通過CocoaPods從Git或者檔案伺服器上拉取.xcframework產物匯入到專案中。

目前我找到4種遠端依賴方案,這篇介紹第1種方案,如果想提前看其它方案,請進傳送門?

  1. 遠端依賴Git上的.xcframework和.podspec
  2. 本地.podspec中轉依賴遠端Git上的.xcframework
  3. 本地.podspec中轉依賴遠端檔案伺服器上的.xcframework.zip壓縮檔案
  4. 本地.podspec中轉依賴遠端檔案伺服器上的Flutter.xcframework.zip + Git上的其它.xcframework

遠端依賴Git上的.xcframework和.podspec

準備階段

跟上篇一樣,先建立一個Flutter Module;

cd some/path/
flutter create --template module flutter_module
複製程式碼

flutter_module目錄的結構如下,.../flutter_module/lib/裡面放到的就是我們寫的dart檔案。

some/path/
├── flutter_module
│   ├── README.md
│   ├── build
│   ├── flutter_module.iml
│   ├── flutter_module_android.iml
│   ├── lib
│   ├── pubspec.lock
│   ├── pubspec.yaml
│   └── test
複製程式碼

建好flutter_module後,隨便加點flutter程式碼和第三方元件(比如flutter_boost)。

要把編譯產物放到遠端Git,我們還得建一個Git倉庫,比如叫FlutterModuleSDK.git,建好git之後克隆到本機,這個本地目錄就用來接收編譯產物。

開工

先編譯flutter_module,指定匯出路徑為本地FlutterModuleSDK.git根目錄,這裡用的是相對路徑../../FlutterModuleSDK/

cd flutter_module/
flutter build ios-framework --xcframework --no-universal --output=../../FlutterModuleSDK/
複製程式碼

編譯完成後會在FlutterModuleSDK目錄增加下面這些檔案,為了減少檔案大小,只需要用Release下面的4個.xcframework即可,把這4個.xcframework移動到FlutterModuleSDK根目錄,然後刪除Debug/Profile/Release3個資料夾,不需要用了。

image.png

Flutter.xcfromework可以通過上面的編譯指令直接得到,還可以通過下面的指令編譯後下載zip檔案得到,中間多了一個--cocoapods選項,我個人測試的時候就是這個編譯指令,然後下載zip解壓得到Flutter.xcfromework

flutter build ios-framework --cocoapods --xcframework --no-universal --output=../../FlutterModuleSDK/
複製程式碼

到這一步,FlutterModuleSDK根目錄下面除了.git就只有幾個*.xcfromework檔案。

Flutter.xcfromework
App.xcframework
FlutterPluginRegistrant.xcframework
其它第三方庫 比如 flutter_boost.xcframework
複製程式碼

為了通過CocoaPods遠端依賴,還需要建立.podspec檔案。在FlutterModuleSDK根目錄下建立FlutterModuleSDK.podspec,描述檔案的大致主要內容如下,具體的配置項跟釋出CocoaPods元件庫是一樣的,核心區別就是s.vendored_frameworks = '*.xcframework',這個庫裡面只有.xcframework檔案,沒有其它的程式碼檔案。

Pod::Spec.new do |s|
  s.name                  = 'FlutterModuleSDK'
  s.version               = '1.0.2'
  s.summary               = 'Flutter Module SDK'
  s.source                = { :git => 'https://a.gitlab.cn/flutter/FlutterModuleSDK.git', :tag => "#{s.version}" }
  s.platform              = :ios, '8.0'
  s.requires_arc          = true
  s.vendored_frameworks   = '*.xcframework'
end
複製程式碼

然後提交git,並打上對應的版本標籤,push到遠端倉庫FlutterModuleSDK.git

經過漫長等待...       # Flutter.xcfromework檔案非常大,上傳到Git會很慢
複製程式碼

如果push成功,就完成了將產物推到雲端的步驟,後面的操作就輪到iOS端來執行。

Podfile中新增依賴

pod 'FlutterModuleSDK', :git => 'https://a.gitlab.cn/flutter/FlutterModuleSDK.git', :tag => '1.0.1'
複製程式碼

拉取元件庫,pod install or update,即可執行專案。

小結

除了準備階段,這個方案主要步驟可以分3步,麻煩一點就是提取產物,然後上傳、下載都會很慢。

[1.編譯]:編譯FlutterModule
[2.釋出] 收集產物推到雲端Git
[3.更新程式碼] iOS端更新CocoaPods

優點:所有Flutter編譯出來的framework都放到了git,方便統一進行版本管理,Flutter開發可以和iOS開發相互獨立,也不用所有iOS開發人員都安裝Flutter開發環境,也避免了iOS側因Flutter版本不一致出現問題。

缺點Flutter.xcframework檔案太大,沒有壓縮,上傳到git / 從git克隆下載下來很費時。如果Git有單個檔案大小限制,那還Push不了。

後面的文章會介紹本地podspec中轉依賴遠端資源的方案,來避免`.xcframework`檔案太大影響上傳下載的問題。
複製程式碼

相關文章