在Swift中我们引用CommonCrypto的时候会创建一个.modulemap间接引用CommonCrypto.framework,Objective-C中是可以直接#import <CommonCrypto/CommonCryptor.h>的。
但是最近更新了Xcode发现自己的JKCategories Framework类库中引用CommonCrypto后打包Framework文件,或者集成到CocoaPods都会报错。
/Users/runlin/Desktop/TestJKCategoriesPod/Pods/JKCategories/JKCategories/Foundation/NSData/NSData+JKEncrypt.h:11:9: Include of non-modular header inside framework module 'JKCategories.NSData_JKEncrypt': '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator11.2.sdk/usr/include/CommonCrypto/CommonCryptor.h'
调试发现将要Define Module设置为NO问题即消失。
如果想保留Define Module为YES。同样效仿Swift配置个modulemap即可。
Xcode工程中新建文件夹与文件CommonCrypto/module.modulemap,经过不断尝试内容为
1 2 3 4 5 6 7 |
module CommonCrypto [system] { header "/usr/include/CommonCrypto/CommonCrypto.h" export * } framework module JKCategories { } |
JKCategories Framework target =>build settings=>module map file 设置为$(SRCROOT)/CommonCrypto/module.modulemap
到这一步JKCategories Framework的target就可以直接生成Framework了。
CocoaPods配置Module Map
CocoaPods配置module map file 是在JKCategories.podspec中,添加以下配置
s.module_map = "CommonCrypto/module.modulemap"
Push podspec即可。