Ios Swift&x2B;为单元测试设置Objective-C项目
我发现很难找到如何在Xcode 6b4中配置测试目标。在这种情况下,有人能给我指出正确的方向吗 我有一个快速的项目。但是,存在一些第三方Objective-C依赖项,这些依赖项被放入应用程序的桥接头中。我想为我的Swift代码编写测试。理想情况下,在斯威夫特。我的问题是Ios Swift&x2B;为单元测试设置Objective-C项目,ios,objective-c,swift,xcode6,Ios,Objective C,Swift,Xcode6,我发现很难找到如何在Xcode 6b4中配置测试目标。在这种情况下,有人能给我指出正确的方向吗 我有一个快速的项目。但是,存在一些第三方Objective-C依赖项,这些依赖项被放入应用程序的桥接头中。我想为我的Swift代码编写测试。理想情况下,在斯威夫特。我的问题是 如果我创建了一个Swift测试用例,那么编译器会抱怨在应用程序的桥接头中找不到Objective-C头 如果我创建了Objective-C测试用例,那么我就不能导入我想要测试的Swift类 我能做的唯一一件事就是编写Object
因此,我预计Swift本身以及同时使用Swift和Objective-C的项目中的单元测试都会有很多变化。我不确定您是否仍在寻找这一点,因为Xcode 6不再是beta版,但您可以在目标设置中将Objective-C桥接头文件添加到单元测试目标中。这为我解决了这个问题
我通过将“Objective-c生成的接口头名称”更新为“YourApplication Swift.h”来工作 默认设置为生成TargetName Swift.h,编译器从不生成应用程序集成测试Swift.h尝试将
#import“xyz Swift.h”
语句放入预编译的头文件中。
这样,根据目标,所有Obj-C头都有不同的导入语句:
MyProject-Prefix.pch(应用程序目标):
MyProjectTests-Prefix.pch(测试目标):
我遇到了这个问题,并试图在测试目标的构建设置中解决它。通过更改搜索路径、导入swift标题、导入桥接标题中的内容。然而,它却出现在我的播客文件中。我必须添加一个带有测试目标的
链接。像这样:
platform :ios, '8.0'
link_with 'YourApp', 'YourAppTests'
pod 'ThePopularPod', '1.2.3', :inhibit_warnings => true
当我试图找出如何从Swift测试中访问项目的Swift代码时,遇到了这个问题。我的项目和测试最初都是在Objective-C中启动的,因此它们具有所有桥接头设置
为了从我的项目中访问Swift类,我必须添加:
@testable import MyProjectName
到我的Swift测试文件的顶部。在为测试构建它之后,Xcode识别了我的swift代码
我希望这能对其他人有所帮助。我们做到了这一点,一路上我看到了所有可能的错误:从故事板获取VC时的模块名称错误、特定于coredata实体的MyType\u MyType\u错误,等等,但这是最糟糕的
诀窍是使用构建目标中的-Swift.h文件,而不是测试目标,因为在测试目标中,有时必须包含objc文件,但不能包含Swift文件,如果这些文件链接在一起,objc将无法识别它们,但在构建目标中,一切都在那里
- 首先要确保测试目标的-Swift.h与构建目标的名称不同
- 在tests.pch或每个单独的文件中包含调试目标的-Swift
- 通过使用:$(OBJROOT)/MyProjectName.build/Debug-iphonesimulator/MyProjectTarget.build/derivedsources编辑用户标题搜索路径,让编译器知道该文件(在derivedsources中)的位置。如果不确定,请进入下一步并查找名称。如果名称中有空格,则需要在空格前添加\号
- 您可以在此处找到有关项目变量的更多信息:
- 始终搜索用户路径应设置为“是”
- 不要将swift文件包含在测试目标中,而是使用@testable
我希望苹果在下一个xcode中解决了这个问题。对于xcode 10,要在Obj-C测试中使用swift类,您需要在测试目标的用户搜索路径中添加自动生成的标题模块swift.h。
转到测试目标>生成设置>标题搜索路径,然后添加
$CONFIGURATION\u TEMP\u DIR/YourProject.build/DerivedSources在其中
更多参考请看是的,我已经读过了。所以,问题是,如果我有我想要测试的Swift类和Swift测试用例,当应用程序Swift类需要从桥接头导入Objective-C时,我如何使测试目标编译…@DanielThorpe-我同意,这个答案并没有真正解决你的问题。我也希望针对同样使用ObjC框架的Swift代码编写Swift单元测试。@ColinE-是的,我通过创建另一个Objective-C框架来避免这个问题,该框架包含了Objective
platform :ios, '8.0'
link_with 'YourApp', 'YourAppTests'
pod 'ThePopularPod', '1.2.3', :inhibit_warnings => true
@testable import MyProjectName