Xcode – testing类文件是模块的一部分,忽略导入

所以我有一个iOS项目与testing,一切工作正常。

我觉得有必要改变项目名称。 我在苹果的文档中表示,select了项目并更名。

经过一段时间更新的东西,最后这个工作,应用程序运行正常,但我仍然有一个问题。

由于这个烦人的问题,我无法运行testing。 我相信这是一个基本的东西,但我仍然不能弄明白。

这是我的testing类(为了我使用Foo示例的问题)

 @testable import MyApp // File FooTests is part of module MyApp. Ignoring import. class FooTests: QuickSpec { override func spec() { describe("a foo test") { it("tests foo") { let return = Foo.barMethod() XCTAssertEqual(return, "expected", "Expected something, got \(return) instead") } } } 

Foo类没有被识别,我得到的错误是testing类是MyApp一部分,事实并非如此。

我应该在哪里找?

我只是偶然发现了同样的问题,你的post很有帮助。 我发现的是,通过将Product Name更改为AppNameTests (按照您的示例),然后产品模块名称被正确反映,您不必在$(PRODUCT_NAME:c99extidentifier)的末尾添加Testsc99extidentifier似乎是Product Name

概要:

  • 在Project中select您的testing目标
  • 导航到Build Settings -> Packaging
  • Product Name更改为以前的testing目标,可能会附加Tests
  • 我相信根据苹果重命名一个项目重命名不包括更新模块在@testable ,所以我不得不这样做手动

[UPTADE]这让Jean-Frederic弄清楚了他的答案。 这就是我接受它的原因。

我终于设法解决这个问题,但是我对解决scheme不满意。

考虑我的应用程序名称AppName

由于一些奇怪的原因,我无法解释,我的testing目标Build Settings -> Product Module Name$(PRODUCT_NAME:c99extidentifier)值是Appname ,而不是AppNameTests 。 我检查了其他项目,价值是相同的,但转换为AppNameTests所以在这种情况下,我不知道我能做些什么,使其自动更新,并在名称中包括testing部分。

我最终做的是将名称设置为$(PRODUCT_NAME:c99extidentifier)Tests 。 不知道这是否是一个适当的解决scheme,但现在它的工作。

如果有人有更好的解决scheme,请随时分享。

这是一个与Jean-Frederic Plante直接并行的解决scheme,虽然在我的情况下问题不是我的testing目标名称与我的主要目标相匹配,而是testing目标的模块被错误地设置为匹配模块名称主要应用程序目标 要纠正这些问题之一:

  • 在您的项目中select您的testing目标。
  • 导航到“ 生成设置” >“ 打包”
  • 确保产品模块名称产品名称都设置为$(TARGET_NAME)