在UnitTest-Swift中找不到模块"MyApp"

Pig*_*ga4 16 xcode ios xcode7 swift2 swift3

我试图在我的遗留Objc代码中测试一些Swift类(@objc类).我在我的测试类中导入"UnitTests-Swift.h".

然后我收到这个错误:

在自动生成的"UnitTests-Swift.h"中找不到模块"MyApp"

这是"UnitTests-Swift.h"顶部的内容

typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
#if defined(__has_feature) && __has_feature(modules)
@import XCTest;
@import ObjectiveC;
@import MyApp;
@import CoreData;
#endif
Run Code Online (Sandbox Code Playgroud)

我清理了项目,检查了所有相关的标志(在Xcode单元测试中使用@testable时没有这样的模块,不能在Objective-C中使用Swift类),删除派生数据等等.不知道发生了什么,但我很确定@import MyApp不应该在那里..

谁能帮我这个?

Ole*_*nko 6

刚刚在我的项目中遇到了这个问题,经过一整天的调查,我终于解决了。基本上这是因为你在 ObjC 和 Swift 之间有循环依赖。所以就我而言,它是:

  • @obj在主要目标中具有属性的Swift 协议;
  • 继承该协议的 UnitTest 目标中的 Swift 类;
  • 导入UnitTestTarget-Swift.hUnitTest 目标的任何 Objective-C 类

所以相当简单的组合会导致这个错误。为了解决这个问题,您需要:

  • 只需确保您在 UnitTest 目标中的 Swift 类是private,这样它就不会到达UnitTestTarget-Swift.h

或者

  • 不要将您的原始 Swift 协议标记为@objc,这将允许您从所有 ObjectiveC 测试类访问您的 SwiftClass,但这些类对 Swift 协议一无所知。


Rei*_*man 0

由于要测试的 Swift 类是 MyApp 的一部分,因此您应该在测试类中导入“MyApp-Swift.h”而不是“UnitTests-Swift.h”。


归档时间:

查看次数:

1531 次

最近记录:

6 年,10 月 前