Swift工程調用含有FMDB的Framework編譯報錯的解決方法

現象:

一個Objective-C寫的Framework(舊有或者新寫),含有第三方庫FMDB;

一個Swift App工程,引用了該Framework,編譯,報錯定位在import sqlite3.h,並顯示錯誤信息:Include of non-modular header inside framework module。


然後,你各種調工程配置,比如設置Allow non-modular爲YES等等,無解,鬱悶。


So,

如果你不需要封裝Framework,那你可以直接在Swift App 中直接引入OC的FMDB,做橋接,該幹嘛幹嘛,看Github FMDB的Swift語法示例(注意Swift2.1語法的變化);

但如果你項目或產品決定了必須Framework封裝FMDB,但是現在卡在上面那個錯,怎麼辦?


解決方法:

還是FMDB官方的方法,看:https://github.com/ccgus/fmdb/tree/swiftFramework#using-fmdb-in-a-framework

簡單說就是:

1、Github下載FMDB源碼的分支:https://github.com/ccgus/fmdb/tree/swiftFramework

2、將下載的源碼 fmdb-swiftFramework/src/fmdb 文件夾複製到你的Framework項目目錄,XCode里加入該文件夾,注意排除掉FMDB.h文件。

編輯Framework的對外頭文件,加入FMDB的幾個頭文件,如:

#import <YourFramework/FMDatabase.h>
#import <YourFramework/FMResultSet.h>
#import <YourFramework/FMDatabaseAdditions.h>
#import <YourFramework/FMDatabaseQueue.h>
#import <YourFramework/FMDatabasePool.h>

在工程Build Phases/Headers,將這幾個頭文件由Project設爲Public。

編譯生成YourFramework.framework。

3、在Swift App工程中加入YourFramework.framework,接着注意設置Build Phases/Copy Files裏添加YourFramework.framework,Destination選爲Frameworks。

OK,加點使用代碼,然後編譯Swift App工程,這時編譯通過,耶。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章