背景
由于目前的項(xiàng)目是OC開發(fā),且目前通過cocopods導(dǎo)入的三方庫,是以.a靜態(tài)庫的形式導(dǎo)入
需求
目前需要導(dǎo)入一個swift開發(fā)的三方SDK,所以需要在OC項(xiàng)目中pod一個swift三方庫
問題
對于swift三方庫而言,一般都會要求 使用 use_frameworks! 通過.framework動態(tài)庫的形式導(dǎo)入。而目前OC項(xiàng)目中pod是通過.a的形式導(dǎo)入,所以產(chǎn)生了以下問題:
1、如果pod中使用
use_frameworks!,會改變項(xiàng)目中原有OC三方庫的導(dǎo)入方式,xcode的會提示OC庫找不到,需要從#import <xxx.h>改為#import "xxx.h"2、如果不使用
use_frameworks!,以.a的形式導(dǎo)入swift三方庫,編譯時期報(bào)錯
解決辦法
那么有沒有辦法,可以在不改變原來的三方庫的導(dǎo)入形式,然后還可以集成swift三方庫且不報(bào)錯呢?答案是有的,即使用混編的方式,即swift三方庫不采用 use_frameworks!
1、xcode配置
-
設(shè)置混編:target -> Defines Module 設(shè)置為YES
設(shè)置混編
2、項(xiàng)目配置
創(chuàng)建一個.swift文件,且創(chuàng)建時會自動生成一個橋接文件
-
如果橋接文件沒有自動生成,
方式1:可以先刪除
target -> Build Settings -> Objective-C Bridging Header中的路徑,刪除創(chuàng)建的swift文件,重新創(chuàng)建swift文件,此時會自動生成方式2:也可以自行創(chuàng)建橋接文件,并在
target -> Build Settings -> Objective-C Bridging Header中配置橋接文件路徑
需要注意以下幾點(diǎn):
1)需要確保有橋接文件
項(xiàng)目名-Bridging-Header.h2)確保項(xiàng)目中至少有一個
.swift文件3)
target -> Build Settings中,確保Product Module Name是有值的,如果沒有,直接設(shè)置為$(PRODUCT_NAME)4)
target -> BuildSetting -> SWIFT_VERSION需要與pod中swift三方庫的BuildSetting -> SWIFT_VERSION一致
3、swift三方庫使用
- 在
項(xiàng)目名-Bridging-Header.h橋接文件中導(dǎo)入需要的swift三方庫
@import swiftSDK;
- 在需要用到swift三方庫的地方,導(dǎo)入 “項(xiàng)目名-swift.h”文件以及橋接文件
#import "項(xiàng)目名-Swift.h"
#import "項(xiàng)目名-Bridging-Header.h"
到此,可以在OC項(xiàng)目中以.a的形式導(dǎo)入swift三方庫了,且不改變原有的三方庫導(dǎo)入形式
