目前開發swift版本的SDK(framework) , 須要引用騰訊的sdk(framework),由於騰訊sdk是oc版本的,若是是普通swift項目引用,直接建立橋接文件就能夠,可是framework橋接文件是沒有用的,如下文檔就是解決這個問題:swift
怎麼在Swift 的Framework工程裏面引用oc的frameworkiphone
1、建立本身的swift framework工程
ide
建立完成後工程是這個樣子:測試
2、(重點)建立一個橋接targe,ui
在這個targe經過module裏面引用oc的framework3d
操做步驟:code
一、建立一個targe(記住,是targe,不是project)
blog
選擇targe以後,下一步. 選擇Cocoa Touch Framework
ip
下一步,填寫名字(TXSDK)由於我是橋接騰訊sdk,因此叫這個名字,你能夠隨表起,點擊 Finish,出來的效果以下
開發
下一步:在TASDK根目錄下建立兩個文件 TXSDK.xcconfig 和 TXSDK.modulemap(直接建立空文件,修改後綴名就行)
TXSDK.xcconfig的內容:
MODULEMAP_FILE[sdk=iphoneos] = $(SRCROOT)/TXSDK/TXSDK.modulemap
MODULEMAP_FILE[sdk=iphonesimulator] = $(SRCROOT)/TXSDK/TXSDK.modulemap
TXSDK.modulemap的內容:下面的路徑根據你的實際路徑來,引入的就是對應的oc sdk
module TXSDK [system] {
header "/Users/kemuchao/Desktop/Test/ABCTimeSDK/TXSDK/TXLiteAVSDK_Smart.framework/Headers/TXLiveBase.h"
header "/Users/kemuchao/Desktop/Test/ABCTimeSDK/TXSDK/TXLiteAVSDK_Smart.framework/Headers/TXLivePlayer.h"
header "/Users/kemuchao/Desktop/Test/ABCTimeSDK/TXSDK/TXLiteAVSDK_Smart.framework/Headers/TXVodPlayer.h"
export *
}
而後把對應的 TXLiteAVSDK_Smart.framework(騰訊的直播雲sdk) 拉到TASDK根目錄下面,引進來
效果以下圖:
接下來,最重要的環節,配置對應的module路徑
去到TXSDK Build Settings, 搜索path,須要修改的地方有三個:
Module Map File (改爲 $(SRCROOT)/TXSDK/TXSDK.modulemap)
Framework Search Paths($(PROJECT_DIR)/TXSDK)
Header Search Paths($(SRCROOT)/TXSDK)
到這裏,就已經橋接完了,去到MacroSDK,把剛剛的TXSDK引用進來
最後在MacroSDK把該用到的包所有導入進來,理我我介入騰訊sdk我須要這些包:
在MacroSDK建立一個test.swift ,寫一個測試用例,運行看看是否成功:
public static var version: String { print(TXLiveBase.getSDKVersionStr()) let player = TXVodPlayer() print(player) return TXLiveBase.getSDKVersionStr() }
有可能報下面這個錯誤:
Undefined symbols for architecture arm64:
"_OBJCCLASS$_TXLiveBase", referenced from:
objc-class-ref in Test.o
"_OBJCCLASS$_TXVodPlayConfig", referenced from:
objc-class-ref in Utils.o
"_OBJCCLASS$_TXVodPlayer", referenced from:
objc-class-ref in BaseVideoController.o
objc-class-ref in Utils.o
objc-class-ref in Test.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
又開始搬磚找錯誤緣由: