如何隐藏iOS框架的私有模块?

如何隐藏iOS框架的私有模块?,ios,objective-c,swift,private,ios-frameworks,Ios,Objective C,Swift,Private,Ios Frameworks,我有一个由Swift顶层组成的代码库,该顶层是公共API和Objective-C“guts”,我需要将其很好地封装到iOS.framework中,以便其他开发人员可以在不窃取知识产权的情况下合并我的解决方案 如我所知,我需要使用模块系统,以使Obj-C和Swift协同工作 所以我所做的是: 1) 我创建了modulemap.modulemap 2) 我创建了module.private.modulemap 3) 我将DEFINES\u模块设置为YES 4) 我将Swift的导入路径设置为两个模块

我有一个由Swift顶层组成的代码库,该顶层是公共API和Objective-C“guts”,我需要将其很好地封装到iOS
.framework
中,以便其他开发人员可以在不窃取知识产权的情况下合并我的解决方案

如我所知,我需要使用模块系统,以使
Obj-C
Swift
协同工作

所以我所做的是:

1) 我创建了
modulemap.modulemap

2) 我创建了
module.private.modulemap

3) 我将
DEFINES\u模块设置为
YES

4) 我将Swift的导入路径设置为两个模块映射所在的框架文件夹

下面是我的
模块.modulemap
的样子:

framework module CoolSDK {
  umbrella header "/full/path/to/file/MyUmbrella.h"

  export *
  module * { export * }
}
module CoolSDK_Private [extern_c] {
      header "/full/path/to/file/ObjC-Guts.h"

      export *
}
下面是我的
module.private.modulemap
的样子:

framework module CoolSDK {
  umbrella header "/full/path/to/file/MyUmbrella.h"

  export *
  module * { export * }
}
module CoolSDK_Private [extern_c] {
      header "/full/path/to/file/ObjC-Guts.h"

      export *
}
我有很多问题:

1) 为什么我需要设置模块中文件的完整路径?当我试图只设置名称,如so
header“file.h”
时,我得到一个错误,文件找不到。我确信我试图包含的文件位于模块中。是否有某种类型的参数可以在
生成设置中设置

2) 如上所述,我的计划是构建一个具有
Obj-C
guts和Swift顶层的框架,因此我并不真正需要伞头,我只需要定义一个私有模块,这样Swift部分就可以访问
Obj-C
部分(与我们使用
桥接头的方式类似,但当涉及到框架时,它不是一个选项)。在这种情况下我该怎么办?如果我完全删除
模块.modulemap
,XCode将生成它自己的
模块.modulemap
,如下所示:

module CoolSDK.Swift {
    header "CoolSDK-Swift.h"
    requires objc
}
当然,我有一个错误,
CoolSDK Swift.h找不到
,所以我认为这不是一个选项。我应该将我的
Swift
公共API文件作为伞头吗


3) 虽然我的框架构建成功,而且框架的
module.private.modulemap
文件夹中没有
module.private.modulemap
,这正是我所需要的(通过private module隐藏Obj-C胆量的任何迹象),但我仍然能够在我的SDK测试中访问private module,比如导入CoolSDK.private
。我怎样才能使这个模块成为框架范围内的特殊模块,并且不允许用户访问我的私有模块?

正如您所知,我放弃了在框架内混合使用Swift和Objective-C代码库的想法。我把我所有的Swift部分都转换成Objective-C,之后我就可以应用不同的方法来隐藏私有代码了