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

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

enter image description here

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

+136
источник поделиться
10 ответов

В вашей основной цели вам нужно установить опцию Enable Testability build. Да.

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

+216
источник

Решение - довольно простые парни. Убедитесь, что вы правильно установили свои флажки под свою схему приложений. ВЫ ДОЛЖНЫ UNCHECK ваши тестовые цели для сборки архива.

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

+12
источник
другие ответы

Связанные вопросы


Похожие вопросы

В моем случае я использовал настраиваемую конфигурацию сборки для тестирования (называемую 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 сборок.

+10
источник

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

enter image description here

+7
источник

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

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

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

+4
источник

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

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

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

+1
источник

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

0
источник

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

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

0
источник

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

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 |configuration| do
            configuration.build_settings["ENABLE_TESTABILITY"] = "YES" 
        end
    end
0
источник

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

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

введите описание изображения здесь И теперь ошибка исчезла.

-3
источник

Посмотрите другие вопросы по меткам или Задайте вопрос