В тестовом целевом объекте X произошла ошибка (ранний неожиданный выход, операция не завершила начальную загрузку — попытка перезапуска не предпринимается).

Я начал работать с OCMock над написанием тестовых примеров для существующего проекта, который я интегрировал в рабочее пространство моего проекта. После выполнения всех шагов, указанных в этой ссылке.

Когда я впервые выполнил свой тестовый пример, он выдал ошибку выше. Я искал его и пытался следовать некоторым решениям, таким как создание новой цели, перезапуск Xcode, но это мне не помогло. Есть идеи?


person Varun Mehta    schedule 25.01.2016    source источник
comment
Инструкция, как известно, работает. С предоставленной вами информацией невозможно диагностировать проблему. Перейдите к выводу сборки (cmd-8), слева выберите тестовую запись, затем справа выберите журналы вверху, затем щелкните правой кнопкой мыши тестовую цель X ниже, выберите Копировать расшифровку... как текст, который копирует стенограмму в буфер обмена. Проверьте, что там есть, и поделитесь тем, что вы можете/считаете уместным.   -  person Erik Doernenburg    schedule 26.01.2016
comment
Получил причину вышеуказанной ошибки: файл .m не был связан в разделе «Фазы сборки» - «Источники компиляции». Но теперь появляется еще один повторяющийся символ ошибки _OBJC_METACLASS_$_‹Имя класса› в: после добавления флага -ObjC в качестве другого флага компоновщика.   -  person Varun Mehta    schedule 26.01.2016
comment
Вы должны связать библиотеку только один раз, как это описано в документации.   -  person Erik Doernenburg    schedule 26.01.2016
comment
@ErikDoernenburg, можешь мне помочь? не могу определить причину   -  person iKushal    schedule 20.01.2020


Ответы (24)


У меня есть свои заметки и демонстрационные приложения для Cocoapods и Carthage здесь https://github.com/onmyway133/TestTarget

  • Убедитесь, что все фреймворки связаны с тестовыми целями.
  • Настройте Runpath Search Paths так, чтобы он указывал на $(FRAMEWORK_SEARCH_PATHS)

Больше информации

person onmyway133    schedule 31.03.2016
comment
Добавление $(FRAMEWORK_SEARCH_PATHS) к Runpath Search Paths сработало для меня. Ваше здоровье! - person NSTJ; 04.04.2017
comment
Эй, решил и для меня :) не могли бы вы объяснить немного больше, что происходит? - person Tiziano Coroneo; 22.12.2017
comment
Спасибо! Это сработало, просто хотел отметить, что пути поиска Runpath должны быть установлены в цели платформы, а не в цели теста. - person Bretsko; 03.01.2018
comment
ОМГ, мне тоже помогло! Спасибо! - person Baran Emre; 22.11.2018
comment
Боже, это ты? Мне помогает настроить Runpath Search Paths так, чтобы он указывал на $(FRAMEWORK_SEARCH_PATHS). - person Bogdan; 17.12.2018
comment
Спасибо, мне тоже помогло! - person John; 10.02.2019
comment
Бум, я чуть не сошла с ума - спасибо - person RichAppz; 20.03.2019
comment
Странная штука) Мне тоже помогло. А потом попробовал удалить $(FRAMEWORK_SEARCH_PATHS)... Ошибка вернулась! - person Artem Kirillov; 06.08.2019
comment
Я думаю, что идея путей в путях поиска Runpath заключается в том, что они должны находиться в симуляторе (или устройстве), а не в каталоге проекта. Хотя это устраняет ошибку для сборок симулятора, это неверно. Вместо этого вы должны встроить все связанные фреймворки, чтобы они были скопированы в соответствующий каталог. - person Werner Altewischer; 13.11.2019

Я использую carthage, и проблема для меня заключалась в поиске зависимостей в тестовой цели. Исправить:

Добавьте $(PROJECT_DIR)/Carthage/Build/iOS к Runpath Search Paths

