gpt4 book ai didi

xcode - 框架的私有(private)模块映射

转载 作者:IT王子 更新时间:2023-10-29 05:17:39 24 4
gpt4 key购买 nike

我正在使用 this answer创建模块映射为 CommonCrypto 创建模块,以便我可以在框架中使用它。

然而,这样做意味着我使用此框架的任何项目都可以通过 import CommonCrypto 访问 CommonCrypto - 更糟糕的是,在另一个框架中声明 CommonCrypto 并将其导入到项目中会导致 模块“CommonCrypto”的重新定义错误。

即以下设置:

MainProject
|--> import FrameworkA - module map for CommonCrypto
|--> import FrameworkB - module map for CommonCrypto

有没有一种方法可以创建模块映射但将其私有(private)用于其创建/使用的框架? (很像 Swift 中框架的 internal 访问属性)。llvm Clang docs显示 private attribute但我无法弄清楚将它放在我的模块映射中的什么位置,甚至可能不是为了这个目的!还有一个 export attribute但我还是不完全确定如何使用它...!

这是我用于 CommonCrypto 的模块映射 - $(SDKROOT) 在构建阶段被换出到正确的位置(对于 iphoneosiphonesimulator SDK):

module CommonCrypto [system] [extern_c] {
umbrella header "$(SDKROOT)/usr/include/CommonCrypto/CommonCrypto.h"
export *
}

这在 FrameworkA/FrameworkB 中使用效果很好(除非你不能“去定义”,但我不介意)。

最佳答案

免责声明:我没有为 CommonCrypto 尝试过这个,但它适用于我使用 libz

的情况

一个可能的解决方案是创建一个 module.private.modulemap,如 Clang documentation 中所述。

例如,在 FrameworkA 中,您可以像这样为 FrameworkA 编写一个 module.modulemap 文件:

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 中的私有(private)模块,名称不会冲突。

关于xcode - 框架的私有(private)模块映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34265339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com