加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift @import模块”实现中;使用#import

发布时间:2020-12-14 19:09:31 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个混合的ObjC- Swift框架.但是我试图为我的Swift文件制作一个私有模块,我失去了很多头发. 我在iOS mixed dynamic framework – bridge objc headers with private module中执行了一些步骤,并结合了https://stackoverflow.com/a/36878037/749
我正在尝试创建一个混合的ObjC- Swift框架.但是我试图为我的Swift文件制作一个私有模块,我失去了很多头发.

我在iOS mixed dynamic framework – bridge objc headers with private module中执行了一些步骤,并结合了https://stackoverflow.com/a/36878037/749438中的一些步骤

基本上我现在有一个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 *
}

}

MyCore_PrivateUmbrella.h导入我想私下暴露给我的Swift代码的所有头文件.其背后的原因只是在模块中包含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中的代码.
构建项目会给我一个这样的错误(黑条只隐藏项目名称和文件路径):

what is this error?

现在单击错误将我带到生成的MyCore-Swift.h,其中@import MyCore.MyCorePrivate看似错误.

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

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

解决方法

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

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

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

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

4)编译你的项目

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

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

7)删除框架头中应该是私有的所有import语句

8)删除头文件目录中应该是私有的头文件的所有.h文件(从主框架头中删除了import语句)

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

模块文件应该是非常简单的:

framework module MyFramework { 
umbrella header "MyFramework.h" export * module * {export *}}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读