【问题标题】:Swift classes inside Objective-C unit test - Incomplete Generated "-Swift.h"Objective-C 单元测试中的 Swift 类 - 生成的“-Swift.h”不完整
【发布时间】:2016-03-24 09:45:59
【问题描述】:

我正在将一个 Objective-C 应用程序转换为 Swift 并使用现有的 Objective-C 单元测试来确认更改是否正常工作。

我用 Swift 替换了几个 Objective-C 应用程序文件并执行了以下操作:

  • 在需要的地方添加了“@objc 类”(除了从 Objective-C 类),
  • 将 Swift 文件定位到 MyApp 和 MyAppTest 目标,
  • 为两个目标设置“启用可测试性是”(仅限调试)。
  • 在单元测试文件中,我添加了#import "MyAppTests-Swift.h" 并删除了#import "MyObjcClass.h"。
  • 我还从构建阶段编译源列表中删除了“MyObjcClass.m”。

Xcode 生成“MyAppTests-Swift.h”文件。检查生成的文件(cmd-click),揭示了通常的大量 Swift 特定的#if #defines,它位于我的 Swift 类应该位于但不是的位置之前。

应用将使用替换的 Swift 文件构建和运行。应用程序中还有其他 Objective-C 文件导入“MyApp-Swift.h 以使用我的 Swift 类”。 MyApp-Swift.h" 文件包含通常大量的 Swift 特定 #if #defines 和 Swift 应用程序文件中的 Swift 类。

Xcode 为两个目标生成“-Swift.h”文件。然而,出于某种原因,Tests 目标的那个没有收到 Swift 类信息,而 app 目标的那个却收到了。因此,使用特定于 Swift 而不是 Objective-C 的功能不是问题。

我已经消除了所有编译错误,从 clean 构建但仍然无法正常工作。

有什么建议吗?

我正在使用 XC7 (7C68) iOS 9.1

【问题讨论】:

    标签: ios xcode swift xcode7 xctest


    【解决方案1】:

    终于搞定了。

    我注意到在设置应用程序目标时未设置单元测试目标的 Objective-C 桥接头路径。 (Swift 编译器 - 代码生成构建设置)XC 将为应用程序目标设置此路径(可能在它询问您是否要创建桥接头文件时)但是它不会为单元测试目标设置路径。我猜它假设单元测试不需要访问桥接头。

    我之前并不关心这个,因为 Objective-C 桥接头用于将 Obj-C 代码导入 Swift 文件。我的 Swift 代码没有使用任何 Obj-C 类,因此桥接头文件中没有任何内容,因此我认为单元测试目标不需要它,并将单元测试目标的路径设置保留为默认空白。

    原来我错了。

    在云雀上,我将此路径设置为指向应用程序目录中的桥接头(即使该文件没有导入任何 obj-c 类)。我重新运行了单元测试,现在自动生成的“MyAppTests-Swift.h”文件包含了 obj-c 单元测试引用的 Swift 类。

    看起来有点古怪。 Xcode 需要一个未使用文件(桥接头)的路径,以使其在自动生成的“-Swift.h”文件中添加引用的 swift 类。

    【讨论】:

      猜你喜欢
      • 2015-03-22
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 2020-12-12
      • 2017-02-01
      • 1970-01-01
      相关资源
      最近更新 更多