一個美麗的錯誤Static Library引用Framework

隨著業(yè)務(wù)的發(fā)展或者項目的增長斧拍,為了更好的維護代碼,在項目的開發(fā)后期都會對項目的一些公有組件和基礎(chǔ)業(yè)務(wù)進行封裝记焊。最近由于一個人需要負責(zé)多個SDK的開發(fā)芳杏,后續(xù)公司可能還會繼續(xù)開發(fā)新的SDK,對于每一個新的SDK的開發(fā)抡柿,如果我都從底層的基礎(chǔ)庫(網(wǎng)絡(luò)舔琅,解析,工具類等)再到業(yè)務(wù)邏輯層都重新開發(fā)的話洲劣,會需要很多的時間备蚓,并且在開發(fā)過程中會發(fā)現(xiàn)不同的SDK除了具體的業(yè)務(wù)邏輯不一樣的話,其他基本一致囱稽。所以對于需要快速的去試錯開發(fā)一個SDK的話郊尝,抽離封裝基組件庫和公共業(yè)務(wù)勢在必行,不然代碼拷來拷去很容易出錯战惊,吃力不討好流昏。

多SDK架構(gòu)

整體的架構(gòu)思想就是,抽離公共組件庫和公共業(yè)務(wù)代碼庫吞获,做成一個通用的libCommon.a供其他SDK使用况凉,這樣做的好處很多:

  • 通用庫一次開發(fā),享用一生各拷;
  • 新的SDK開發(fā)刁绒,只需要專注具體SDK業(yè)務(wù)邏輯的開發(fā);節(jié)約開發(fā)時間烤黍;

libCommon.a分解

在通用基礎(chǔ)庫中主要包括兩部分知市,一部分是公共組件庫,一部分是公共業(yè)務(wù)模塊蚊荣。

  • 公共業(yè)務(wù)模塊:我們一般只需要SDK部分幫我們啟動業(yè)務(wù)就好初狰,或者再增加一些回調(diào)處理。他的頭文件一般也只會有一個互例。
  • 公共組件模塊:有很多子模塊奢入,例如數(shù)據(jù)解析,字符串處理,存儲腥光、網(wǎng)絡(luò)基礎(chǔ)庫等等关顷,這樣的話我們就需要公開很多的頭文件,因此我想到了先使用Framework來封裝公共組件武福,然后再讓libCommon.a來引用Framework议双,最后我在SDK中通過libCommon.a使用這個Framework。整體架構(gòu)就會變成下面這樣:
拆分架構(gòu)

錯誤的原因

首先說下為什么我要把多個公共組件制作成一個Framework捉片,因為這樣的話SDK在調(diào)用的時候不需要添加很多的.h頭文件平痰。想法是很完美,但是現(xiàn)實卻很殘酷伍纫,我在實現(xiàn)的過程中l(wèi)ibCommon.a引用了Framework宗雇,但是我繼續(xù)在我的libSDK1.a里面繼續(xù)用的時候,發(fā)現(xiàn)會報錯(Undefined symbols for architecture x86_64)莹规,在Framework里面定義的方法都找不到了赔蒲,出現(xiàn)這個的原因就是沒有在運行的時候沒有找到實現(xiàn)文件,所以動態(tài)去鏈接找方法的時候出了問題良漱。這里我們需要明白Static Library和Framework的編譯原理舞虱。

  • Static Library編譯的時候會把所有的代碼編譯進去;
  • Framework編譯的時候只是進行鏈接母市,函數(shù)在調(diào)用的時候才會去尋找實現(xiàn)矾兜,所以在編譯過程Framework里面的組件代碼沒有被編譯到libCommon.a里面,所以我們在上層調(diào)用的時候還是需要引用Framework的窒篱,所以這里就不適合我的開發(fā)場景了焕刮,因為我封裝的Framework是不想對外公開的,只能我內(nèi)部知道和使用墙杯。

    最后我還是回到原點配并,將公共組件編譯成靜態(tài)庫然后公開多個頭文件來處理。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末高镐,一起剝皮案震驚了整個濱河市溉旋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫉髓,老刑警劉巖观腊,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機碘梢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來儡陨,“玉大人,你說我怎么就攤上這事∑澹” “怎么了嫌褪?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長胚股。 經(jīng)常有香客問我笼痛,道長,這世上最難降的妖魔是什么琅拌? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任缨伊,我火速辦了婚禮,結(jié)果婚禮上财忽,老公的妹妹穿的比我還像新娘倘核。我一直安慰自己,他們只是感情好即彪,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著活尊,像睡著了一般隶校。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛹锰,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天深胳,我揣著相機與錄音,去河邊找鬼铜犬。 笑死舞终,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的癣猾。 我是一名探鬼主播敛劝,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纷宇!你這毒婦竟也來了夸盟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤像捶,失蹤者是張志新(化名)和其女友劉穎上陕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拓春,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡释簿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了硼莽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庶溶。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渐尿,到底是詐尸還是另有隱情醉途,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布砖茸,位于F島的核電站隘擎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凉夯。R本人自食惡果不足惜货葬,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劲够。 院中可真熱鬧震桶,春花似錦、人聲如沸征绎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽人柿。三九已至柴墩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凫岖,已是汗流浹背江咳。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哥放,地道東北人歼指。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像甥雕,于是被迫代替她去往敵國和親踩身。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容