Flutter插件包開發中趟過的坑

首先說一下這個坑在iOS版的插件包中碰見的。從發現問題到截止到剛纔找到解決方案咱們兩個同事已經研究了兩三天,昨天下午我也投入到這個問題中一直到剛纔纔算解脫。廢話不說,看下坑:ios

  • 咱們在項目中用到了網絡電話功能,基於sip協議,以前實現過原生版功能,因此如今咱們用Flutter作項目時就把它作成Flutter的插件包進行使用:
  • 首先咱們建立插件包工程,這個過程上篇文章已經總結過再也不贅述,看下工程結構:

圖片描述

iOS版本的功能須要卸載ios目錄下面。如今咱們要實現的功能須要藉助第三方pod 'pjsip','~> 2.8.0' ,如何在插件包裏的iOS目錄裏引用第三方的pod,須要在 pjdemo/Pod 下的podspec配置文件中進行依賴編寫:
圖片描述xcode

而後咱們cd到 插件包目錄/example/ios下進行pod install操做安裝 pjsip這個第三方。成功後的目錄是這樣:
圖片描述網絡

如今咱們安裝了pjsip的文件,那麼咱們在iOS的文件裏引用這個第三方:好比在PjdemoPlugin.m中 導入 #include <pjsua-lib/pjsua.h> 。。。。。。。測試

  • 重點來了,不用編譯,連接時報錯!!! 'pjsua-lib/pjsua.h' file not found !!!!!

而後慢慢發如今主工程中調用是一點問題沒有的,可是如今是在作插件包,插件代碼必須寫在pod工程下固定的iOS目錄下才行。
就是這個問題困擾了咱們小夥伴將近三天時間,都是沒學幾天Flutter,因此邊作邊解決問題,並且這個問題也很怪異,其實我如今即便找到了解決方案但仍然感受很慶幸,也還有一些不解。測試了別的第三方庫,在引用別的三方庫時是沒有問題的,好比 Afnetworking Masonry等......ui

  • 這樣的問題知道是連接有問題,那麼就反覆地檢查xcode中 build setting 裏各類路徑配置,像 Header Search Path 等等這種:
    圖片描述

咱們反覆確認了不少遍xocde build setting 裏的配置是一點問題沒有的。最後怪圈裏轉了好久有點懵,只有一個問題其實,爲何pjdemo依賴了pjsip,主工程能調用pjdemo卻不能。最後想放棄的時候看了一眼主工程的pod相關文件和Pod工程裏的pod相關文件,看到了二者的xcconfig文件:
圖片描述
圖片描述
上面第一張圖是主工程的xcconfig,第二張圖是Pod工程裏 pjdemo的xcconfig 。很幸運我注意到了他們的HEADER_SEARCH_PATHS 後面的值,主工程裏的字段包含了pjsip目錄下全部的子目錄,而pjdemo裏確實只有一個pjsip根目錄。那麼根據連接原理頭文件搜索路徑 pjdemo裏是搜索不全的。因而從主工程裏把pjdemo裏沒有的sip子目錄複製到pjdemo下,編譯經過!!!在快要放棄的時候發現了細節,真的很幸運。spa

  • 那麼 xcconfig 和 xcode 的build setting裏的配置究竟是什麼關係呢?爲何二者有差別,起做用的究竟是哪一個優先級是怎樣?

xcconfig文件其實就是xcode裏的config文件,本質是一個用來保存Build Settings鍵值對的純文本文件。這些鍵值對覆蓋Build Settings中的值,因此當在xcconfig文件中配置了的選項,在Build Settings中設置將失效。插件

很強大..........3d

相關文章
相關標籤/搜索