【问题标题】:umbrella header for module 'myFramework' does not include header 'otherFramework.h'模块“myFramework”的伞头不包括标题“otherFramework.h”
【发布时间】:2015-12-31 15:02:51
【问题描述】:

我的 Swift / iOS9 框架“viewer_protocol”使用另一个外部 Objective-C 框架 (CocoaAsyncSocket)。我正在使用 Carthage 构建 CocoaAsyncSocket。到目前为止一切正常:在我的框架 Xcode 项目中有一个示例应用程序,使用我的框架没有任何问题。

现在我想在不同的 Xcode 项目中使用我的框架 - 尽管使用 Carthage。我只包含我的框架作为依赖项,Carthage 自动将依赖项解析为 CocoaAsyncSocket。我将这两个框架都嵌入了这个新的 Xcode 项目并构建了我的应用程序:这里一切正常 - 除了一个我无法摆脱的警告:

/Users/John/Repositories/my_project/<module-includes>:1:1: 
Umbrella header for module 'my_project' does not include header 'GCDAsyncSocket.h'

这是我的框架标题:

#import <UIKit/UIKit.h>

//! Project version number for my_project.
FOUNDATION_EXPORT double my_projectVersionNumber;

//! Project version string for my_project.
FOUNDATION_EXPORT const unsigned char my_projectVersionString[];

// In this header, you should import all the public headers of your framework     
using statements like #import <my_project/PublicHeader.h>
#import <CocoaAsyncSocket/CocoaAsyncSocket.h>

如您所见,CocoaAsyncSocket.h 已导入。此外,在我的框架内,包含了 CocoaAsyncSocket.h 文件:

我在这里缺少什么?我在我的框架中使用了其他几个外部框架,它们没有任何警告 - 所有这些外部框架都是用 Swift 编写的 - CocoaAsyncSocket 是纯 Objective-C。

这是我的框架 module.modulemap:

 framework module my_project {
   umbrella header "my_project.h"

   export *
   module * { export * }
 }

 module viewer_protocol.Swift {
     header "my_project-Swift.h"
 }

更新

我找到了解决方案:从

更改我的框架标题中的导入语句
#import <CocoaAsyncSocket/CocoaAsyncSocket.h>

#import "CocoaAsyncSocket/CocoaAsyncSocket.h"

现在 Xcode 找到了头文件,警告消失了。

【问题讨论】:

    标签: objective-c xcode swift frameworks carthage


    【解决方案1】:

    我今天遇到了同样的问题

    模块“HockeySDK”的伞形标头不包含标头“BITHockeyBaseViewController.h

    解决方案是

    1.构建和运行项目并转到Report Navigator

    2.查看警告,点击展开详情

    它将为您提供需要更改的文件名 正如您在下面的屏幕截图中看到的那样

    所以我刚刚更新了 AppDelegate.m 文件中的导入语句

    #import "HockeySDK/HockeySDK.h"
    

    #import <HockeySDK/HockeySDK.h>
    

    问题消失了..

    希望这会对某人有所帮助。谁来这里寻求解决方案。

    【讨论】:

    • 对我来说也是这样,但在我的情况下,问题是 Twitter.SDK。感谢您的回复!
    • 我在使用 UnityAds SDK 时遇到了同样的问题。我在做 #import "UnityAds/UnityAds.h" 而不是 #import
    【解决方案2】:

    对我来说,解决方案如下:

    1) 每个 Objective C 框架都有 1 个头文件,其中包含以下所有内容:

    #import ...
    #import ...
    #import ...
    

    2) 确保此文件导入缺少的标头。

    3) 再次构建项目,它应该会删除警告。

    【讨论】:

    • 谢谢你。
    【解决方案3】:

    如果您的标头在以下位置设置为公开,则仅出于完整性考虑:

    构建阶段 > 标题

    你应该

    正如其他人所提到的,在您的主标题中包含导入

    如果不需要公开,则将该标头移至“私有”

    【讨论】:

      【解决方案4】:

      我最近遇到了同样的问题。显然我在目标成员中将头文件设置为public,但它没有在伞头中公开。通过使用project 访问而不是public 来修复问题。

      【讨论】:

      • 这应该有更多的赞成票。修复标头的隐私设置比导入不需要的内容要好得多。
      • 这对我也有用。我实际上不能像上面建议的那样公开我的,因为它包含了 Swift 无法处理的 C++ 内容。 :
      • 我觉得这是他们在写错误信息时得到的答案。感谢您将其转化为可操作的文字!
      【解决方案5】:

      我有同样的问题。似乎与旧的构建文件有关。

      标准的 Xcode 问题修复程序对我有用:

      1. 清理项目 (Product > Clean Build Folder)
      2. 已删除派生数据
      3. 重启 Xcode

      【讨论】:

      • 在 XCode 8 上我遇到了同样的问题,只有这个有效。不清理,需要删除派生数据。
      • 我清理了构建文件夹(option+cmd+shift+K)并再次构建。警告消失了。
      • 如何删除派生数据?
      【解决方案6】:

      尝试修复存​​档构建错误导致我出现此错误并发布

      我的解决方案非常简单,但我花了很长时间才弄清楚。

      • 当我运行 $ pod install 时,它在与我的 .xcodeproj 文件相同的目录中为我生成了一个工作区。
      • 但是我已经创建了一个工作区作为其父目录。
      • 然后我简单地删除了我的旧工作区并使用 pod 创建的那个


      希望这对某人有帮助! glhf!

      【讨论】:

        【解决方案7】:

        对我来说,修复相当简单,提交所有更改并重新构建。警告消失了。

        【讨论】:

          【解决方案8】:

          我们最近得到了这个,这是由于 DerivedData 中的损坏。删除该文件夹可解决问题。

          【讨论】:

            【解决方案9】:

            或者,您可能在框架构建阶段的Public 区域内公开了文件,这些文件实际上应该移回Project 区域。

            如果您不希望这些文件位于框架的总括标头中以便可以公开访问,您可以将其还原。

            转到框架 -> 目标 -> 构建阶段并拖动以将不必要的头文件从公共移动到项目。

            【讨论】:

            【解决方案10】:

            看看这篇文章:

            @import vs #import - iOS 7

            它回顾了新模块导入的概念。 我有自己的自定义框架,采用新方法导入objective-c框架后

            旧: #import &lt;MyFramework/MyFramework.h&gt;

            新: @import MyFramework;

            它处理了警告/

            【讨论】:

              【解决方案11】:

              对于其他人: 在我的情况下,我已经将我想从我的框架中公开的标题从“项目”移动到“公共”(框架目标的构建阶段)

              然后 Xcode 给了我这个警告。

              Xcode 告诉我们,我们还需要在使用框架创建的公共头文件中添加#import "name of header in the warning>,以便(框架的)客户端知道这个头。

              所以解决方法:
              1.进入框架公共头文件。(xcode创建框架时创建的那个)。
              2. 添加#import "the-name-of-the-header-in-the-warning.h"

              【讨论】:

              • 这是解决方案中最好、最简单的蒸馏方法。谢谢!
              【解决方案12】:

              就我而言(Obj-c 框架):

              Umbrella header for module 'opus' does not include header 'opus_multistream.h'
              

              我需要改变:

              @import opus.opus_defines;
              

              进入

              @import opus;
              

              (我在 #import "....h"#import &lt;....h&gt; 中没有框架)

              【讨论】:

                猜你喜欢
                • 2015-11-22
                • 2015-10-09
                • 2016-05-25
                • 1970-01-01
                • 1970-01-01
                • 2015-06-28
                • 2019-06-27
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多