Вы можете найти ссылку здесь: выпуск Carthage

person Radosław Cięciwa    schedule 10.06.2016
comment
Это решило проблему для меня, большое спасибо! Тесты не выполнялись на моей цели macOS, поэтому я добавил $(PROJECT_DIR)/Carthage/Build/Mac. - person Kilian; 28.11.2016

Может быть другое решение, если вы используете CocoaPods и цель теста пользовательского интерфейса встроена в цель приложения, что, к сожалению, имеет место в шаблоне по умолчанию (pod init).

Попробуйте переместить цель тестирования пользовательского интерфейса из цели приложения следующим образом:

от:

platform :ios, '11.0'
use_frameworks!

target 'MyApp' do
  # Pods for MyApp

  target 'MyAppUITests' do
    inherit! :search_paths
    # Pods for testing

  end
end

to:

platform :ios, '11.0'
use_frameworks!

# Pods shared between MyApp and MyAppUITests    

target 'MyApp' do
    # Pods for MyApp only

end

target 'MyAppUITests' do
    # Pods for testing

end

Кредит принадлежит SpacyRicochet в этой теме: https://github.com/CocoaPods/CocoaPods/issues/4752#issuecomment-305101269

person hujunfeng    schedule 28.06.2018
comment
Огромное спасибо! но... почему это работает?! и есть ли ошибка, отслеживающая это с помощью кокоаподов? - person Sam; 29.06.2018
comment
@ Сэм, извини, я тоже не знаю почему. Я нашел это решение только методом проб и ошибок. Возможно, вам потребуется проверить официальный репозиторий CocoaPods для получения дополнительной информации. - person hujunfeng; 02.07.2018
comment
Мы обнаружили, что обновление версии Cocoapod, а также настройка наших зависимостей в проекте (целевая зависимость), похоже, научили Cocoapods нашим зависимостям и фактически исправили это. - person Sam; 02.07.2018
comment
Интересный. Я уже использовал последнюю версию CocoaPods 1.5.3, когда столкнулся с проблемой. Целевая зависимость цели теста пользовательского интерфейса была просто целью приложения. Ничего больше. Тем не менее мне пришлось изменить Podfile так, как я написал выше, чтобы тестовая цель пользовательского интерфейса могла успешно запуститься. - person hujunfeng; 02.07.2018
comment
Оба живут внутри одного и того же проекта? - person Sam; 02.07.2018
comment
странно, но это единственное решение, которое сработало для меня. - person sandpat; 16.03.2019

Мое решение состояло в том, чтобы добавить «фазу копирования файла» к моей тестовой цели. Там я установил пункт назначения Frameworks и добавил свой фреймворк со знаком +.

person leizeQ    schedule 12.10.2016

В моем случае не было ничего плохого в связанных файлах. Симулятор застрял на сообщении, вызванном приложением, например: «Имя приложения хочет отправлять вам уведомления». Нажал OK и в следующий раз мои XCTests работали нормально.

person FeltMarker    schedule 25.03.2016

Просто чтобы поделиться своим опытом об этой ошибке:

Я использую fastlane +cocopods.

У меня есть рабочая область с двумя динамическими фреймворками:

  • А.фреймворк
  • B.фреймворк

Зависимости:

  • A зависит от AFNetworking с использованием Cocopods
  • B зависит от A

Зависимость определяется в подфайле.

Ошибка возникла при выполнении тестов фреймворка B.

В моем случае проблема была связана с отсутствующей зависимостью от AFNetworking в цели B.framework.

Добавление зависимости модуля к AFNetworking в B.framework в Podfile, все было решено.

Таким образом, даже если цель B компилируется успешно, AFNetworking не был встроен в тестовое приложение B, и симулятор не смог запустить тестовое приложение B, вызвав эту "очень важную" (*) ошибку.

(*) спасибо Apple за это!

person Lubbo    schedule 19.01.2017

