У тестовій мішені X сталася помилка (Ранній несподіваний вихід, операція ніколи не закінчилась із завантаженням - спроба перезапустити не буде


77

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

Коли я вперше виконав свій тестовий приклад, це видає помилку вище. Я шукав його і намагався дотримуватися деяких рішень, таких як створення нової цілі , перезапуск Xcode, але це мені не допомогло. Будь-яка ідея?


1
Інструкції, як відомо, працюють. Завдяки наданій вами інформації неможливо діагностувати проблему. Будь ласка, перейдіть до вихідних даних збірки (cmd-8), ліворуч виберіть запис "Тест", потім праворуч виберіть "Журнали" вгорі, потім клацніть правою кнопкою миші на "Тест X" нижче, виберіть "Копіювати стенограму. .. як текст ", який копіює стенограму в буфер обміну. Перевірте, що там є, і поділіться тим, що ви можете / вважаєте важливим.
Ерік Доерненбург,

Отримав причину вищевикладеної помилки: ".m-файл не був зв’язаний у розділі Фази побудови -> Компілювати джерела". Але тепер з'являється чергова помилка "дублікат символу _OBJC_METACLASS _ $ _ <Назва класу> в:" після додавання прапора -ObjC як іншого прапора лінкера.
Варун Мехта

Пов’язувати бібліотеку слід лише один раз, як це описано в документації.
Ерік Доерненбург

@ErikDoernenburg, ти можеш мені тут допомогти. Я не можу визначити причину
iKushal

Відповіді:


121

У мене є свої примітки та демонстраційні програми для Cocoapods та Carthage тут https://github.com/onmyway133/TestTarget

  • Переконайтесь, що всі фреймворки пов’язані з тестовими цілями
  • Налаштуйте Runpath Search Pathsвказувати на$(FRAMEWORK_SEARCH_PATHS)

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


11
Додавання $(FRAMEWORK_SEARCH_PATHS)до Runpath Search Pathsпрацювало у мене. На здоров’я!
NSTJ,

1
Гей, вирішено і для мене :) Чи можете ви пояснити трохи більше, що відбувається?
Тіціано Коронео

3
Дякую! Це спрацювало, я просто хотів зазначити, що шляхи пошуку Runpath слід встановлювати в рамках цілі, а не в тесті
Брецько

OMG, це мені теж допомогло! Дякую!
Баран Емре

Боже, це ти? Налаштування Runpath Search Pathsвказувати на $(FRAMEWORK_SEARCH_PATHS)допомагає мені.
Богдан

17

Я використовую картрідж, і проблема для мене - пошук залежностей у тестовій мішені. Виправлення:

Додати $(PROJECT_DIR)/Carthage/Build/iOSдоRunpath Search Paths

Ви можете знайти посилання тут: Випуск Карфагена


1
Це вирішило проблему для мене, велике спасибі! Тести не виконувались на моїй цілі macOS, тому я додав $(PROJECT_DIR)/Carthage/Build/Mac.
Кіліан

11

Можливо інше рішення, якщо ви використовуєте 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

до:

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


Дуже дякую! але ... чому це працює ?! і чи є помилка, яка відстежує це з кокоподами?
Сем

@Sam, вибач, я теж не знаю чому. Я знайшов це рішення лише методом спроб і помилок. Можливо, вам доведеться перевірити офіційне репозиторій CocoaPods для отримання додаткової інформації.
hujunfeng 02

Ми виявили оновлення версії cocoapod плюс налаштування наших залежностей у проекті (цільова залежність), здавалося, навчило Cocoapods про наші залежності і насправді це виправило ..
Сем

Цікаво. Я вже використовував останню версію CocoaPods 1.5.3, коли виявив проблему. Цільова залежність тестової цілі інтерфейсу користувача була просто ціллю програми. Більш нічого. І все-таки мені довелося змінити файл Podfile на спосіб, який я розмістив вище, щоб ціль тестування користувацького інтерфейсу могла успішно запуститись.
hujunfeng,

Чи живуть обидва в одному проекті?
Сем

6

Моїм рішенням було додати до етапу тесту "Фазу копіювання файлу". Там я встановив призначення для Frameworks і додав свій фреймворк зі знаком +.


Дякую, це допомогло у моїй справі. Ось стаття, яка описує проблему medium.com/@greesce/…
Bartosz Olszanowski

коротше: додати всі фреймворки, що використовуються в поточному, рекурсивно.
Запорожченко Олександр

Для мене тести інтерфейсу працювали нормально на симуляторі, але не на реальному пристрої. Додано "Фаза копіювання файлу" допомогло, дякую!
Дмитро Сімкін

5

У моєму випадку з пов'язаними файлами не було нічого поганого. Симулятор начебто застряг у повідомленні, яке ініціював додаток, наприклад: "Назва програми хоче надсилати вам сповіщення". Натиснув кнопку ОК і наступного разу мої XCTests працювали нормально.


5

Просто, щоб поділитися своїм досвідом щодо цієї помилки:

Я використовую fastlane + cocoapods.

