今天接入flutter的第三方插件app_settings時(shí),由于自己的粗心導(dǎo)致了一個(gè)bug,特此記錄一下。以前app中也接入過app_settings邓梅,沒有遇到任何問題脱盲,但是這次接入一直報(bào)錯(cuò)如下:
/Applications/flutter/.pub-cache/hosted/pub.flutter-io.cn/app_settings-4.1.1/ios/Classes/AppSettingsPlugin.m:2:9: fatal error: 'app_settings/app_settings-Swift.h' file not found
#import <app_settings/app_settings-Swift.h>
百思不解姐,如是又開始去看接入的文檔最后發(fā)現(xiàn)是因?yàn)樵趚xx/iOS/Podfile文件里面少寫了一行代碼,因?yàn)橐郧敖尤脒^就大意了,加入的代碼是:use_frameworks!
問題算是解決了,但是為什么會(huì)這樣呢,我們習(xí)以為常的use_frameworks!有什么作用呢,知其然也要知其所以然,帶著疑問我進(jìn)行了下一步的探索 日缨。
首先我們要了解下靜態(tài)庫和動(dòng)態(tài)庫還有Framework钱反。
靜態(tài)庫:(.a)在編譯時(shí)會(huì)將庫copy一份到目標(biāo)程序中,編譯完成之后殿遂,目標(biāo)程序不依賴外部的庫诈铛,也可以運(yùn)行。缺點(diǎn): 會(huì)使應(yīng)用程序變大墨礁。
動(dòng)態(tài)庫:(.dylib)編譯時(shí)只存儲(chǔ)了指向動(dòng)態(tài)庫的引用《停可以多個(gè)程序指向這個(gè)庫恩静,在運(yùn)行時(shí)才加載,不會(huì)使應(yīng)用體積變大,但是運(yùn)行時(shí)加載會(huì)損耗部分性能驶乾,并且依賴外部的環(huán)境邑飒,如果庫不存在或者版本不正確則無法運(yùn)行(我的項(xiàng)目無法運(yùn)行就是這一步出問題了)。
Framework:實(shí)際上是一種打包方式级乐,將庫的二進(jìn)制文件疙咸,頭文件和有關(guān)的資源文件打包到一起,方便管理和分發(fā)风科。
CocoaPods 通過use_frameworks來控制是否是用Framework撒轮。
如果不使用use_frameworks!則會(huì)使用static libraries 方式生成.a文件。
如果使用use_frameworks!則會(huì)使用dynamic frameworks 方式生成.framework文件贼穆。
在純oc的項(xiàng)目中,一般不使用frameworks,但是在pod導(dǎo)入的swift項(xiàng)目题山,必須要使用use_frameworks!,我這個(gè)flutter項(xiàng)目也是用pod導(dǎo)入的第三方庫,所以必須加入use_frameworks故痊!,特此記錄下,免得以后踩同樣的坑!