Вау, я потратил на это много времени, в моем тестовом пакете было выбрано «Хост-приложение» для моего приложения. Других тестовых связок не было.

Я ожидаю, что это решение не может быть правильным решением для каждой ситуации, но мои тесты были в основном для тестирования динамической библиотеки, и для ее запуска действительно не требовалось хост-приложение. Я получал вышеуказанную ошибку, отключение этого позволило мне запустить тесты без этой ошибки, и точки останова сработали. Я использовал MacOS, но, вероятно, он работает аналогично и в других средах. Я ожидаю, что это решение не может быть правильным решением для каждой ситуации, но мои тесты были в основном для тестирования динамической библиотеки, и для ее запуска действительно не требовалось хост-приложение.

В тестовом пакете перейдите в «Общие» -> «Тестирование» -> установите «Хост-приложение» на «Нет».

person possen    schedule 29.01.2017
comment
это то, что исправило это и для меня, спасибо ???? - person Jared Henderson; 13.02.2021

В моем случае для параметра «Только строить активную архитектуру» было установлено значение «ДА».

В проекте и целях: Настройки сборки -> Архитектуры -> Только сборка активной архитектуры должно быть НЕТ вместо ДА

person Mihriban Minaz    schedule 27.07.2016

В моем случае я не добавил фазу запуска сценария для библиотек Quick и Nimble, которые я интегрировал с помощью Carthage.

person Ben Thomas    schedule 14.07.2017

У меня была такая же проблема, и я уже пробовал все, что здесь предлагалось, но безуспешно.

Запуск тестов на другом симуляторе решил проблему для меня. После этого оригинальный симулятор также больше не вызывал отказов.

person fredpi    schedule 19.08.2018

Мой случай был особенным. Я использовал 2 файла в качестве тестовых классов. один работал отлично, а у другого была эта ошибка.
Обе ссылки на одну и ту же структуру.

Решение

УДАЛИТЬ ПРОИЗВОДНЫЕ ДАННЫЕ

Окно => Проекты => Удалить (в вашем проекте)

Удачи и счастливого тестирования!

person Yitzchak    schedule 30.08.2016

Во время создания Cocoa Touch Framework каждая попытка запустить тесты заканчивалась тем же сообщением об ошибке, что и OP.

Я исправил это, изменив конфигурацию сборки TEST с Debug на Release.

Шаг 1

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

Шаг 2

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

Шаг 3

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

Примечание. Дополнительная настройка Runpath Search Paths не потребовалась.

Я использую Cocoapods в версии 1.6.1 и Xcode 10.1.

person Kamil Harasimowicz    schedule 26.03.2019
comment
Очень странно. Это сработало и для меня в одном проекте (с использованием тех же версий), но другой проект работает отлично, используя конфигурацию отладки для тестирования ????????‍♂️ - person phatblat; 03.04.2019

Если кто-то все еще сталкивается с этой проблемой, мне помог этот ответ. Установите для параметра Всегда встраивать стандартные библиотеки Swift значение Нет в настройках проектов. Я сделал это для тестовой цели пользовательского интерфейса.

person stellz    schedule 13.04.2019

Я пробовал много разных вариантов, но ни один из них не помог мне, кроме приведенного ниже, и я потратил много времени, опубликовав это, чтобы действительно помочь и сэкономить время на этом:

Следуйте всем инструкциям для полной ручной настройки.

https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md#full-manual-configuration Советы Когда вы дойдете до той части, где вы выполняете xcodebuild, если сборка завершилась неудачно и в журнале упоминается RoutingHTTPServer или YYCache, добавьте эти две платформы на вкладку «Фазы сборки» целевого объекта WebDriverAgentRunner. Откройте файл WebDriverAgent.xcodeproj.

Выберите «Цели» -> «WebDriverAgentRunner».

Откройте «Фазы сборки» -> «Копировать фреймворки».

Нажмите «+» -> добавить RoutingHTTPServer

Нажмите «+» -> добавьте YYCache https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-382344697 https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-383362376

