Тестирование блока Xcode с помощью Cocoapods

Я несколько раз ударился головой о стену, но, несмотря на несколько поисков Google / SO / Github, я не могу найти решение проблем, которые у меня есть!

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

Я использую Xcode 7.3.1 и Cocoapods 1.0.1. Обновление: проблема остается с Xcode 8.0

С этим podfile:

platform :ios, '9.0' use_frameworks! inhibit_all_warnings! target 'MyApp' do pod 'Firebase' pod 'Firebase/Auth' pod 'Firebase/Database' pod 'Firebase/Storage' target 'MyAppTests' do inherit! :search_paths end end 

В моем классе XCTest я получаю

Отсутствует необходимый модуль «Firebase»

ошибка при @testable import MyApp

В качестве альтернативы, этот подкайл:

 platform :ios, '9.0' use_frameworks! inhibit_all_warnings! def common_pods pod 'SwiftyTimer' pod 'Firebase' pod 'Firebase/Auth' pod 'Firebase/Database' pod 'Firebase/Storage' end target 'MyApp' do common_pods end target 'MyAppTests' do common_pods end 

Тесты строятся, но моя консоль усеяна предупреждениями, например:

Класс <-FirebaseClassName-> реализуется как в … MyApp … и … MyAppTests … Один из двух будет использоваться. Какой из них не определен

7 Solutions collect form web for “Тестирование блока Xcode с помощью Cocoapods”

Я была такая же проблема. Я решил это, переместив pod 'Firebase' в свою тестовую цель. Измените свой подфайл на это:

 platform :ios, '9.0' use_frameworks! inhibit_all_warnings! target 'MyApp' do pod 'Firebase/Auth' pod 'Firebase/Database' pod 'Firebase/Storage' target 'MyAppTests' do inherit! :search_paths pod 'Firebase' end end 

Проблема в том, что Firebase делает что-то особенное с путями поиска заголовков после того, как CocoaPods генерирует собственное значение для параметра, поэтому CocoaPods не получает этого изменения, чтобы переносить его на целевой объект. Вы можете решить этот один из двух способов:

  1. Найдите MyAppTests.<configuration>.xcconfig в навигаторе файлов и добавьте следующее в HEADER_SEARCH_PATHS :

    ${PODS_ROOT}/Firebase/Analytics/Sources [*]

  2. Найдите настройки для путей поиска заголовков в настройках сборки и добавьте то же значение, что и в опции 1, в список. Вам не нужно указывать его как рекурсивный.

* Согласно комментарию AKM, это изменилось на ${PODS_ROOT}/Firebase/Core/Sources в версии 3.14.0

Попробуйте изменить наследование до :complete , как в:

 target 'MyAppTests' do inherit! :complete end 

Важно отметить, что это позволяет кому-то еще проверить ваш репо, чтобы просто выполнить pod update как обычно, без необходимости копировать файлы .xcconfig или другие хакеры только для сборки.

Решением для меня было обновление cocoapods до версии 1.1.0.rc.2.

sudo gem install cocoapods --pre

У меня была аналогичная проблема. Ссылаясь на ваш вопрос, я скопировал содержимое моего файла MyApp.<configuration>.xcconfig файл MyAppTests.<configuration>.xcconfig . Я очистил и построил тесты, и это сработало.

Добавьте «$ {PODS_ROOT} / Firebase / Core / Sources» в целевую аудиторию только в настройках сборки -> Пути поиска заголовков

Проблема записана в проекте firebase здесь:

https://github.com/firebase/firebase-ios-sdk/issues/58

Существует обходное решение:

Добавьте «$ {PODS_ROOT} / Firebase / Core / Sources» в целевую аудиторию только в настройках сборки -> Пути поиска заголовков

но это также исправлено путем обновления до CocoaPods 1.4.0.

В то время, когда я пишу это (ноябрь 2017 года), cocoapods 1.4.0 все еще находится в стадии бета-тестирования, поэтому для его установки вам необходимо явно запросить бета-версию:

 gem install cocoapods --pre 

Это решило проблему выполнения моих тестов.

  • validateForInsert терпит неудачу, когда я устанавливаю связь между двумя действительными объектами
  • Использование тестов интерфейса Xcode7 для создания скриншотов приложений для App Store
  • XCTestCase, чтобы проверить, вызван ли метод в Struct
  • Xcode 7 UI Testing: как отклонить ряд системных предупреждений в коде
  • Настройте тестовый проект с помощью XCTest с двумя целевыми показателями для iOS и OSX и с помощью общих тестов модулей
  • Как проверить UIButton?
  • XCTestExpectation - вызов метода async дважды приводит к нарушению API
  • Как проверить простой класс объектов данных, который реализует NSCoding?
  • Как запустить новую установку приложения каждый раз, когда выполняются модульные тесты?
  • Ошибка при выполнении модульных тестов в Xcode 5.0
  • Не удалось запустить XCTests на устройстве iOS
  • Interesting Posts

    Swift – тип возврата, использующий протокол

    Раскадровка: как добавить segue в UISegmentedControl без написания кода?

    Переопределение функции init по умолчанию в iOS

    UICollectionViewFlowLayout minimumInteritemSpacing не работает

    Ошибка при попытке использования опубликованного приложения Inter-App Audio в Garageband

    Почему строка статуса появляется, когда popoverPresentationController вызывается в Swift?

    Как сделать список профилей обновления для Xcode 8.2.1? похоже на ошибку Xcode

    Невозможно связать ZBar SDK с Xcode 5

    Синглтон и NSNumberFormatter в Swift

    Кордова InAppPurchase: .getProducts () возвращает пустой массив

    Как скрыть TextFields из нескольких TextFields и установить макеты или фрейм других TextFields, чтобы удалить пространство скрытого текстового поля?

    Как получить агент пользователя в iOS?

    Хранение данных для iPhone

    Xcode iOS: проверьте, вошел ли пользователь в систему и отобразили разные представления, если нет

    Сторонняя реализация G.729 для iOS (32 и 64 бит)

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.