我在用着这个答案 https://stackoverflow.com/a/25250520/849645创建模块映射来为 CommonCrypto 创建模块,以便我可以在框架中使用它。
然而,这样做意味着我使用此框架的任何项目都可以通过以下方式访问 CommonCryptoimport CommonCrypto
- 更糟糕的是,在另一个框架中声明 CommonCrypto 并将其导入到项目中会导致Redefinition of module 'CommonCrypto'
errors.
IE。以下设置:
MainProject
|--> import FrameworkA - module map for CommonCrypto
|--> import FrameworkB - module map for CommonCrypto
有没有办法创建模块映射,但使其对其创建/使用的框架私有? (很像internal
Swift 中框架的访问属性)。
这llvm Clang 文档 http://clang.llvm.org/docs/Modules.html show a private属性 http://clang.llvm.org/docs/Modules.html#private-module-map-files但我不知道将其放在模块映射中的何处,而且它甚至可能不是用于此目的!
还有一个export属性 http://clang.llvm.org/docs/Modules.html#export-declaration但我还是不完全确定如何使用这个......!
这是我用于 CommonCrypto 的模块映射 -$(SDKROOT)
在构建阶段被交换到正确的位置(对于iphoneos
or iphonesimulator
SDKs):
module CommonCrypto [system] [extern_c] {
umbrella header "$(SDKROOT)/usr/include/CommonCrypto/CommonCrypto.h"
export *
}
这工作得很好(除了你不能“去定义”,但我不介意)用于FrameworkA
/ FrameworkB
.
免责声明: 这个我还没试过CommonCrypto
但它适用于我的情况libz
一个可能的解决方案是创建一个module.private.modulemap
如中所述铿锵文档 http://clang.llvm.org/docs/Modules.html#private-module-map-files
例如在 FrameworkA 中你可以写一个module.modulemap
FrameworkA 文件如下:
module FrameworkACommon {
}
然后你会创建一个module.private.modulemap
像这样文件
explicit FrameworkACommon.Crypto [system] [extern_c] {
header "/Applications/Xcode6-Beta5.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/usr/include/CommonCrypto/CommonCrypto.h"
link "CommonCrypto"
export *
}
然后对 FrameworkB 重复此操作。
现在 CommonCrypto 是 FrameworkA 和 FrameworkB 中的私有模块,名称不会冲突。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)