У мене є робоча область з 2 динамічними фреймворками:

  • А.рамки
  • Б.рамки

Залежності:

  • A залежить від AFNetworking з використанням кокапод
  • B залежить від A

Залежність визначається в підфайлі.

Помилка була піднята під час виконання фреймворкових тестів.

У моєму випадку проблема була пов'язана з відсутністю залежності від AFNetworking у B.framework target.

Додавання залежності підсистеми до AFNetworking у B.framework у Podfile все було вирішено.

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

(*) дякую Apple за це!


2

У моєму випадку Build Active Architecture Only було встановлено ТАК.

У проекті та цілях: Налаштування збірки -> Архітектури -> Тільки побудувати активну архітектуру має бути НІ замість ТАК


2

Ого, я витратив на це багато часу, у моєму тестовому наборі було вибрано "Застосування програми" для моєї програми. Інші тестові пакети не робили.

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

У тестовому наборі перейдіть до Загальне -> Тестування -> Установіть для "Хост-програми" значення Немає.


2

У моєму випадку я не додав етап запуску сценарію для бібліотек Quick і Nimble, які я інтегрував за допомогою Carthage.


2

У мене була та ж проблема, і я вже спробував усе запропоноване тут без жодного успіху.

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


2

Мій випадок був особливим. Я використовував 2 файли як тестові класи. один працював ідеально, а інший мав цю помилку.
Обидва посилаються на однакові рамки.

Рішення

Очистити похідні дані

Вікно => Проекти => Видалити (у вашому проекті)

Успіхів та щасливих випробувань!


1

Під час створення Cocoa Touch Framework будь-яка спроба запуску тестів закінчувалася тим самим повідомленням про помилку, як це писав OP.

Я виправив це, змінивши конфігурацію збірки TEST з Debug на Release.

Крок 1

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

Крок 2

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

Крок 3

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

Примітка : Не потрібно було додаткової конфігурації Runpath Search Paths.

Я використовую Cocoapods у версії 1.6.1 та Xcode 10.1


Дуже дивно. Це спрацювало для мене також в одному проекті (з використанням тих самих версій), але інший проект працює прекрасно, використовуючи конфігурацію налагодження для тестування
phatblat,

1

Якщо хтось все ще відчуває це питання, ця відповідь мені допомогла. У налаштуваннях проектів установіть для параметра « Завжди вбудовувати швидкі стандартні бібліотеки» значення « Ні» . Я зробив це для цілі тестування інтерфейсу користувача


1

Я спробував багато різних варіантів, але жоден мені не допоміг, крім нижче, і витратив багато часу, розмістивши це так, що справді допоможе та заощадить час на цьому:

Дотримуйтесь усіх вказівок для повного ручного налаштування

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) порт; Новий рядок: server.port = 8100; https://github.com/facebook/WebDriverAgent/issues/661#issuecomment-338900334


0

Я хотів би поділитися моєю відповіддю, сподіваючись, що це може заощадити комусь час.

Для мене файл .m не був належним чином зв'язаний у розділі Фази побудови -> Джерела компіляції


0

У моєму випадку я оголосив властивість як лише для читання у файлі заголовка:

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

але я забув додати цю декларацію до .m, щоб сформувався сеттер:

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

Дурна помилка, не зовсім впевнений, чому це виявилося в цій помилці, але додавши цей рядок до .m, вирішило проблему.


0

У моєму випадку мої Налаштування збірки -> Архітектури встановлювались лише для armv7, і я змінив на ARCHS_STANDARD, що був таким же, як у мого хост-додатку


0

Для мене мені довелося "довіряти" розробнику в "Керуванні пристроями" в розділі "Налаштування -> Загальне" на моєму пристрої. (Налаштування -> Загальне -> Керування пристроєм -> Ідентифікатор розробника -> 'Довіряти програмі') Оскільки я запускав додаток через бічне завантаження за допомогою свого ідентифікатора Apple.


0

У моєму випадку мені довелося видалити $(inherited)з інших Linker Flags у моїй тестовій програмі ui. Я встановив статичні бібліотеки через cocoapods.


0

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

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

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


0

Є деякі автоматично додані налаштування проекту, які постачаються з Xcode 10, і вони надходять час від часу, а не весь час. Після завантаження Xcode 10 перезавантажте комп'ютер. Саме це для мене це виправило. Жодна з цих відповідей не зафіксувала це для мене. Сподіваюся, це допоможе. Я хотів би дати кращу відповідь.


0

Перехід з Xcode 9.4.1 на Xcode 10.1 вирішив проблему в моєму випадку.


0

У моєму випадку у мене був повністю чистий проект із порожніми тестами за замовчуванням. Якщо я додав будь-який стручок, я отримав цю помилку. Рішення полягало в тому, що принаймні один файл у тестовій мішені повинен імпортувати 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.
        }
    }

}

0

У моєму випадку виникла проблема з моїм додатком у тренажері. Перш ніж проблема виникла, я обробив db-міграцію (область), яка не вдалася і знищила мою db. Тож у мене все працювало нормально після того, як я видалив додаток на симуляторі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.