3

我有一个动态框架MyFramwork.framework,在框架的项目中,Swift 代码和 ObjC 标头标记为受保护(在 MyFramwork.framework 内部使用)和公共(由应用程序外部使用)。MyFramwork.framework 也是 App 中的嵌入式框架

按照此处提到的步骤http://nsomar.com/project-and-private-headers-in-a-swift-and-objective-c-framework/,我创建了一个

module MyFramwork_Private {
    header "../...h"
    ...

    export *
}

带有所有受保护的标头(SWIFT_INCLUDE_PATHS= module.modulemap 文件所在目录的路径)

和一个PublicHeaders.h(我在我的伞形标题中导入MyFramwork.h)和所有公共标题

如何制作一个使用 App 中可用的 MyFramwork 私有代码的公共 Swift 类/结构?

如果我import MyFramwork_Private在来自 MyFramwork 的 swift 文件中,应用程序在构建 MyFramwork.framework 时,将尝试访问定义的私有头文件module MyFramwork_Private并且构建失败,因为应用程序看不到受保护的头文件

4

1 回答 1

5

我也一直在为此苦苦挣扎,这就是我发现对我有用的东西:

  1. 除了您已经采取的步骤之外,请确保在 $(SRCROOT)/Myframework 中创建另一个模块映射(例如 MyFramework.private.modulemap)并将以下内容添加到此文件中:

    module MyFramework_Private { export *
    }

  2. 在 .xcconfig 文件中编辑以下选项: SWIFT_INCLUDE_PATHS = $(SRCROOT)/MyFramework MODULEMAP_PRIVATE_FILE = $(SRCROOT)/MyFramework/MyFramework.private.modulemap

在此之后,您应该一切顺利,使用您的框架的应用程序现在应该清楚地了解 MyFramework_Private 是什么,并且您的内部 Swift 文件可以访问私有标头。让我知道它是如何为您服务的,如果可以的话,很乐意提供帮助。

于 2018-04-27T15:42:14.643 回答