当前位置:  开发笔记 > IOS > 正文

框架的私有模块映射

如何解决《框架的私有模块映射》经验,为你挑选了1个好方法。

我正在使用这个答案创建一个模块映射来为CommonCrypto创建一个模块,这样我就可以在框架中使用它.

但是,这样做意味着我使用此框架的任何项目都可以访问CommonCrypto import CommonCrypto- 更糟糕的是,在另一个框架中声明CommonCrypto并将其导入项目会导致Redefinition of module 'CommonCrypto'错误.

即以下设置:

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

有没有办法创建模块映射,但是它创建/使用的是哪个框架是私有的?(很像internalSwift for Framework中的access属性).该LLVM锵文档显示private属性,但我不能工作在什么地方把这个在我的模块图,它甚至可能不是为了这个目的!还有一个export属性,但我再也不确定如何使用它......!

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

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

这工作正常(除了你不能"去定义"但我不介意)用于FrameworkA/ FrameworkB.



1> tmpz..:

免责声明:我没有试过这个,CommonCrypto但它适用于我的情况libz

可能的解决方案是创建Clang文档中module.private.modulemap描述的内容

因此,例如在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中的私有模块,名称不会冲突.


有没有办法让这种东西使用CocoaPods工作?我已经尝试过使用modulemaps的一些东西,但我似乎无法让它工作
推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有