将单元测试目标添加到xcode - 未能导入桥接标题不会消失

时间:2015-02-05 12:03:35

标签: ios xcode unit-testing swift

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

failed to import bridging header

我试过了:

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

我还尝试过制作一个样本项目,该项目已经建立并且运行良好。把我所拥有的一切都带到一个干净的新项目中,目前还不是一个选择。

5 个答案:

答案 0 :(得分:34)

如果您使用Pod作为包管理器,则必须设置搜索路径等。提供一种简单的方法,

尝试在Podfile中添加它

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

pod install

它对我有用。

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

  1. 点击您的测试目标 - >构建设置 - >标签:全部&组合 - > Swift Compiler -Code Genration - > Objective C Bridging Header:添加你的xxx-bridging-header

  2. 选中“搜索路径”,根据您的主要目标设置Framework Search PathHeader Search PathsLibrary Search Path的值。也许某些搜索路径会丢失,请再次手动添加。

答案 1 :(得分:3)

此时,我从来没有import MyTarget让单元测试在Swift中工作。

常见解决方案

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

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

答案 2 :(得分:2)

@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

答案 3 :(得分:1)

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

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

  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安装”。这将填充“ YourProductTests”的标题搜索路径

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

答案 4 :(得分:0)

我遇到了同样的问题。我做了以下和'未能导入桥接标题的问题'解决了。​​

步骤:

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