"Модуль не скомпилирован для тестирования" при использовании @testable

Я пытаюсь использовать новый Swift 2 @testable объявление, чтобы выставить мои классы для цели теста. Однако я получаю эту ошибку компилятора:

введите описание изображения здесь

Intervals это модуль, который содержит классы, которые я пытаюсь представить. Как мне избавиться от этой ошибки?

12 ответов

Решение

В вашей основной цели вам нужно установить Enable Testability вариант сборки да.

В соответствии с комментарием @earnshavian ниже, это следует использовать только в отладочных сборках согласно примечаниям к выпуску Apple: "Параметр" Включить сборку тестируемости "следует использовать только в конфигурации отладки, поскольку он запрещает оптимизацию, которая зависит от того, чтобы не экспортировать внутренние символы из приложение или фреймворк " https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html

В моем случае я использовал настраиваемую конфигурацию сборки для тестирования (называется Test) а также cocoapods в качестве менеджера зависимостей

Мне пришлось добавить следующие строки в конце моего Podfile включить тестируемость

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            if config.name == 'Test'
                config.build_settings['ENABLE_TESTABILITY'] = 'YES'
            end
        end
    end
end

По умолчанию cocoapods наборы ENABLE_TESTABILITY в YES только для Debug строит

Решение довольно простое, ребята. Убедитесь, что вы правильно установили свои флажки в соответствии со схемой приложения. Вы ДОЛЖНЫ ОТКЛЮЧИТЬ свои тестовые цели для Archive Build.

Я начал получать эту ошибку при запуске тестов с помощью Bitrise.

В отличие от других пользователей, это не заTarget базис, или за Schemaоснова, она является вConfigurationоснование. ВыбратьTarget -> Build Settings вкладка -> искать testability-> Включите его в конфигурации, которую вы используете.

Обратите внимание, что Apple рекомендует включать это в конфигурации, которую вы используете для отладки, а не в AppStore.

Для тех из вас, кто испытывает это только при запуске Xcode Profiler: переключите конфигурацию построения профиля в управлении вашей схемой на конфигурацию с включенной тестируемостью, и в большинстве случаев это было бы отладкой:

введите описание изображения здесь

Это, вероятно, потому что ваша главная цель Enable Testability установлен в NO, Вы должны установить его на YES в схеме отладки (которая используется для запуска ваших тестов).

Если вы используете Carthage, эта проблема может быть вызвана импортом фреймворков с @testableпотому что они построены по схеме выпуска.

В большинстве случаев импортировать фреймворки с этим префиксом плохая практика, поэтому вы можете избежать этого. Если вы не можете, вы должны Enable Testability в схеме выпуска фреймворков. https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html

Если случайно у вас есть

install! 'cocoapods',
         generate_multiple_pod_projects: true,
         incremental_installation: true

Тогда это способ сделать это.

    # generated_projects only returns results if the we run "pod install --clean-install"
    # or install a pod for the first time

    installer.generated_projects.each do |project|
        project.build_configurations.each do |configuration|
            configuration.build_settings["ENABLE_TESTABILITY"] = "YES" 
        end
    end

Я новичок, и я просто не могу вспомнить, где все настройки и параметры в Xcode. Поэтому я всегда расстраиваюсь, когда вижу «вы можете установить xxx на yyy ...» в ответах на такого рода вопросы. Где эти xxx в Xcode? и что это за ууу? Нам нужна карта, показывающая, как мы делаем дела, а не другая подсказка, вроде ххх. Кажется, мы Николас Кейдж из «Сокровища нации»!

Спасибо за все подсказки здесь, очень много! Вы действительно помогаете мне. Но у меня есть конкретный ответ здесь (который на самом деле от вас):

  1. Выберите основную цель вашего проекта
  2. Перейдите на вкладку «Настройки сборки».
  3. Включите опцию «Все»
  4. Найдите раздел «Параметры сборки».
  5. Установите для параметра «Включить возможность тестирования» значение «Да».
  6. Подождите несколько минут или перезапустите Xcode (тогда ошибка исчезла)

Я получил это, когда мой новый файл Tests.swift принадлежал неправильной цели.

Если вы пытаетесь протестировать фреймворк:

Перейти к цели тестирования -> Фаза сборки -> Фаза создания новых файлов копирования -> Выбрать рамки -> Добавить все рекурсивно используемые рамки

Приведенное выше решение подойдет, если вы используете стручки / карфаген. Но если вы используете фреймворки из самой iOS, например "Контакты", вам нужно добавить путь к этим фреймворкам в "Пути поиска в библиотеке" цели вашего основного проекта. введите описание изображения здесь

Это не происходило в моих проектах до Xcode 8, но после того, как я обновился до Xcode 8, это озадачило меня.

Ответы, опубликованные здесь, не помогли решить мои проблемы. Для меня я просто отбросил эти тесты, так как он не нужен. Поэтому снимите флажки с тестовых кнопок:

И теперь ошибка исчезла.

Другие вопросы по тегам