45

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

无法导入桥接头

我试过了:

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

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

4

5 回答 5

53

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

尝试在您的 Podfile 中添加它:

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

pod install

这个对我有用。

如果上述解决方案对您不起作用,请尝试手动设置:

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

  2. Framework Search Path检查“搜索路径” ,根据您的主要目标设置 , 的值Header Search PathsLibrary Search Path也许有些搜索路径在这里丢失了,请再次手动添加。

于 2016-07-28T08:14:10.470 回答
20

@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
于 2019-02-07T11:52:21.220 回答
9

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

脚步:

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

参考:参考这个链接。

于 2018-05-24T11:03:15.073 回答
6

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

常见解决方案

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

桥接头系统并不完美,但这里有一些我遇到的问题。

于 2015-05-23T17:12:50.853 回答
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”目标的标头搜索路径应该相似。

于 2020-06-18T18:22:53.203 回答