【发布时间】:2017-01-10 14:50:56
【问题描述】:
我发现了另一个问题,它提供了有关问题和可能解决方案的更多详细信息。似乎有一个已知的错误是未来改进的主题。
Objective C classes within an iOS Swift-based dynamic framework
我正在用 Swift 开发一个框架,并且在框架内使用了一些 Objective-C 代码。到目前为止,我的模块图如下所示:
framework module MyModule {
umbrella header "MyModule-umbrella.h"
export *
explicit module Private {
header "MyTools.h"
}
}
我担心MyTools.h 中的所有 API 在框架外部都是可见的:例如,如果您使用 Cocoapods 安装框架,那么您将 import MyModule 到您的应用程序中(不是 MyModule.Private),您可以访问MyTools.h,这是不可取的和多余的。有什么方法可以让 MyTools 在框架之外不可见?
PS。我使用 Cocoapods 分发框架,这是我的 podspec(最重要的部分):
s.module_map = 'Pod/MyModule.modulemap'
s.frameworks = 'CoreData', 'CoreTelephony', 'SystemConfiguration'
s.resources = 'Pod/Classes/MessageStorage/*.xcdatamodeld'
s.public_header_files = 'Pod/Classes/**/*.h'
s.private_header_files = 'Pod/Classes/MyTools/**/*.h'
s.source_files = 'Pod/Classes/**/*.{h,m,swift}'
PSS。我的伞头不导入MyTools.h
PSSS。只是试图从主模块中排除标题:
framework module MyModule {
umbrella header "MyModule-umbrella.h"
export *
exclude header "MyTools.h"
explicit module Private {
header "MyTools.h"
}
}
运气不好。
【问题讨论】:
-
您是否尝试过
exclude来自模块的私有标头? -
@user28434 你的意思是在模块映射中?刚试了一下。没用。
-
你可以再试一次,但没有
explicit module? -
@user28434 如果我删除模块声明,那么我将如何使用 swift 框架中的 Objective-c 源代码?
-
@user28434 我之前试过了。不能解决问题,这对我来说很明显。
标签: swift module frameworks cocoapods access-control