Import framework by module map
2017-03-30 本文已影响419人
巴依老爷的锅
一般的Swift项目(Executable)中如需使用Objc库可以使用Bridging Header的方式,然而如果Swift项目是Framework则无法采用此种方式,这时就需要另一种方式:Module Map。
下面以CommonCrypto为例
- 在我们的Swift Framework工程中添加一个新的Target, 类型选择Framework,起名为CommonCrypto
- 给CommonCrypto添加一个文件,类型选择Other->Configuration Settings File,起名为CommonCrypto.xcconfig,这是一个配置文件,其内容为:
MODULEMAP_FILE[sdk=iphoneos] = $(SRCROOT)/CommonCrypto/iphoneos.modulemap
MODULEMAP_FILE[sdk=iphonesimulator] = $(SRCROOT)/CommonCrypto/iphonesimulator.modulemap
分别对应真机和模拟器上的modulemap文件。 - 创建配置文件中引用的modulemap模块文件:
- iphoneos.modulemap 内容为:
module CommonCrypto [system] {
header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/CommonCrypto/CommonCrypto.h"
export *
} - iphonesimulator.modulemap 内容为:
module CommonCrypto [system] {
header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/CommonCrypto/CommonCrypto.h"
export *
}
如果两个文件内容相同可以使用同一文件,header字段为framework的头文件路径。
- iphoneos.modulemap 内容为:
-
选择我们的Framework Project设置Info->Configurations,找到Target CommonCrypto,将其Debug和Release的Based On Configuration File设置为CommonCrypto,即对应CommonCrypto.xcconfig文件。
未命名.jpg -
选择我们的Framework Target设置 Build Phases 添加依赖CommonCrypto
屏幕快照 2017-03-30 下午9.49.28.png - 大功告成