Xcode – тестовый класс Файл является частью модуля, игнорируя импорт

Итак, у меня есть проект iOS с тестами, и все работает нормально.

Я почувствовал необходимость изменить название проекта. Я сделал это, как указано в документах яблока, выбрал проект и изменил его название.

Через некоторое время обновление вещей для этого, наконец, будет работать, приложение работает нормально, но у меня все еще есть проблема.

Из-за этой неприятной проблемы я не могу запускать тесты. Я уверен, что это основная вещь, но я все еще не могу понять.

Вот мой тестовый класс (ради вопроса, который я использую в примере 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 не распознается, и я получаю сообщение об ошибке, что тестовый класс является частью MyApp это не так.

Где я должен искать?

Я просто наткнулся на ту же проблему, и ваш пост был полезен. То, что я узнал, – это изменить имя Product Name на AppNameTests , в соответствии с вашим примером, тогда имя модуля продукта правильно отражено, и вам не нужно добавлять Tests в конце $(PRODUCT_NAME:c99extidentifier) . c99extidentifier похоже, относится к Product Name .

Резюме:

  • выберите целевую аудиторию в проекте
  • перейдите в « Build Settings -> Packaging
  • измените имя Product Name на предыдущую тестовую цель, вероятно, добавив Tests
  • Я считаю, что переименование в соответствии с переименованием Apple проекта не включает обновление модуля в @testable , поэтому мне пришлось сделать это вручную

[UPTADE] Это помогло Жан-Фредерику выяснить его ответ. Вот почему я принял это.

Наконец, мне удалось это исправить, но я не доволен решением.

Рассмотрим мое имя приложения AppName

По какой-то странной причине я не могу объяснить, моя тестовая цель Build Settings -> Product Module Name имела $(PRODUCT_NAME:c99extidentifier) значение которой было Appname , а не AppNameTests . Я проверил с другими проектами, и значение одно и то же, но преобразовано в AppNameTests поэтому в этом случае я не уверен, что могу сделать, чтобы оно автоматически обновлялось и включало тестовую часть в имя.

То, что я закончил, это установить имя как $(PRODUCT_NAME:c99extidentifier)Tests . Не уверен, что это подходящее решение, но пока оно работает.

Если у кого-то есть лучшее решение, пожалуйста, не стесняйтесь делиться.

Давайте будем гением компьютера.