1. 創(chuàng)建主項目 AppDemo
1.1 選擇項目類型
1.2 設(shè)置相關(guān)屬性
2. 創(chuàng)建framework
2.1 創(chuàng)建framework類型
2.2. 設(shè)置相關(guān)屬性類似步驟2
2.3. 保存位置選擇主項目顶瞳,并添加到主項目中
3. 添加依賴
3.1 在主項目根目錄創(chuàng)建PodFile
3.2. Podfile內(nèi)容大致如圖,藍色部分需要修改崖蜜,另外需要引入的pod也需要修改
3.3. 保存后在Podfile的目錄下執(zhí)行 pod install (沒有cocoapods 需要安裝)浊仆,結(jié)果中有警告,大概是說找不到宿主target豫领,暫時沒找到解決辦法抡柿,可能我的podfile寫的有問題
3.4. 執(zhí)行完pod install后進入AppDemo的根目錄,雙擊AppDemo.xworkspace打開即可看到這時候的目錄結(jié)構(gòu)如下圖
4. 還需要做兩件事情
4.1 在xcode中AppDemo的設(shè)置中添加embeded Binaries
4.2 在build phase中添加link
如果講道理的話 這時候工程已經(jīng)可以跑起來了
5. 在framework中加入oc代碼 和swift代碼
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的時候還會有一個問題如下圖:
正如前面所說的烤黍,這么做將會暴露所有的oc細節(jié),也就是編譯器默認是不允許的,為了允許這種不優(yōu)雅的行為發(fā)生速蕊,必須要設(shè)置一下嫂丙,讓編譯器不再抱怨。
兩個方式暫時解決:
方法1(我嘗試的時候沒生效):
設(shè)置framework project的屬性 allow non-modular includes in framework modules 為YES互例,也就是允許這種不優(yōu)雅的導入奢入,對了筝闹,下圖的FrameworkDemo.h就是所謂的Umbrella header
方法2 設(shè)置其他oc header的可見范圍:
選中要設(shè)置的oc header媳叨,在xcode的右邊又一個選項 把它設(shè)為public
至此,重新編譯后关顷,可以在AppDemo中只需要 import FrameworkDemo 就可以調(diào)用的framework中所有(oc+swift)的public類和方法了
更新:
今天搞清楚了用ModuleMap集成三方庫的方法
以集成Bugly為例子糊秆,使用Pods添加依賴后,如果是OC可以直接#import "Bugly/Bugly.h"议双,但是swift不行痘番,本來需要寫在bridgingheader里面的,之前提到不可以這么做平痰,因此需要用一個module來包裹(wrap)他才能正常的調(diào)用
- 在項目的根目錄創(chuàng)建一個文件夾名為Bugly,在里面新建一個文件module.modulemap,文件內(nèi)加入內(nèi)容
module Bugly {
header "../../Pods/Bugly/Bugly.framework/Headers/Bugly.h"
export *
}
其中header的路徑為相對于module.modulemap的路徑
-
打開項目設(shè)置汞舱,搜索Import Paths,修改,添加一行 $(SRCROOT)/Bugly
添加import Paths clean & build 發(fā)現(xiàn)可以使用平時使用的import Bugly了
另外 如果想用git來管理的話 也很方便嗷宗雇,在完成上述步驟后
- 在git中創(chuàng)建AppDemo(暫時將FrameworkDemo文件夾移出到和AppDemo根目錄平級)昂芜,然后根據(jù)指示將AppDemo放git上
- 在git中創(chuàng)建FrameworkDemo,也將項目代碼全部存到git上 假設(shè)git鏈接為 git@git.xxx.com/dev/framework
- 在AppDemo根目錄上使用命令 git submodule add git@git.xxx.com/dev/framework
- 在AppDemo根目錄上執(zhí)行g(shù)it submodule update --init --recursive
- 在xcode中打開AppDemo赔蒲,進入AppDemo根目錄里面新clone下來的FrameworkDemo泌神,將FrameworkDemo.xcodeproj拖拽到xcode中
- 參照前面的文檔為AppDemo添加FrameworkDemo依賴即可
- 超好用嗷,提交的時候每個模塊可以單獨管理 感覺自己萌萌噠