Подтвердить что ты не робот

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

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

enter image description here

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

4b9b3361

Ответ 1

В вашей основной цели вам нужно установить опцию 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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

enter image description here

Ответ 5

Возможно, это связано с тем, что ваша главная цель 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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

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

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

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