Swift 如何建立自己的 CocoaPod 庫

當(dāng)我完成 JMRoundedCornerSwift 的時(shí)候,我像往常一樣打開小基友 徐亞非的博客CocoaPods建立自己的Podspec(三)虑润,拷貝輸入教程里的命令pod trunk push JMRoundedCornerSwift.podspec --use-libraries --allow-warnings,但事情并不順利,Swift 建立自己的 CocoaPod 庫與我平時(shí)用 OC 建立 CocoaPod 庫的方式并不一致鲫懒。

首先翰意,要了解什么是靜態(tài)庫棒假,什么是什么是動(dòng)態(tài)框架蜡饵。

所謂靜態(tài)庫,或者說 .a 文件黔夭,就是一系列從源碼編譯的目標(biāo)文件的集合宏胯。它是你的源碼的實(shí)現(xiàn)所對(duì)應(yīng)的二進(jìn)制。配合上公共的 .h 文件本姥,我們可以獲取到 .a 中暴露的方法或者成員等肩袍。在最后編譯 app 的時(shí)候 .a 將被鏈接到最終的可執(zhí)行文件中,之后每次都隨著 app 的可執(zhí)行二進(jìn)制文件一同加載婚惫,你不能控制加載的方式和時(shí)機(jī)氛赐,所以稱為靜態(tài)庫。

在 iOS 8 之前先舷,iOS 只支持以靜態(tài)庫的方式來使用第三方的代碼艰管。

與靜態(tài)相對(duì)應(yīng)的當(dāng)然是動(dòng)態(tài)。我們每天使用的 iOS 系統(tǒng)的框架是以 .framework 結(jié)尾的蒋川,它們就是動(dòng)態(tài)框架牲芋。

Framework 其實(shí)是一個(gè) bundle,或者說是一個(gè)特殊的文件夾尔破。系統(tǒng)的 framework 是存在于系統(tǒng)內(nèi)部街图,而不會(huì)打包進(jìn) app 中。app 的啟動(dòng)的時(shí)候會(huì)檢查所需要的動(dòng)態(tài)框架是否已經(jīng)加載懒构。像 UIKit 之類的常用系統(tǒng)框架一般已經(jīng)在內(nèi)存中,就不需要再次加載耘擂,這可以保證 app 啟動(dòng)速度胆剧。相比靜態(tài)庫,framework 是自包含的醉冤,你不需要關(guān)心頭文件位置等秩霍,使用起來很方便。

Apple 從 iOS 8 開始允許開發(fā)者有條件地創(chuàng)建和使用動(dòng)態(tài)框架蚁阳,這種框架叫做 Cocoa Touch Framework铃绒。

雖然同樣是動(dòng)態(tài)框架,但是和系統(tǒng) framework 不同螺捐,app 中的使用的 Cocoa Touch Framework 在打包和提交 app 時(shí)會(huì)被放到 app bundle 中颠悬,運(yùn)行在沙盒里矮燎,而不是系統(tǒng)中。也就是說赔癌,不同的 app 就算使用了同樣的 framework诞外,但還是會(huì)有多份的框架被分別簽名,打包和加載灾票。

Cocoa Touch Framework 的推出主要是為了解決兩個(gè)問題:首先是應(yīng)對(duì)從 iOS 8 開始的擴(kuò)展開發(fā)峡谊。其次是因?yàn)?Swift,它是不支持編譯為靜態(tài)庫的刊苍。

所以既们,想正確建立自己的 swift cocoaPod 庫需要建立一個(gè) Cocoa Touch Framework。Xcode 為我們準(zhǔn)備了 framework target 的模板正什,直接創(chuàng)建這個(gè) target贤壁,就可以開始編寫框架了。

添加源文件埠忘,編寫代碼脾拆,編譯,完成莹妒,就是這么簡單名船。

首先是創(chuàng)建 Cocoa Touch Framework,F(xiàn)ile -> New -> project...旨怠,選擇Cocoa Touch Framework

屏幕快照 2016-04-11 11.23.14.png

下一步記得語言選擇 Swift渠驼,然后編寫你的庫的代碼,例如我添加了 JMRoundedCorner.Swift

屏幕快照 2016-04-11 11.28.38.png

點(diǎn)擊運(yùn)行鉴腻,沒有錯(cuò)誤的話迷扇,動(dòng)態(tài)庫就算完成了。

你可能還需要一個(gè) Demo 來演示自己的動(dòng)態(tài)庫爽哎,添加一個(gè) TARGETS蜓席,

屏幕快照 2016-04-11 11.31.33.png

這個(gè)選擇頁面是不是很熟悉

屏幕快照 2016-04-11 11.32.19.png

寫完 demo 就可以切換 targets 來選擇編譯動(dòng)態(tài)框架還是運(yùn)行 demo。在 demo 中使用編寫的動(dòng)態(tài)框架需要 import 框架课锌,例如 import JMRoundedCornerSwift厨内,command + 單擊JMRoundedCornerSwift 即可看到框架暴露的接口,你標(biāo)記為 public 的內(nèi)容將是框架使用者能看到的內(nèi)容渺贤。
接下來將庫上傳到 cocoapod 參考CocoaPods建立自己的Podspec(三)這篇博客就行雏胃,需要注意的是命令里不能使用--use-libraries,會(huì)報(bào)錯(cuò):

ERROR | [iOS] unknown: Encountered an unknown error (Pods written in Swift can only be integrated as frameworks; add use_frameworks! to your Podfile or target to opt into using it. The Swift Pod being used is: Socialite) during validation.

去掉它就好了志鞍。

參考資料:

如何打造一個(gè)讓人愉快的框架

CocoaPods建立自己的Podspec(三)

stackoverflow

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瞭亮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子固棚,更是在濱河造成了極大的恐慌统翩,老刑警劉巖仙蚜,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異唆缴,居然都是意外死亡鳍征,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門面徽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艳丛,“玉大人,你說我怎么就攤上這事趟紊〉” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵霎匈,是天一觀的道長戴差。 經(jīng)常有香客問我,道長铛嘱,這世上最難降的妖魔是什么暖释? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮墨吓,結(jié)果婚禮上球匕,老公的妹妹穿的比我還像新娘。我一直安慰自己帖烘,他們只是感情好亮曹,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秘症,像睡著了一般照卦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乡摹,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天役耕,我揣著相機(jī)與錄音,去河邊找鬼趟卸。 笑死蹄葱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锄列。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼惯悠,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼邻邮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起克婶,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤筒严,失蹤者是張志新(化名)和其女友劉穎丹泉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸭蛙,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡摹恨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娶视。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晒哄。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖肪获,靈堂內(nèi)的尸體忽然破棺而出寝凌,到底是詐尸還是另有隱情,我是刑警寧澤孝赫,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布较木,位于F島的核電站,受9級(jí)特大地震影響青柄,放射性物質(zhì)發(fā)生泄漏伐债。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一致开、第九天 我趴在偏房一處隱蔽的房頂上張望峰锁。 院中可真熱鬧,春花似錦喇喉、人聲如沸祖今。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽千诬。三九已至,卻和暖如春膏斤,著一層夾襖步出監(jiān)牢的瞬間徐绑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工莫辨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留傲茄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓沮榜,卻偏偏與公主長得像盘榨,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蟆融,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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