Сборка/тест также может завершиться ошибкой из-за того, что приложение/разработчик WebDriverAgentRunner не является доверенным на устройстве. Пожалуйста, доверьтесь приложению и повторите попытку.

При попытке доступа к статусу сервера WebDriverAgent, если он пытается подключиться к порту 0, жестко закодируйте порт 8100 в appium-xcuitest-driver/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.m.

Исходная строка: server.port = (UInt16)port; Новая строка: server.port = 8100; https://github.com/facebook/WebDriverAgent/issues/661#issuecomment-338900334

person Ravi    schedule 12.06.2018

Хотел бы поделиться своим ответом, надеюсь, это сэкономит чье-то время.

Для меня файл .m не был правильно связан в разделе «Фазы сборки» -> «Источники компиляции».

person Varun Mehta    schedule 26.01.2016

В моем случае я объявил свойство доступным только для чтения в заголовочном файле:

// In .h file
@property (nonatomic, readonly) NSUInteger count;

но я забыл добавить это объявление в .m, чтобы был сгенерирован сеттер:

// In .m file
@property (nonatomic, assign) NSUInteger count;

Глупая ошибка, не совсем уверен, почему она проявляется в этой ошибке, но добавление этой строки в .m решило проблему.

person JohnG    schedule 29.03.2016

В моем случае мои настройки сборки -> Архитектуры устанавливались только для armv7, и я изменил значение ARCHS_STANDARD, которое было таким же, как и в моем хост-приложении.

person Felipe FMMobile    schedule 30.06.2016

Для меня мне пришлось «Доверять» разработчику в «Управлении устройствами» в разделе «Настройки -> Общие» на моем устройстве. (Настройки -> Общие -> Управление устройством -> ID разработчика -> "Доверять приложению") Когда я запускал приложение через боковую загрузку, используя свой Apple ID.

person infiniteLoop    schedule 18.11.2017

В моем случае мне пришлось удалить $(inherited) из других флагов компоновщика в моей тестовой цели пользовательского интерфейса. Я установил статические библиотеки черезcocopods.

person zuziaka    schedule 19.03.2018

для меня проблема заключалась в файле Pod
Я создал новую цель, но забыл добавить цель в файл pod

target 'mobilesdkIntegrationTests' do
  // write here any predefined pods if any, like
  testing_pods
end

просто добавьте цель в файл pod, исправив проблему

person Sultan Ali    schedule 27.08.2018

Есть некоторые автоматически добавляемые настройки проекта, которые поставляются с Xcode 10, и они появляются время от времени, а не все время. После загрузки Xcode 10 перезагрузите компьютер. Это то, что исправило это для меня. Ни один из этих ответов не исправил это для меня. Надеюсь, это поможет. Хотел бы я дать лучший ответ.

person ScottyBlades    schedule 19.09.2018

Переход с Xcode 9.4.1 на Xcode 10.1 решил проблему в моем случае.

person pmdj    schedule 14.01.2019

В моем случае у меня был полностью чистый проект с пустыми тестами по умолчанию. Если я добавил какой-либо модуль, я получил эту ошибку. Решение заключалось в том, что по крайней мере один файл в тестовой цели должен импортировать Foundation

import XCTest
import Foundation

@testable import CVZebra

class CVZebraTests: XCTestCase {

    override func setUp() {
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }

    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
    }

    func testExample() {
        // This is an example of a functional test case.
        // Use XCTAssert and related functions to verify your tests produce the correct results.
    }

    func testPerformanceExample() {
        // This is an example of a performance test case.
        self.measure {
            // Put the code you want to measure the time of here.
        }
    }

}
person MarekM    schedule 23.01.2019

В моем случае возникла проблема с моим приложением в симуляторе. Прежде чем возникла проблема, я обработал db-миграцию (область), которая не удалась и уничтожила мою базу данных. Так что у меня все работало нормально после того, как я удалил приложение на симуляторе.

person Sandu    schedule 15.04.2019