swift 已将单元测试目标添加到Xcode -无法导入桥接标头,不会消失

5lhxktic  于 2022-10-31  发布在  Swift
关注(0)|答案(6)|浏览(149)

我在我的Xcode项目中添加了一个新的测试目标。我的项目包含Swift代码和Objective-C代码,并且有一个桥接头文件。在UnitTesting的构建设置中添加桥接头文件,或者执行import MyTarget时,我得到了错误:
无法导入桥接标头
我试过了:

  • 正在将桥接信头加入至项目、公寓测试和主要目的的组建设定。
  • defines modules变更为Yes
  • 将桥接头文件移动到根文件夹。

我也试着做了一个示例项目,它构建和运行得很好。把我所有的东西都放到一个干净的新项目中是不可能的。

gj3fmq9x

gj3fmq9x1#

如果你使用CocoaPods作为软件包管理器,必须设置搜索路径等给予一个简单的方法,
尝试将此添加到您的播客文件中:

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

pod install
对我有用。
如果上述解决方案不适用于您,请尝试手动设置:
1.单击测试目标-〉构建设置-〉选项卡:所有组合(& C)-〉Swift编译器-代码生成-〉Objective-C桥接头:添加您的xxx桥接头
1.勾选“搜索路径”,根据您的主要目标设置Framework Search PathHeader Search PathsLibrary Search Path的值。可能某些搜索路径在此处丢失,请重新手动添加。

sigwle7e

sigwle7e2#

@维克托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
vq8itlhq

vq8itlhq3#

我也遇到了同样的问题。我做了以下操作,“无法导入桥接头”的问题就解决了。
操作步骤:
1.选择您的项目-〉构建设置-〉搜索'定义模块' -〉给予'YES'
1.复制Objective-C桥接标头路径
1.选择你的测试目标-〉构建设置-〉Swift编译器-〉通用-〉Objective-C桥接头-〉给予Bridging头路径。
1.请确保测试目标的'标头搜索路径'包含ios目标中的所有标头。如果缺少任何标头,请添加它们。
1.建立。
参考:Refer this link.

zzwlnbp8

zzwlnbp84#

这可能对某些人有用:如果将单元测试目标添加到已经包含CocoaPods和一些Objective-C库pod的现有项目中。
以下步骤解决了***无法导入桥接标题***问题。
1.选择您的项目-〉构建设置-〉搜索“定义模块”-〉给予“是”
1.从'YourProduct'目标复制Objective-C桥接标头路径,并将其粘贴到'YourProductTests'目标的桥接标头路径中。

  1. Podfile应在“YourProduct”中包含“YourProductTests”目标,并应包含下面的_inherit!:search_paths_ like
    ...
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”的 * 标头搜索路径 *。
1.最后一步,请验证“YourProduct”和“YourProductTests”目标的 * 标头搜索路径 * 是否相似。

lb3vh1jj

lb3vh1jj5#

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

通用解决方案

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

桥接头系统并不完美,但这里有几个问题,我已经遇到。

nukf8bse

nukf8bse6#

对我来说,在一个没有Cocoapods的项目中,我有一个地方,与其他类似的测试没有区别,在那里这个警告不会消失。
我清除它的方法是进入测试目标〉构建设置〉Objective-C桥接头,然后点击删除键(应该清除到头文件的链接)。

相关问题