it-swarm.com.ru

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

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

enter image description here

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

118
hgwhittle

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

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

196
sgaw

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

 enter image description here

8
Bartłomiej Semańczyk

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

8
Tim

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

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

 enter image description here

4
Wladek Surala

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

0
nikBhosale

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

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

0
Zaporozhchenko Aleksandr