Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在swift中创建依赖于另一个objective-c pod的pod_Objective C_Swift_Xcode_Cocoapods_Adaptive Cards - Fatal编程技术网

在swift中创建依赖于另一个objective-c pod的pod

在swift中创建依赖于另一个objective-c pod的pod,objective-c,swift,xcode,cocoapods,adaptive-cards,Objective C,Swift,Xcode,Cocoapods,Adaptive Cards,正如我在图中所解释的,我想在swift中创建一个Pod库,它有另一个用Objective-c编写的Pod库依赖项 现在我知道在swift中使用objective-c代码需要桥接文件,我也创建了它。 但是,当我将其设置到Pod的构建阶段时,我遇到了以下错误:0:error:不支持将桥接头与框架目标一起使用 framework module DemoPod { umbrella header "DemoPod-umbrella.h" // Solution 2

正如我在图中所解释的,我想在swift中创建一个Pod库,它有另一个用Objective-c编写的Pod库依赖项
现在我知道在swift中使用objective-c代码需要桥接文件,我也创建了它。 但是,当我将其设置到Pod的构建阶段时,我遇到了以下错误
:0:error:不支持将桥接头与框架目标一起使用

framework module DemoPod {
  umbrella header "DemoPod-umbrella.h"
  
  // Solution 2
  framework module AdaptiveCard {
      umbrella header "/Users/jageen.shukla/Downloads/DemoPod/Example/Pods/AdaptiveCards/AdaptiveCards.framework/Headers/ACFramework.h"
      export *
      module * { export * }
  }
  // ----
  
  export *
  module * { export * }
}
我在互联网上得到提示,我应该将.h文件放入pod umbrane.h文件中,但这也给了我错误
Include框架模块'DemoPod'中的非模块头。

  • 请帮助我,如果你在过去有类似的问题,并解决它
  • 也欢迎提供一些提示/建议
  • 如果你想玩的话,这是我的demopod项目

    编辑 根据Ashsis的建议,我在DemoPod.modulemap中添加了以下代码

    framework module AdaptiveCard {
      umbrella header "/Users/jageen.shukla/Documents/Project/ai answer/DemoPod/Example/Pods/AdaptiveCards/AdaptiveCards.framework/Headers/ACFramework.h"
      requires ios
      export *
    }
    
    但我仍然无法构建项目,因为它给我在目标项目中找不到模块“AdaptiveCard”的错误。

    我在DemoPod.modulemap中更改代码

    framework module DemoPod {
      umbrella header "DemoPod-umbrella.h"
      
      // Solution 2
      framework module AdaptiveCard {
          umbrella header "/Users/jageen.shukla/Downloads/DemoPod/Example/Pods/AdaptiveCards/AdaptiveCards.framework/Headers/ACFramework.h"
          export *
          module * { export * }
      }
      // ----
      
      export *
      module * { export * }
    }
    

    现在我可以编译我的项目了。但我不确定我所做的是否是良好的实践?另外,我也不知道为什么要提到自适应卡头文件的“绝对路径”。
    最新代码:[演示2][4] https://drive.google.com/file/d/1Xve0DUAy4bQ7sx4d3H8WLbJJwTqlJnCt/view?usp=sharing

    正如错误所说,框架中不允许使用桥接头,只有在应用程序中才允许

    详细文档如下所示

    Swift代码将能够访问您的框架的公共伞形标题中包含的objc中的所有内容

    // In this header, you should import all the public headers of your framework using statements like #import <YourFramework/PublicHeader.h>  
    
    //在此标头中,您应该使用#import之类的语句导入框架的所有公共标头
    
    您需要从构建设置中添加桥接头的位置删除桥接头,以便编译框架

    你现在该怎么办

    这样做:

  • 删除桥接头文件
  • 在框架的生成设置中删除对桥接头文件的引用
  • 将必要的标题添加到伞形文件([Name].h)
  • 在框架的“构建阶段”的“标题”部分公开包含的文件

  • 清理和重建


  • 注意:“伞形头文件”是一个文件(名为[ProductName].h),通常表示框架的所有公共头。它通常只是框架中包含的其他头的#import语句列表。在Xcode中,如果打开UIKit.h,您将看到伞式文件的一个很好的示例。

    建议仅在应用目标和应用测试目标处使用桥接头来访问swift中的目标c和CPP文件。当涉及到静态库或框架时,您应该使用modulemap向swift库公开Objc和CPP功能。请检查如何在此处使用modulemap的代码实现:

    我可能忘记了一个步骤,但我认为我们所要做的就是创建一个与pod名称匹配的.h文件,并将其作为公共文件添加到“Headers”构建阶段。这是一个用作pod的二进制XC框架。May of不得不在公共函数上预先添加@objc,但不确定谢谢你的点击,我尝试了,但没有成功:(.我所做的是[1]创建DemoPod.h[2]添加#导入到该文件中[3]将DemoPod.h添加到公共头中。我遗漏了什么吗?我尝试了这些步骤,但正如我在问题中解释的那样,这会导致另一个错误“包括框架模块‘DemoPod’内的非模块头”".在您的回答中,您指向我们的此链接,但我想您希望我阅读此文档,对吗?我不是想指出:p,只是想确认一下。顺便说一句,我试图将头文件放入保护伞中,但它给了我上面提到的错误。如果您认为我做错了什么,您可以使用我的演示项目,并确认您的解决方案有效吗?嗨,Ashi感谢您的博客和评论,我尝试使用modluemap导出adaptivecard库,但project仍未编译。现在它显示目标项目上有错误。(找不到adaptivecard).你能在这里提到错误吗?错误将发生在哪个阶段?编译错误,链接错误?我相信你的回答帮助我解决了我的主要问题,但我不确定我做得是否正确。请查看我编辑的问题。并让我知道你的评论。不要使用“绝对路径”,使用“相对路径”关于定义modulemap的位置,如果它属于公共标题/伞形标题所在的同一文件夹,则可以直接使用它们,否则可以使用.././Notion引用其父文件夹,并转到项目文件夹,并引用这些标题的正确目录。感谢您的评论,我尝试了,但似乎没有找到识别它,可能我必须设置搜索头路径?