在<Project name>的实现中,模块'<module name>'的Swift @import; 使用#import

Gee*_*e.E 6 xcode module clang swift

我正在尝试创建一个混合的ObjC-Swift框架.但是我试图为我的Swift文件制作一个私有模块,我失去了很多头发.

我在iOS混合动态框架中遵循了一些步骤- 将私有模块桥接objc头与/sf/answers/2581462621/中的一些步骤相结合

基本上我现在有一个module.modulemap,其中包含以下内容:

module MyCore {    //Adding 'framework' before module is giving me an "Umbrella not found"-error :/
umbrella header "MyCore.h"

export *
module * { export * }

explicit module MyCorePrivate {
    header "MyCore_PrivateUmbrella.h"
    export *
}
Run Code Online (Sandbox Code Playgroud)

}

MyCore_PrivateUmbrella.h进口所有的头我想私下接触到我的SWIFT CODE.其背后的原因只是在模块中包含1个标题然后所有要显示的标题更容易(因为您需要包含标题的特定路径...).

我的构建设置如下:

  • DEFINES_MODULE:是的
  • PRODUCT_MODULE_NAME:MyCore
  • CLANG_ENABLE_MODULES:是的
  • SWIFT_OBJC_INTERFACE_HEADER_NAME:MyCore-Swift.h
  • SWIFT_INCLUDE_PATHS:目录的路径module.modulemap

最后但并非最不重要; ALWAYS_SEARCH_USER_PATHS设置为NO

在我的Swift文件中,我使用导入模块import MyCore.MyCorePrivate.这按预期工作,我可以使用Objective-C中的代码.
构建项目会给我一个这样的错误(黑条只隐藏项目名称和文件路径):

这个错误是什么?

现在点击错误将我带到生成MyCore-Swift.h@import MyCore.MyCorePrivate看似错误的地方.

我不知道为什么这是错的,我也不知道如何解决这个问题.特别是因为它是由XCode生成的文件.

有谁知道这里发生了什么?

Avn*_*arr 2

构建后,您需要修改生成的框架:

1) 不要创建任何私有模块。恢复为默认设置。

2) 您想要向 swift 公开的任何代码都添加到您的框架标头中,并确保标头在构建部分中设置为公共,否则 swift 代码将无法访问。(使用 <> 语法)

3)从swift到objc的任何代码公开。

4)编译你的项目

5)转到您的框架构建目录(即MyFramework.framework)

6)打开框架headers目录下的框架头文件(Myframework.h文件)

7) 从框架头中删除所有本应私有的导入语句

8)删除所有.h文件从 headers 目录中删除本应私有的 headers 的

9)转到.module文件并删除swift模块部分

模块文件应该非常简单:

framework module MyFramework { 
umbrella header "MyFramework.h" export * module * {export *}}
Run Code Online (Sandbox Code Playgroud)