我尝试在我的遗留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
我清理了项目,检查了所有相关的标志("No such module" when using @testable in Xcode Unit tests,Can't use Swift classes inside Objective-C),删除了派生的数据等等。
有人能帮我吗?
4条答案
按热度按时间ss2ws0br1#
在我的项目中刚遇到这个问题,经过一整天的调查,我终于解决了它。基本上,这是因为你在ObjC和Swift之间有循环依赖关系。所以在我的情况下,它是:
@obj
属性的Swift协议;UnitTestTarget-Swift.h
因此,相当简单的组合会导致此错误。为了修复此错误,您需要:
private
,这样它就不会到达UnitTestTarget-Swift.h
或
@objc
,这将允许您从所有ObjectiveC测试类访问SwiftClass,但这些类将不了解Swift协议。ffdz8vbo2#
因为要测试的Swift类是MyApp的一部分,所以您应该在测试类中导入“MyApp-Swift. h”,而不是“UnitTests-Swift. h”。
c7rzv4ha3#
您可以添加一个Swift单元测试(只需创建一个新的单元文件,并将扩展名更改为
.swift
)。从这个单元测试文件中,你可以使用你的Swift类。
您也可以使用测试模块桥接头文件从Objective-C单元测试中导入该文件(反之亦然)。
这将是Swift单元测试文件的默认示例:
ercv8c1e4#
此解决方案帮助我:
1.打开测试目标生成设置
1.搜索
HEADER_SEARCH_PATHS
1.在名为“标题搜索路径”的行中,设置值
$CONFIGURATION_TEMP_DIR/myProjectName.build/DerivedSources
1.清除并再次按Cmd+U
希望能有所帮助!
非常感谢这个article。