現象:
一個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工程,這時編譯通過,耶。