我有一个动态框架MyFramwork.framework,该框架项目中的Swift代码和ObjC标头分别标记为Protected(在MyFramwork.framework中内部使用)和Public(由App内部使用)。 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中)和所有 public 标题

如何使用App中可用的MyFramwork private 代码制作Public Swift类/结构?

如果我在MyFramwork的快速文件中import MyFramwork_Private,则App在构建MyFramwork.framework时将尝试访问module MyFramwork_Private中定义的 private 头,并且构建失败,因为App无法看到受保护的头

最佳答案

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

  • 除了已执行的步骤外,请确保在$(SRCROOT)/ Myframework中创建另一个模块映射(例如MyFramework.private.modulemap),并将以下内容添加到此文件中:
    module MyFramework_Private { export *
    }
  • 在.xcconfig文件中编辑以下选项:SWIFT_INCLUDE_PATHS = $(SRCROOT)/MyFrameworkMODULEMAP_PRIVATE_FILE = $(SRCROOT)/MyFramework/MyFramework.private.modulemap

  • 在此之后,您应该会很好,使用框架的应用程序现在应该清楚地了解MyFramework_Private是什么,并且内部Swift文件可以访问 private 标头。让我知道如何为您解决问题,如果可以的话,很高兴为您提供帮助。

    10-08 01:01