【问题标题】:Added unit testing target to Xcode - failed to import bridging header won't go away向 Xcode 添加了单元测试目标 - 导入桥接头失败不会消失
【发布时间】:2015-04-05 06:43:42
【问题描述】:

我在我的 Xcode 项目中添加了一个新的测试目标。我的项目有 Swift 代码和 Objective-C 代码,并且有一个桥接头。在将桥接头添加到 UnitTesting 的构建设置或执行 import MyTarget 时,我收到了错误:

导入桥接头失败

我试过了:

  • 将桥接头添加到项目、单元测试和主要目标的构建设置中。
  • defines modules 更改为Yes
  • 将桥接头文件移动到根文件夹。

我还尝试制作一个示例项目,该项目构建并运行良好。在这一点上,将我拥有的所有东西都投入到一个全新的项目中并不是一种选择。

【问题讨论】:

  • 你在这方面有什么进展吗?我也有同样的问题...
  • @ManuelM。将${SDKROOT}/usr/include/libxml2 添加到项目的标题搜索路径。让我知道这是否适合您。
  • 它没有工作,我恐怕...... :(
  • @ManuelM。你找到解决办法了吗?
  • @swalkner 它通过 Xcode 的其他版本得到了解决。最终它奏效了。我真的不知道我做了什么不同,对不起。我想我在桥接头中添加了一些需要的框架。

标签: ios swift xcode unit-testing bridging-header


【解决方案1】:

在这一点上,我从来不需要import MyTarget 来让单元测试在 Swift 中工作。

常见解决方案

  • 我假设您尝试过,但不清楚您是否同时将桥接头添加到应用目标和测试目标?
  • 另一个可能不理想的选项是在您的测试目标中添加一个桥接头,以便您实际上有 2 个桥接头。它们应该看起来一样,并且是一个很好的测试。
  • 如果使用$(SRCROOT) 引用您的桥接头路径,请确保它被评估为正确的路径。
  • 如果所有其他方法都失败了,您应该对您的 .xcodeproj 与您的工作项目之一进行文件差异,并匹配任何可能不同的相关值。

桥接头系统并不完美,但我遇到了一些问题。

【讨论】:

    【解决方案2】:

    如果你使用 CocoaPods 作为包管理器,必须设置搜索路径等。给一个简单的方法,

    尝试将其添加到您的 Podfile 中:

    target 'YourProductTests' do
        inherit! :search_paths
        # Pods for testing
    end
    

    pod install

    它对我有用。

    如果上述解决方案不适合您,请尝试手动设置:

    1. 单击您的测试目标 -> 构建设置 -> 选项卡:全部和组合 -> Swift 编译器 - 代码生成 -> Objective-C 桥接头:添加您的 xxx-bridging-header

    2. 勾选“搜索路径”,根据你的主要目标设置Framework Search PathHeader Search PathsLibrary Search Path的值。可能有些搜索路径在这里丢失了,请手动重新添加。

    【讨论】:

    • 第二个选项对我有用。没有使用 CocoaPods。
    • 这行得通。这件事在任何地方都有记录吗?我怎样才能找到更多关于为什么我们必须使用inherit! : search_paths
    • 非常感谢您提供此解决方案!像魅力一样工作!
    【解决方案3】:

    我遇到了同样的问题。我做了以下操作,“导入桥接头失败”的问题得到解决。

    步骤:

    1. 选择您的项目 -> 构建设置 -> 搜索“Defines module” -> 给出“YES”
    2. 复制 Objective-C 桥接头路径
    3. 选择您的测试目标 -> 构建设置 -> Swift 编译器 - 常规 -> Objective-C 桥接头 -> 提供桥接头路径。
    4. 确保测试目标的“标头搜索路径”包含 ios Targets 中的所有标头。如果缺少任何标题,请添加它们。
    5. 构建。

    参考:Refer this link.

    【讨论】:

    • 很遗憾,该链接已过时。
    【解决方案4】:

    @Victor Choy 解决方案对我有用,但我不得不像这样将测试目标移动到产品目标中:

    target 'YourProduct' do
    
       # Pods for product
    
       target 'YourProductTests' do
          inherit! :search_paths
          # Pods for product testing
       end
    end
    

    这对我不起作用:

    target 'YourProduct' do
       # Pods for product
    end
    
    target 'YourProductTests' do
       inherit! :search_paths
       # Pods for product testing
    end
    

    【讨论】:

    • 是的。您的解决方案有效。如果你知道原因,请发表评论
    【解决方案5】:

    这可能对某人有用:如果将单元测试目标添加到已经包含 CocoaPods 和一些 Objective-C 库 pod 的现有项目中。

    以下步骤解决了导入桥接头失败问题。

    1. 选择您的项目 -> 构建设置 -> 搜索“定义模块” -> 给出“是”

    2. 从“YourProduct”目标复制 Objective-C 桥接头路径并 将其粘贴到“YourProductTests”目标的桥接头路径中。

    3. Podfile 应该在 'YourProduct' 中有 'YourProductTests' 目标,并且应该包含 _inherit! :search_paths_ 如下所示

    ...

    target 'YourProduct' do
       # Add Pods for your product here...
    
       target 'YourProductTests' do
          inherit! :search_paths
          # Pods for product testing, if any
       end
    end
    
    1. 然后从项目的根文件夹执行“pod install”。这会填充“YourProductTests”的标题搜索路径

    2. 最后一步验证“YourProduct”和“YourProductTests”目标的标头搜索路径应该相似。

    【讨论】:

      猜你喜欢
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      相关资源
      最近更新 更多