iOS打包framework - Swift完整項目打包Framework,嵌入OC項目使用

場景說明:

-之前做的App挽荡,使用Swift框架語言藐石,混合編程,內(nèi)含少部分OC代碼定拟。

-需要App整體功能打包成靜態(tài)庫于微,完整移植到另一個App使用,該App使用OC青自。

-所以涉及到一個語言互轉(zhuǎn)的處理株依,以及一些AppDelegate的代碼減除變化。

--------------------------------打包篇-------------------------------****

實現(xiàn)步驟:

一恋腕、新建 Project - Framework&Library - Cocoa Touch Framework荠藤,Next 語言選擇Swift

image

建立完成获高,會看到默認生成的一個 xxx.h 和 Info.plist 文件(只看紅框內(nèi))。

image

解釋一下這兩個文件:

1??xxx.h 文件的作用是整個包對外提供的入口頭文件念秧,除了正常定義參數(shù)屬性之外,還有

1缎除、提供 Swift項目內(nèi)引用的OC文件的import引用,注意渐行,這里引用之前必須在Build Phrases的Headers內(nèi)暴露到 Public祟印,見步驟六

2蕴忆、提供 第三方文件的import引用套鹅,這里的第三方管理卓鹿,我們依然選擇使用Pods管理吟孙,下文會具體描述杰妓。

以上兩部完成后,舉例效果圖:

image

2??info.plist ****文件的作用就如同正常項目的plist文件作用,用來定義或添加一些屬性凿宾。

二初厚、添加文件排作,這里可以自己新建妄痪,或者從已有項目拷貝過來都可以。

這里要注意一下:由于打包類庫工程不是一個完整項目工程罪针,所以并沒有AppDelegate等文件,所以涉及到這些的文件要額外處理墓阀,或改代碼岂津,或適當改變功能。

注意:工程如果有橋接文件粱甫,是不能拷貝過來的,否則編譯不通過乌庶。

原因見步驟五瞒大。

三、如果有第三方類庫引用酗电,添加第三方庫文件背率,有幾個注意點:(沒有第三方可以跳過這步)

a退渗、第三方庫依然使用Pods進行管理个粱,添加方法同正常項目一樣稻薇。

b塞椎、引用的時候,我們需要添加 【use_frameworks!】來告訴pod 生成動態(tài)庫文件Framework類型骂铁,這樣做的好處是在正式項目用到本類庫的時候,如果兩者第三方庫有引用沖突钞支,可以根據(jù)沖突類庫,對本類庫引入的這些依賴庫進行移除信夫。

image

但有時第三方類庫只有 .a 類型的警没,怎么辦?

解決:如果第三方庫只有.a類型树酪,就需要手動把庫文件拷貝到項目,而不能通過pod添加疮茄,否則在往步驟1內(nèi)的頭文件添加import時會找不到文件,造成報錯畸裳。

四、以上三部做完蓬抄,本類庫的雛形基本已經(jīng)具備了,參考如下:

image

紅框1:自己的業(yè)務(wù)代碼
紅框2:類庫原有文件
紅框3:添加的資源文件
紅框4:引入的第三方,pod管理

PS:這里涉及到一個資源文件的問題,比如圖片百侧、視頻辫狼、音頻等的處理膨处。

之前正常項目的做法可能是這樣,

1:直接用Assets.xcassets

2:新建resources文件夾突硝,存放圖片

但這里,需要注意一點:

對于方法1查库,這樣做是無效的樊销,我們可以新建一個bundle文件裤园,將圖片移植過來。

對于方法2淤袜,我們可以在本地,直接修改添加后綴.bundle實現(xiàn)

然后另一個重點就是路徑問題:

由于類庫的資源文件尽爆,當我們在正式項目使用時漱贱,查找的路徑文件不是針對項目,而是針對類庫的路徑,所以我們這里引用的資源文件路徑都要改變一下,而且類庫里的其他xib泵肄、storyboard文件引用路徑都需要更改一下。

修改辦法就是:在代碼的引用處添加前綴冯丙。

定義前綴:

image

如圖:

