蘋果.tbd格式的文件介紹杂瘸、生成和使用

早在2015年蘋果推出了Xcode7的時候庶香,.tbd文件也隨之產(chǎn)生香璃,它的出現(xiàn)取代了我們熟悉的 .dylib会涎。
那么.tbd文件到底是什么呢熊榛?有什么用讼昆?怎么用萧求?接下來我們一點一點來揭開它的面紗其兴。

1. tbd介紹

tbd全稱是text-based stub libraries,本質(zhì)上就是一個YAML描述的文本文件夸政。YAML是一個可讀性高元旬,用來表達(dá)數(shù)據(jù)序列化的格式。
tbd用于記錄鏈接動態(tài)庫的必要信息守问,包括動態(tài)庫導(dǎo)出符號法绵、動態(tài)庫的架構(gòu)信息、動態(tài)庫的依賴信息酪碘、動態(tài)庫的鏈接路徑等朋譬。如下圖:


1.png

2. tbd生成原理

tbd格式文件,本身是通過Xcode內(nèi)置工具tapi-installapi專門來生成的兴垦,具體路徑為:

   /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/tapi installapi

3. tbd文件生成

創(chuàng)建一個名為JQTestTdb.framework這樣一個動態(tài)庫framework徙赢,如何生成tbd格式文件?
首先來到Build Setting探越,找到Text-Based API狡赐,將Supports Text-Based InstallAPI設(shè)置為Yes:


2.png

然后,通過Other Text-Based InstallAPI Flags給tapi-installapi工具傳遞參數(shù)钦幔,常用的參數(shù)有:

    -ObjC:將輸入文件視為Objective-C文件(默認(rèn))

    -ObjC++:將輸入文件視為Objective-C++文件

    -x<語言>:值為c枕屉、c++、Objective-c和Objective-c++

    -Xparser <arg>:傳遞參數(shù)給clang parser鲤氢。常用參數(shù)有:-Wno-deprecated-declarations搀擂、-Wno-unavailable-declarations

    -exclude-public-header <path>:引入的需要解析的public頭文件路徑
3.png

4. tbd文件的使用

第一步,新建一個LoginApp的項目卷玉,將JQTestTdb文件夾拷貝到項目根目錄下哨颂,我們可以看到JQTestTdb文件夾下只有Headers和JQTestTdb.tbd文件,這個也就是要暴露給外部的文件相种,類似于系統(tǒng)提供的tbd文件

4.png

第二步威恼,在ViewController中引入頭文件,在viewDidLoad中打印一下JQTestTdbPerson的實例對象,如下圖

5.png

第三步箫措,這時候編譯會報錯 Undefined symbol:OBJC_CLASS$_JQTestTdbPerson

6.png

我們將JQTestTdb.tbd直接拖到Framework目錄下腹备,如下圖,再編譯斤蔓,通過植酥!

7.png

第四步,運行項目附迷,會在運行時報
dyld: Library not loaded: @rpath/JQTestTdb.framework/JQTestTdb
Reason: image not found
如下圖:

8.png

第五步,我們將之前生成好的JQTestTdb.framework手動copy到/Users/{userName}/Library/Developer/Xcode/DerivedData/LoginApp-ejzarlssezrclpgjnslulafmqgpb/Build/Products/Debug-iphonesimulator/LoginApp.app/Frameworks目錄下哎媚,這個目錄怎么找喇伯?找到項目的Products,右鍵選中.app文件在Finder中顯示拨与,然后選中.app文件稻据,顯示包內(nèi)容,就可以看到Frameworks文件夾了买喧。(ps:當(dāng)然這個也可以用腳本來copy捻悯,只要指定好相應(yīng)的路徑就可以了)

9.png
10.png
11.png
12.png

第六步,再次運行項目淤毛,通過今缚!打印出JQTestTdbPerson的實例對象,結(jié)束低淡!

13.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姓言,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蔗蹋,更是在濱河造成了極大的恐慌何荚,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猪杭,死亡現(xiàn)場離奇詭異餐塘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)皂吮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門戒傻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜂筹,你說我怎么就攤上這事稠鼻。” “怎么了狂票?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵候齿,是天一觀的道長。 經(jīng)常有香客問我,道長慌盯,這世上最難降的妖魔是什么周霉? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮亚皂,結(jié)果婚禮上俱箱,老公的妹妹穿的比我還像新娘。我一直安慰自己灭必,他們只是感情好狞谱,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著禁漓,像睡著了一般跟衅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上播歼,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天伶跷,我揣著相機(jī)與錄音,去河邊找鬼秘狞。 笑死叭莫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的烁试。 我是一名探鬼主播雇初,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼减响!你這毒婦竟也來了抵皱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤辩蛋,失蹤者是張志新(化名)和其女友劉穎呻畸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悼院,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡伤为,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了据途。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绞愚。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颖医,靈堂內(nèi)的尸體忽然破棺而出位衩,到底是詐尸還是另有隱情,我是刑警寧澤熔萧,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布糖驴,位于F島的核電站僚祷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贮缕。R本人自食惡果不足惜辙谜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望感昼。 院中可真熱鬧装哆,春花似錦、人聲如沸定嗓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宵溅。三九已至凌简,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間层玲,已是汗流浹背号醉。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工反症, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留辛块,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓铅碍,卻偏偏與公主長得像润绵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子胞谈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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