Как связать зависимость XCTest от производства / основной цели? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь написать расширение для платформы XCTest в Swift. Для этого я создал проект с двумя целями: основной / производственный и тестовый.

Поскольку я пишу расширение для XCTest, мне нужно также импортировать XCTest в мою основную / производственную цель. Однако у меня возникли проблемы с этим. Когда в Xcode и я нажимаю на свой проект, затем выбираю основную цель, перехожу к этапам сборки, связываю двоичные файлы с библиотеками и добавляю туда XCTest, я получаю ошибку компиляции:

ld: рамки не найдены XCTest clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова)

Я также попробовал решение, предоставленное здесь , которое, к сожалению, тоже не работает.

1 Ответ

0 голосов
/ 16 января 2019

Вспомогательной информации о самом XCTest очень мало, и мне было трудно ее найти. Я также искал ту же функциональность и, наконец, смог заставить ее работать.

Я нахожусь на XCode 10.1 и работаю на реальном iPhone с iOS 11. Я уверен, что общая техника будет работать для других версий, но, вероятно, потребуется несколько настроек.

Общие шаги описаны в этом ответе stackoverflow, но для работы на настоящем iPhone мне потребовалось несколько дополнительных шагов и настроек:

Можно ли запустить тесты XCTest в приложении для iOS?

Следуйте инструкциям, приведенным выше. Приведенные ниже шаги являются отклонениями от тех инструкций, которые были мне необходимы.

  1. Скопируйте в платформу XCTest, как описано в приведенной выше ссылке. ПРИМЕЧАНИЕ. Используйте каркас для платформы iPhone.OS, а не симулятор, как описано. Вы можете найти этот файл фреймворка внутри самого пакета XCode Application на вашем Mac. (Щелкните правой кнопкой мыши, «Показать содержимое пакета», затем посмотрите ./Contents/Developer/Platforms/iPhoneOS.platform

  2. Отключить битовый код в целевом приложении. Это решает ошибку компоновщика. Вот пример его включения: как ENABLE_BITCODE в xcode 7?

  3. При перетаскивании файла XCTest.framework в связанные двоичные файлы вашей цели убедитесь, что вы также перетаскиваете его во «Встроенные двоичные файлы», который находится непосредственно над параметром «Связанные фреймворки и библиотеки». Если вы этого не сделаете, вы получите ошибку во время выполнения.

add framework to embedded binaries

  1. Код ViewController для запуска тестов немного отличается в новом Swift, вот что я использую:

import UIKit
import XCTest

class ViewController: UIViewController {
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("running tests!")
        let suite = XCTestSuite.default;
        for test in suite.tests {
            test.run()
        }
    }

}

Так и должно быть! Когда я запускаю вышеупомянутое приложение, затем касаюсь экрана, все тесты из моей цели UITesting проходят без сбоев и проходят!

...