resourceRooturl是xib哪雕、storyboard文件前綴路徑利虫。

resourceImagesRooturl是圖片文件前綴路徑。(需要添加一層/images.bundle/)

這個路徑怎么來的呢寞钥?

Frameworks/XXXX.framework/ 其中XXXX就是你建立的類庫名稱蹄溉。

如何引用呢:在代碼引用的地方,這樣改動

image
image

注意:這里我說的只是針對Framework包里使用圖片的路徑需要修改冀膝。如果外部項目需要使用包內(nèi)的圖片資源麻掸,暫未測試,理論上不需要修改诚隙。

五、文件都基本添加完畢烈评,可以嘗試build一下了

理論上:

只要類庫xxx.h文件內(nèi)瓜客,對于使用的oc頭文件和第三方頭文件谱仪,都添加正常引用申明了疯攒,就不會有問題。

而且一般報錯署恍,也都是因為這里沒做好或遺漏的緣故。

此外:如果項目都是純swift文件(沒有混編使用oc文件),這里xxx.h文件只需要導(dǎo)入第三方頭文件即可(如果有使用第三方朵逝,沒有的話基本什么都不用做)。

=======================這里解釋一下,xxx.h文件為什么要這樣做:=================

因為正常情況下芋膘,如果我們swift項目引入了oc文件,我們必須通過一個橋接文件來處理兩者之間的轉(zhuǎn)換,而我們在新建類庫包的時候,是禁止橋接文件存在的鸯匹,即使你添加了,也會永遠編譯不過根蟹,打包不了。

所以這里就用到這個 xxx.h 頭文件了。

我們可以通過這個文件來實現(xiàn)兩者之間的轉(zhuǎn)換悲龟,前提就是必須先將oc的.h暴露出來,否則即使你import,也會報錯找不到.h 文件贬养。

(這里有個問題迷殿,如果oc文件過多蜘犁,這里需要暴露的就很多,而這里太多的話止邮,一個是不美觀,第二是后面項目引用本類庫都是能看到這些文件的奏窑。所以导披,能不能通過一個文件埃唯,來裝載這些所有文件撩匕,達到只需要一個文件暴露就行的效果,如果有人實現(xiàn)了墨叛,歡迎指導(dǎo)一下止毕,不甚感激模蜡。)

六、暴露文件給外部使用

到這里基本就快完成了扁凛,那么我們打包的目的就是給外部使用忍疾,怎么暴露文件出來呢?

image

1谨朝、將我們要暴露的swift文件拖到Public內(nèi)即可卤妒。

2、將需要暴露的swift文件的訪問權(quán)限申明為public屬性字币。

image

兩步缺一不可则披。

七、編譯通過洗出,查看這里

image

紅框內(nèi)就是最終我們得到的Framework包士复。

右擊本地查看,會看到本類庫以及對應(yīng)的依賴第三方庫包翩活,后面在其他項目引用的時候阱洪,這些都是需要的(需要一起拷貝添加)。

PS:如果沒有引用第三方隅茎,這里只需要本類庫包即可澄峰。

** ------------------------------引用篇------------------------------**

1、我們新建一個空的工程辟犀,由于我的業(yè)務(wù)需要俏竞,這里工程語言選擇OC。

2堂竟、新建Framework文件夾魂毁,拷貝之前所有的framework包到文件夾內(nèi)。

3出嘹、在工程Targets-General-EmbeddedBinaries內(nèi)添加Frameworks包

image
image
image

4席楚、由于我的類庫包是基于swift建立的,這里oc使用的話税稼,必須設(shè)置一個屬性:

image

5烦秩、由于我們自己的工程都有自己的第三方庫引用,這里如果發(fā)現(xiàn)兩者之間有沖突或重復(fù)引用郎仆,解決如下:

a:如果pod引用內(nèi)只祠,沒有標注  use_frameworks!    我們先加上這句話,并pod update扰肌,目地是保持兩邊引用的第三方類庫都是Framework類型抛寝。

b:移除剛才添加過來中的重復(fù)類庫,比如AFN

6、添加完盗舰,我們就可以在新項目使用類庫集成的功能了

這邊引用的時候有點特殊:

我們只需要把一個文件import即可晶府,而不需要把每一個需要使用的swift文件import。

舉例如圖:

image

這個文件是系統(tǒng)幫我們自動生成的一個轉(zhuǎn)換文件钻趋,我們要暴露的文件川陆,系統(tǒng)都已經(jīng)幫我們自動轉(zhuǎn)換后儲存在這個文件內(nèi),很強大爷绘,有么有J槿啊!土至!

比如:我的登錄頁面 login.swift文件暴露給外部购对,需要提供入口,我們使用的時候陶因,是不需要import login.swift的镀钓,即使你想import,也會發(fā)現(xiàn)找不到1凇钾恢!

如果你點進去紅框文件廷粒,會發(fā)現(xiàn)類似這樣的內(nèi)容:

image

所以我們使用的時候,頭部只需要import一個文件烘苹,下面使用的時候躲株,該使用哪個類就使用哪個類。

前提就是:在打包的時候镣衡,你已經(jīng)把這個文件 添加到Public里了霜定,并且申明了public屬性,否則是找不到該文件的廊鸥。

最后望浩,把我過程中遇到的一些問題紀錄一下

引用集成時遇到的坑:

==================================報錯1:==================================

dyld: Library not loaded: @rpath/AFNetworking.framework/AFNetworking

這里是因為只引用了之前的類庫本身,沒有將類庫自身的依賴庫一并引用過來惰说,

解決辦法:

方法1:

image

方法2:

按照我的引用篇-步驟3去做磨德,在general處,全部添加吆视,就不會報這個問題典挑。

==================================報錯2:==================================

dyld: Library not loaded: @rpath/libswiftCore.dylib

解決辦法:

按照我的引用篇-步驟4去做 ,設(shè)置屬性為Yes啦吧。

Xcode8升級之后屬性名稱有所變化:

參考我這篇博文

==================================報錯3:==================================

Unknown class in Interface Builder file .... image not found 等

解決辦法:

參考我這篇博文

==================================報錯4:==================================

load storyboard 或xib 崩潰

解決辦法:

是因為打包的地方引用文件路徑?jīng)]有改動搔弄,需要加上類庫前綴路徑,詳見打包篇-步驟四丰滑。

** -----------------------打包合并真機和模擬器------------------------**

詳細內(nèi)容有點多:

參考我這篇博文

若還有其他問題歡迎留言。

enjoy~~

原文:https://www.cnblogs.com/yajunLi/p/5987687.html
作者:那一抹風(fēng)情

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市褒墨,隨后出現(xiàn)的幾起案子炫刷,更是在濱河造成了極大的恐慌,老刑警劉巖郁妈,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浑玛,死亡現(xiàn)場離奇詭異,居然都是意外死亡噩咪,警方通過查閱死者的電腦和手機顾彰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胃碾,“玉大人涨享,你說我怎么就攤上這事∑桶伲” “怎么了厕隧?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長俄周。 經(jīng)常有香客問我吁讨,道長,這世上最難降的妖魔是什么峦朗? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任建丧,我火速辦了婚禮,結(jié)果婚禮上波势,老公的妹妹穿的比我還像新娘翎朱。我一直安慰自己,他們只是感情好艰亮,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布闭翩。 她就那樣靜靜地躺著,像睡著了一般迄埃。 火紅的嫁衣襯著肌膚如雪疗韵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天侄非,我揣著相機與錄音蕉汪,去河邊找鬼。 笑死逞怨,一個胖子當著我的面吹牛者疤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叠赦,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼驹马,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起糯累,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤算利,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后泳姐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體效拭,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年胖秒,在試婚紗的時候發(fā)現(xiàn)自己被綠了缎患。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡阎肝,死狀恐怖挤渔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盗痒,我是刑警寧澤蚂蕴,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站俯邓,受9級特大地震影響骡楼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稽鞭,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一鸟整、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朦蕴,春花似錦篮条、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疹娶,卻和暖如春伴栓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背雨饺。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工钳垮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人额港。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓饺窿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親移斩。 傳聞我的和親對象是個殘疾皇子肚医,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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