首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何隐藏iOS框架的私有模块?

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

Stack Overflow用户
提问于 2020-01-30 03:24:56
回答 1查看 542关注 0票数 4

我有一个由Swift顶层组成的代码库,这意味着它是公共应用程序接口和Objective-C“内部”,我需要很好地将其包装到iOS .framework中,以便其他开发人员可以在不窃取知识产权的情况下合并我的解决方案。

据我所知,为了让Obj-CSwift协同工作,我需要使用模块系统。

所以我做了什么:

1)我创建了module.modulemap

2)我创建了module.private.modulemap

3)我将DEFINES_MODULE设置为YES

4)我将Swift的Import Paths设置为两个模块映射所在的框架文件夹。

下面是我的module.modulemap的样子:

代码语言:javascript
复制
framework module CoolSDK {
  umbrella header "/full/path/to/file/MyUmbrella.h"

  export *
  module * { export * }
}

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

代码语言:javascript
复制
module CoolSDK_Private [extern_c] {
      header "/full/path/to/file/ObjC-Guts.h"

      export *
}

我有多个问题:

1)为什么需要在模块中设置文件的全路径?当我尝试像这样设置文件名时,我得到了一个错误,那就是找不到header "file.h"文件。我确信我尝试包含的文件位于模块中。是否有可以在Build settings中设置的参数

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

代码语言:javascript
复制
module CoolSDK.Swift {
    header "CoolSDK-Swift.h"
    requires objc
}

当然,我有一个错误,那就是CoolSDK-Swift.h can not be found,所以我认为这不是一种选择。我应该包括我的Swift公共API文件作为一个保护伞标题吗?

3)虽然我的框架构建成功了,并且在框架的Modules文件夹中没有module.private.modulemap,这正是我需要的(通过私有模块隐藏任何Obj-C guts的迹象),但我仍然可以在我的SDK测试中访问私有模块,比如so import CoolSDK.Private。我怎样才能使这个模块在框架范围内例外,并且不允许用户访问我的私有模块呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-13 23:32:03

如你所知,我放弃了在框架中混合Swift和Objective-C代码库的想法。我将我所有的Swift部分转换为Objective-C,之后我能够应用不同的实践来隐藏私有代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59974216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档