公共swift类导入混合语言(ObjC + Swift)动态框架中的“私有”模块

时间:2018-04-10 10:25:10

标签: ios objective-c swift frameworks swift-framework

我有一个动态框架MyFramwork.framework,其Swift代码和ObjC标头标记为受保护的(在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中导入)包含所有公共标题

如何创建一个使用App中提供的MyFramwork私有代码的Public Swift类/结构?

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

1 个答案:

答案 0 :(得分:3)

我也一直在努力解决这个问题,这就是我发现的对我有用的技巧:

  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
  3. 在此之后你应该很高兴,使用你的框架的应用程序现在应该清楚地了解MyFramework_Private是什么,并且你的内部Swift文件有办法访问私有头文件。让我知道它是如何为你效劳的,如果可以的话,我很乐意提供帮助。