ios - 如何隐藏 iOS 框架的私有模块?
问题描述
我有一个代码库,它由 Swift 顶层组成,它是公共 API 和 Objective-C “胆量”,我需要将它很好地包装到 iOS 中.framework
,以便其他开发人员可以在不窃取知识产权的情况下整合我的解决方案。
据我所知,我需要使用模块系统来制作Obj-C
和Swift
协同工作。
所以我做了什么:
1)我创建module.modulemap
2)我创建module.private.modulemap
3)我设置DEFINES_MODULE
为YES
4) 我将 Swift 设置Import Paths
为两个模块映射所在的 Framework 文件夹。
这是我的module.modulemap
样子:
framework module CoolSDK {
umbrella header "/full/path/to/file/MyUmbrella.h"
export *
module * { export * }
}
这是我的module.private.modulemap
样子:
module CoolSDK_Private [extern_c] {
header "/full/path/to/file/ObjC-Guts.h"
export *
}
我有多个问题:
1)为什么我需要设置模块中文件的完整路径?当我尝试像这样设置名称时,header "file.h"
我收到一个错误,即找不到文件。我很肯定我尝试包含的文件位于模块中。我可以设置某种参数Build settings
吗?
( _ Obj-C
_Obj-C
有点像我们这样做的方式,Bridging-Header
但是当涉及到框架时,它不是一个选项)。在这种情况下我该怎么办?如果我完全删除module.modulemap
,XCode 会生成它自己的module.modulemap
,如下所示:
module CoolSDK.Swift {
header "CoolSDK-Swift.h"
requires objc
}
当然,我有一个错误CoolSDK-Swift.h can not be found
,所以我相信这不是一个选择。我是否应该将我的Swift
公共 API 文件作为总括标头包含在内?
3)尽管我的框架构建成功并且没有框架的module.private.modulemap
内部Modules
文件夹正是我需要的(通过私有模块隐藏任何 Obj-C 胆量的迹象),但我仍然能够在我的 SDK 测试中访问私有模块,例如所以import CoolSDK.Private
。我怎样才能使这个模块在框架范围内例外,并且不允许用户访问我的私有模块?
解决方案
正如你所知,我放弃了在框架内混合 Swift 和 Objective-C 代码库的想法。我将我所有的 Swift 部分都转换为 Objective-C,之后我能够应用不同的实践来隐藏私有代码。
推荐阅读
- excel - 如何计算每头奶牛 7 天的移动平均产奶量,日期未排序。Excel
- python - 在导入前解析 django-import-export 中的字段
- java - 我的 for 循环在我的 while 循环完成后中断,它应该重申
- html - 一旦我添加了一些其他段落或标题,我的段落字体大小就会改变
- laravel - 路由存在时出现 404 not found 错误
- typescript - 与 --build 开关一起使用时,tsc typescript 3.5 中的未知构建选项“-p”
- android - 如何在带有 kotlin 的 android 应用程序中有效地使用 ParsePlatform?
- android - Kotlin Android - 更改应用启动背景颜色
- php - Laravel 日期验证不适用于 20001 年
- docker - Docker:在 Dockerfile 中设置导出路径