iosflutter編譯
⑴ Flutter-自定義引擎流程(iOS)
當你發現Flutter Engine的bug並成功定位到crash的調用堆棧後,你可能需要自己重新編譯Flutter引擎。堆棧還原基本命令可以參考官方地址。
首先,確保安裝了depot_tools,並准備好CLion作為IDE,它對於Xcode友好,便於代碼跳轉。同時,使用V...P...N和FanQiang,並將其設置為全局模式以加速下載。了解gclient、gn、ninja的作用,閱讀官方文檔以獲取更多詳細信息。
配置gclient終端,創建.gclient文件,並指定你使用的引擎版本,如Flutter2.5.1。執行gclient sync命令,等待大約14G的文件下載,直到src/flutter成為引擎的git倉庫。
編譯過程分為幾個步驟。在解決m1的mac無法編譯的問題後,使用特定的解決辦法,成功在intel i5的電腦上編譯。在src目錄下,執行gn生成Xcode項目,用於debug時使用引擎源代碼,並確保編譯dart-sdk。
gn腳本參數如--goma和--no-goma、--no-dart-version-git-info等可幫助你根據需要調整編譯過程。遇到錯誤時,定位問題並更新buildroot或修改find_sdk.py中的正則判斷。執行ninja -C out/host_debug_unopt以編譯。
編譯完成後,使用python腳本工具src/flutter/sky/tools下的create_ios_framework.py和create_macos_gen_snapshots.py創建Flutter.xcframework和gen_snapshots。最終產物包大小優化實踐提供了關於gen_snapshot文件的詳細信息。
在需要debug的項目中,執行命令以更新Generated.xcconfig文件,然後在Xcode工程中拖入src/out/ios_debug_unopt下的flutter_engine.xcodeproj,實現debug。
在debug時注意,不能在非同步線程向flutter回調FlutterResult和FlutterEventSink。確保OC回調Flutter時通過傳過來的block參數,遵循正確的方式。
成功解決crash問題後,可以拉取特定git提交節點(如Flutter2.5.1版本)的分支提交自己的代碼。解決的crash問題包括後台渲染問題,crash率顯著下降。在github倉庫中分享了解決方案,包括修復內存泄露和其他優化提交。
繞過dart-sdk的版本校驗可以通過修改flutter/tools/gn命令參數和src/third_party/dart/sdk_args.gni配置項,確保flutter_patched_sdk不帶有git_short_hash,從而避免前端編譯時的dart內核版本校驗。具體校驗邏輯位於flutter_frontend_server中的代碼中。
了解這些步驟和技巧後,你將能夠解決或優化Flutter Engine中的問題,並確保應用程序的穩定性和性能。
⑵ 【Android開發學Flutter】Xcode編譯問題匯總
Xcode編譯經常遇到各種問題,處理起來費時費力,挺打擊學習積極性的。記錄下這些問題,方便自己也幫助後來人。
編譯的時候遇到:
網上有很多解決方法,我是用這個方法解決的:
編譯的時候遇到:
解決辦法:
Project -> User-Defined -> FLUTTER_ROOT 改成本地 flutter SDK路徑
感謝 issues 上的小哥,給你個🚀
在項目目錄下執行 flutter run 可以正常運行到手機,但是在Xcode build 還是有問題。
這時需要手動添加 FLUTTER_ROOT 到 User-Defined :
添加之後:
就可以正常在Xcode build 安裝到手機了。
flutter build ios 後出現:
pod install 後出現:
解決辦法:
這是因為terminal沒有走代理的流量,
使用 git config --global http.proxy "localhost:port" ,設置代理。
port是埠號,根據不同的vpn不一樣,我的埠是10080。
執行 git config --global http.proxy "localhost:10080"
Xcode build 的時候出現:
解決辦法:打開 ios/Podflie 文件:
關於 bitcode 的問題,我檢查了下用到的第三方SDK,應該是網路地圖的問題,我引入了個第三方插件(吐槽下沒官方插件),網路地圖有支持和不支持 bitcode 的兩個SDK,我取消這個插件就沒有報這個錯了,奇怪的是,再次引入同一個插件,也可以正常打包,所以說這個問題還沒有完全解決。
大家可以試下這個處理方法:
TARGETS -> Build Seettings 搜 arm ,試一下把其他刪除,只留下armv7跟armv7s或者只留下armv7
解決辦法:
https://www.jianshu.com/p/201df7e9a52f
我是clean Xcode之後就可以了
解決辦法:
用的是P12證書,改成手動簽名: