項目拆分 Cocoapods 多模塊構(gòu)建 framework構(gòu)建 OC swift混編

1. 創(chuàng)建主項目 AppDemo

1.1 選擇項目類型


項目類型

1.2 設(shè)置相關(guān)屬性


相關(guān)

2. 創(chuàng)建framework

2.1 創(chuàng)建framework類型


創(chuàng)建framework

2.2. 設(shè)置相關(guān)屬性類似步驟2
2.3. 保存位置選擇主項目顶瞳,并添加到主項目中


Paste_Image.png

3. 添加依賴

3.1 在主項目根目錄創(chuàng)建PodFile


Paste_Image.png

3.2. Podfile內(nèi)容大致如圖,藍色部分需要修改崖蜜,另外需要引入的pod也需要修改


Podfile內(nèi)容

3.3. 保存后在Podfile的目錄下執(zhí)行 pod install (沒有cocoapods 需要安裝)浊仆,結(jié)果中有警告,大概是說找不到宿主target豫领,暫時沒找到解決辦法抡柿,可能我的podfile寫的有問題
pod install執(zhí)行結(jié)果

3.4. 執(zhí)行完pod install后進入AppDemo的根目錄,雙擊AppDemo.xworkspace打開即可看到這時候的目錄結(jié)構(gòu)如下圖


最終目錄結(jié)構(gòu)

4. 還需要做兩件事情

4.1 在xcode中AppDemo的設(shè)置中添加embeded Binaries


添加embeded binaries

選中自己的FrameworkDemo

4.2 在build phase中添加link


鏈接framework

如果講道理的話 這時候工程已經(jīng)可以跑起來了

5. 在framework中加入oc代碼 和swift代碼

Paste_Image.png

swift想要調(diào)用oc的代碼 按照往常非framework的套路是添加一個bridging header
但是目前framework中是不支持bridging header等恐,如果強行這么做雖然framework可以構(gòu)建成功洲劣,但是依賴他的AppDemo將會失敗,報出bridging header中引用的其他oc header找不到课蔬。

Apple說應(yīng)該使用Umbrella header囱稽,個人感覺名字很酷,像一個傘二跋,把framework內(nèi)部細節(jié)都屏蔽在下面战惊,只暴露出一部分接口。
一個不優(yōu)雅的方式扎即,是直接在Unbrella header中直接引入其他oc header吞获,這時候 framework外部可以看到framework內(nèi)部的這些被unbrella header引用的oc header,framework內(nèi)部的swift也能夠看到谚鄙,暫時是滿足了要求各拷,不過破壞了unbrella header作為一把傘的作用,把內(nèi)部的細節(jié)都暴露了闷营。
具體可以參考這個鏈接:https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

在引入其他oc header的時候還會有一個問題如下圖:


non-modular header問題

正如前面所說的烤黍,這么做將會暴露所有的oc細節(jié),也就是編譯器默認是不允許的,為了允許這種不優(yōu)雅的行為發(fā)生速蕊,必須要設(shè)置一下嫂丙,讓編譯器不再抱怨。
兩個方式暫時解決:
方法1(我嘗試的時候沒生效):
設(shè)置framework project的屬性 allow non-modular includes in framework modules 為YES互例,也就是允許這種不優(yōu)雅的導入奢入,對了筝闹,下圖的FrameworkDemo.h就是所謂的Umbrella header


設(shè)置允許導入non-modular header

方法2 設(shè)置其他oc header的可見范圍:
選中要設(shè)置的oc header媳叨,在xcode的右邊又一個選項 把它設(shè)為public


Paste_Image.png

至此,重新編譯后关顷,可以在AppDemo中只需要 import FrameworkDemo 就可以調(diào)用的framework中所有(oc+swift)的public類和方法了

更新:

今天搞清楚了用ModuleMap集成三方庫的方法
以集成Bugly為例子糊秆,使用Pods添加依賴后,如果是OC可以直接#import "Bugly/Bugly.h"议双,但是swift不行痘番,本來需要寫在bridgingheader里面的,之前提到不可以這么做平痰,因此需要用一個module來包裹(wrap)他才能正常的調(diào)用

  1. 在項目的根目錄創(chuàng)建一個文件夾名為Bugly,在里面新建一個文件module.modulemap,文件內(nèi)加入內(nèi)容
module Bugly {
    header "../../Pods/Bugly/Bugly.framework/Headers/Bugly.h"
    export *
}

其中header的路徑為相對于module.modulemap的路徑

  1. 打開項目設(shè)置汞舱,搜索Import Paths,修改,添加一行 $(SRCROOT)/Bugly


    添加import Paths
  2. clean & build 發(fā)現(xiàn)可以使用平時使用的import Bugly了

另外 如果想用git來管理的話 也很方便嗷宗雇,在完成上述步驟后

  1. 在git中創(chuàng)建AppDemo(暫時將FrameworkDemo文件夾移出到和AppDemo根目錄平級)昂芜,然后根據(jù)指示將AppDemo放git上
  2. 在git中創(chuàng)建FrameworkDemo,也將項目代碼全部存到git上 假設(shè)git鏈接為 git@git.xxx.com/dev/framework
  3. 在AppDemo根目錄上使用命令 git submodule add git@git.xxx.com/dev/framework
  4. 在AppDemo根目錄上執(zhí)行g(shù)it submodule update --init --recursive
  5. 在xcode中打開AppDemo赔蒲,進入AppDemo根目錄里面新clone下來的FrameworkDemo泌神,將FrameworkDemo.xcodeproj拖拽到xcode中
  6. 參照前面的文檔為AppDemo添加FrameworkDemo依賴即可
  7. 超好用嗷,提交的時候每個模塊可以單獨管理 感覺自己萌萌噠
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舞虱,一起剝皮案震驚了整個濱河市欢际,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矾兜,老刑警劉巖损趋,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異椅寺,居然都是意外死亡浑槽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門配并,熙熙樓的掌柜王于貴愁眉苦臉地迎上來括荡,“玉大人,你說我怎么就攤上這事溉旋』澹” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長邑闲。 經(jīng)常有香客問我算行,道長,這世上最難降的妖魔是什么苫耸? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任州邢,我火速辦了婚禮,結(jié)果婚禮上褪子,老公的妹妹穿的比我還像新娘量淌。我一直安慰自己,他們只是感情好嫌褪,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布呀枢。 她就那樣靜靜地躺著,像睡著了一般笼痛。 火紅的嫁衣襯著肌膚如雪裙秋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天缨伊,我揣著相機與錄音摘刑,去河邊找鬼。 笑死刻坊,一個胖子當著我的面吹牛枷恕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播紧唱,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼活尊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漏益?” 一聲冷哼從身側(cè)響起蛹锰,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绰疤,沒想到半個月后铜犬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡轻庆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年癣猾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片余爆。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡纷宇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蛾方,到底是詐尸還是另有隱情像捶,我是刑警寧澤上陕,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站拓春,受9級特大地震影響释簿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜硼莽,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一庶溶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懂鸵,春花似錦偏螺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至殴穴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間货葬,已是汗流浹背采幌。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留震桶,地道東北人休傍。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像蹲姐,于是被迫代替她去往敵國和親磨取。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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