天天看點

swift建立橋接檔案_Swift tip:在 Framework 中使用橋接頭檔案

我現在編寫 iOS 和 Mac 程式,絕大部分都采用 Swift 了,越來越少使用 Objective-C。但現存很多庫是使用 Objective-C 編寫的。這樣不可避免遇到 Swift 和 Objective-C 的混編問題。

假如編譯目标是 App,讓 Swift 調用 Objective-C 會很簡單。隻需要在工程中設定一個橋接頭檔案,之後在這個頭檔案中包含 Objective-C 的頭檔案,就可以讓 Swift 調用了。

但建立一個 framework,設定橋接頭檔案後。編譯時會出錯:

using bridging headers with framework targets is unsupported

有個取巧方法可以解決這個問題。

當你建立了 framework,名字為 sharelib,在工程中會有個 sharelib.h 的檔案,内容類似這樣:

#import

//! Project version number for sharelib.FOUNDATION_EXPORT double sharelibVersionNumber;

//! Project version string for sharelib.FOUNDATION_EXPORT const unsigned char sharelibVersionString[];

将這個檔案直接從工程中删掉(不是注釋代碼,而是直接删掉)。或者在 sharelib 的配置 Build Phases/Headers 中,将 sharelib.h 去掉。之後就一切跟在目标為 App 一樣,配置好橋接頭檔案就行了。

這樣做為什麼可以呢,其實我也不清楚。我隻是覺得既然在 App 可以使用橋接頭檔案,在 framework 中沒有理由不可以,一定是某個配置有所不同。之後我就建立目标分别為 App、靜态庫、framework 的工程,依次對比它們的配置選項,再嘗試修改。一個小時左右,發現了這個似乎很白癡的取巧方法。