關(guān)于flutter_module嵌入ios原生項(xiàng)目報(bào)錯(cuò):dyld: Library not loaded: @rpath/App.framework/App解決方案

上個(gè)星期,突然有一位做flutter開發(fā)的小伙伴添加了我的微信醇滥,說(shuō)他的項(xiàng)目中報(bào)dyld: Library not loaded: @rpath/App.framework/App這個(gè)錯(cuò)誤审胚,說(shuō)是采用我之前的文章Flutter-module嵌入iOS原生老項(xiàng)目中中的方法可以解決吓揪,但是他們是團(tuán)隊(duì)開發(fā)虎谢,路徑寫死對(duì)多人開發(fā)不夠友好,問我有沒有其他解決方案酬诀。

于是我就打開之前的flutter混合項(xiàng)目脏嚷,開始探索,刪除之前的方法瞒御,開始復(fù)現(xiàn)dyld: Library not loaded: @rpath/App.framework/App這個(gè)錯(cuò)誤父叙,如圖:


0.png

其實(shí)項(xiàng)目中報(bào)這個(gè)錯(cuò)誤很常見,這個(gè)錯(cuò)誤就是dyld去加載App.framework/App這個(gè)文件時(shí)沒有找到肴裙,為啥沒有找到呢趾唱,那就是這個(gè)@rpath/App.framework/這個(gè)路徑下沒有App這個(gè)文件唄,首先我們得知道這個(gè)@rpath代表的是啥蜻懦,知道@rpath甜癞,我們就明白了上面這個(gè)報(bào)錯(cuò)的原因。

要知道這個(gè)@rpath是啥宛乃,我們先簡(jiǎn)單了解一下項(xiàng)目編譯到運(yùn)行的過(guò)程中都發(fā)生了什么悠咱?

  1. 編譯:在我們項(xiàng)目編譯后,會(huì)生成項(xiàng)目的主程序文件(一個(gè)可執(zhí)行文件Executable)征炼,在這個(gè)主程序文件所在的目錄下析既,還有info.plish、_CodeSignature谆奥、Frameworks等文件眼坏,由這些文件組成的一個(gè).app文件,這個(gè)文件再進(jìn)行壓縮就形成了我們熟悉的.ipa文件酸些。(不信你可以把Xcode打包一個(gè)項(xiàng)目宰译,導(dǎo)出ipa包,修改后綴名為.zip魄懂,解壓縮看看??)
  2. 運(yùn)行:在項(xiàng)目運(yùn)行的時(shí)候沿侈,dyld就會(huì)先加載主程序中所依賴的庫(kù),我們看下主程序中的Load command逢渔,如下圖:


    1.png

圖中可以看到肋坚,加載系統(tǒng)的庫(kù),是沒有@rpath的肃廓,因?yàn)橄到y(tǒng)的庫(kù)所在位置是固定的智厌。加載三方庫(kù)如@rpath/AFNetworking.framework/AFNetworking是App.framework和@rpath/App.framework/App的時(shí)候就采用@rpath來(lái)代替路徑,那么@rpath表示的路徑是什么呢盲赊?這個(gè)@rpath是可以設(shè)置的铣鹏,在我們的項(xiàng)目中,如圖:


2.png

可看到@rpath是由@executable_path/Frameworks表示的哀蘑,那么這個(gè)@executable_path又是什么呢诚卸?它是系統(tǒng)為了方便表示主程序這個(gè)可執(zhí)行文件所在的路徑而設(shè)計(jì)的一個(gè)變量葵第,@executable_path表示的是主程序這個(gè)可執(zhí)行文件所在的路徑。那么@executable_path/Frameworks也就是@rpath則代表的是主程序文件所在的路徑下Frameworks這個(gè)文件夾合溺。

搞清楚@rpath是什么這個(gè)問題了卒密,那么我們?cè)賮?lái)看一下.app/Frameworks都有什么?


3.png

發(fā)現(xiàn)其中確實(shí)沒有App.framework棠赛。
我當(dāng)時(shí)想到的第一種解決方案就是找到flutter_module中的App.framework哮奇,然后將它c(diǎn)opy到編譯后的.app/Frameworks下,不就解決了嗎睛约?編譯后手動(dòng)copy也行鼎俘,當(dāng)然如果項(xiàng)目clean了,就沒有了辩涝。我這里采用腳本copy贸伐,如圖,在Build Phases中新建一個(gè)Run Script怔揩,將腳本寫入即可捉邢。


4.png

經(jīng)過(guò)一番操作,我這里項(xiàng)目可以順利運(yùn)行了商膊,但是這個(gè)方式給到咨詢我的那個(gè)小伙伴歌逢,他那里的項(xiàng)目卻不行,編譯都不過(guò)翘狱。

然后又經(jīng)過(guò)一系列的查找,最終我把問題定位到flutter的SDK的版本上砰苍,因?yàn)楣俜教峁┑膄lutter_module嵌入iOS原生項(xiàng)目中第一種方式(pod導(dǎo)入)潦匈,實(shí)際上是使用了podhelper.rb這個(gè)腳本來(lái)完成一系列的加載,我查看了這個(gè)腳本的位置是在flutter的SDK中的赚导,當(dāng)時(shí)想到一個(gè)問題就是:我的這個(gè)項(xiàng)目21年9月份嵌入的的茬缩,我的flutter版本2.2.3也不是最新的,這位咨詢的小伙伴的flutter版本也不是最新的吼旧,于是凰锡,我讓他升級(jí)一下flutter版本看下,果不其然圈暗,他升級(jí)flutter后就可以順利運(yùn)行了掂为。

其他同學(xué)如果遇到這個(gè)問題,可以先嘗試一下flutter的版本升級(jí)员串,少走一些彎路勇哗。

最后貼出解決辦法:(評(píng)論區(qū)小伙伴 ningcol 給出的方法,在此感謝寸齐!)
重裝Cocoapods和ruby-macho:

sudo gem uninstall ruby-macho
sudo gem uninstall cocoapods
sudo gem install ruby-macho
sudo gem install cocoapods
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末欲诺,一起剝皮案震驚了整個(gè)濱河市抄谐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扰法,老刑警劉巖蛹含,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異塞颁,居然都是意外死亡浦箱,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門殴边,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)憎茂,“玉大人,你說(shuō)我怎么就攤上這事锤岸∈#” “怎么了奇昙?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵介返,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我凌埂,道長(zhǎng)蛋铆,這世上最難降的妖魔是什么馋评? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮刺啦,結(jié)果婚禮上留特,老公的妹妹穿的比我還像新娘。我一直安慰自己玛瘸,他們只是感情好蜕青,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著糊渊,像睡著了一般右核。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渺绒,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天贺喝,我揣著相機(jī)與錄音,去河邊找鬼宗兼。 笑死躏鱼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的针炉。 我是一名探鬼主播挠他,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼篡帕!你這毒婦竟也來(lái)了殖侵?” 一聲冷哼從身側(cè)響起贸呢,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拢军,沒想到半個(gè)月后楞陷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茉唉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年固蛾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片度陆。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艾凯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出懂傀,到底是詐尸還是另有隱情趾诗,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布蹬蚁,位于F島的核電站恃泪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏犀斋。R本人自食惡果不足惜贝乎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叽粹。 院中可真熱鬧览效,春花似錦、人聲如沸虫几。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)持钉。三九已至,卻和暖如春篱昔,著一層夾襖步出監(jiān)牢的瞬間每强,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工州刽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留空执,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓穗椅,卻偏偏與公主長(zhǎng)得像辨绊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子匹表,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359