Flutter在iOS中一些點


1. ios對Flutter有如下依賴

  • Flutter.framework:     Flutter engine等;
  • APP.framework:業務代碼, 由dart代碼生成。App.framework也包含了kDartVmSnapshotData,kDartVmSnapshotInstructions,kDartIsolateSnapshotData,kDartIsolateSnapshotInstructions四個部分 ;
  • Flutter Plugin: plugin相關;
  • flutter_assets:  Flutter依賴的靜態資源,如字體,圖片等。

2.  iOS工程是怎么路由到dart的?

(1)ios初始化flutterVC

FlutterViewController* flutterViewController = [[FlutterViewController alloc] initWithProject:nil nibName:nil bundle:nil];
[flutterViewController setInitialRoute:@"myApp"];

(2)dart項目的main函數啟動並由window.defaultRouteName拿到route

void main() {
      runApp(_buildWidget());
}
Widget _buildWidget() {
     String route = window.defaultRouteName;
     ....
     return widget;
}

(3)Flutter.framework渲染頁面

 3. kernel_blob.bin文件的作用是什么?為什么模擬器運行需要此文件,真機運行不需要此文件?

  kernel_blob.bin是業務代碼的產物 Dart kernel bytecode ,在debug調試的時候,Dart的代碼有改動,則 kernel_blob.bin也會有相應的改變。release模式(AOT模式)下,dart編譯器會用Dart kernel bytecode編譯成二進制的arm集成代碼。

   也就是說,模擬器運行是Debug模式(JIT模式),業務代碼的來源是需要兩個文件,一個是APP.framework里的App二進制代碼一個是kernel_blob.bin。而真機運行是release模式(AOT模式),直接可以運行APP.framework里的App二進制代碼。所以模擬器需要kernel_blob.bin文件,真機不需要kernel_blob.bin文件。

 4. Flutter項目里構建iOS包的常用命令

  4.1  flutter build

(1)flutter build ios

lipo -info .ios/Flutter/App.framework/APP  查看結果是armv7 arm64

題外話:pod package打包iOS framework命令

pod package hummer_container.podspec.json --spec-sources='git@gitlab.alipay-inc.com:ifoundation-ios/Specs.git' --no-mangle --force

(2)flutter build ios --debug 

lipo -info .ios/Flutter/engine/Flutter.framework/Flutter  查看結果是x86_64 armv7 arm64 

(3) flutter build ios --simulator   

 lipo -info .ios/Flutter/App.framework/APP  查看結果是 x86_64

  4.2 flutter packages

(1)flutter packages get

當你在添加一個包后首次運行(IntelliJ中的’Packages Get’)flutter packages get,Flutter將找到包的版本保存在pubspec.lock。這確保了如果您或您的團隊中的其他開發人員運行flutter packages get后回獲取相同版本的包。

(2)flutter packages upgrade

根據pubspec.yaml中指定的版本約束下載所允許的最高可用版本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM