Testziel X hat einen Fehler festgestellt (Frühes unerwartetes Beenden, Vorgang hat das Bootstrapping nie beendet - es wird kein Neustart versucht

77

Ich habe begonnen OCMock, Testfälle für das vorhandene Projekt zu schreiben, das ich in meinen Projektarbeitsbereich integriert habe. Nachdem Sie alle in diesem Link genannten Schritte ausgeführt haben .

Als ich meinen Testfall zum ersten Mal ausgeführt habe, wird der obige Fehler angezeigt. Ich habe es durchsucht und versucht, einige der Lösungen wie das Erstellen eines neuen Ziels und das Neustarten von Xcode zu befolgen, aber es hat mir nicht geholfen. Irgendeine Idee?

Varun Mehta
quelle
1
Es ist bekannt, dass die Anweisungen funktionieren. Mit den von Ihnen angegebenen Informationen kann das Problem nicht diagnostiziert werden. Gehen Sie zur Build-Ausgabe (cmd-8), wählen Sie auf der linken Seite den Eintrag "Test" aus, wählen Sie oben rechts "Logs" aus und klicken Sie dann mit der rechten Maustaste auf "Test target X" und wählen Sie "Copy Transcript". .. als Text ", der das Transkript in die Zwischenablage kopiert. Überprüfen Sie, was sich dort befindet, und teilen Sie mit, was Sie für relevant halten können.
Erik Doernenburg
Ich habe den Grund für den obigen Fehler erhalten: ".m-Datei wurde nicht unter Build-Phasen -> Quellen kompilieren verknüpft". Jetzt wird ein weiterer Fehler "Duplikat des Symbols _OBJC_METACLASS _ $ _ <Klassenname> in:" angezeigt, nachdem das Flag -ObjC als anderes Linker-Flag hinzugefügt wurde.
Varun Mehta
Sie sollten die Bibliothek nur einmal verknüpfen, wie in der Dokumentation beschrieben.
Erik Doernenburg
@ErikDoernenburg kannst du mir hier helfen. Ich kann keinen Grund identifizieren
iKushal

Antworten:

121

Ich habe meine Notizen und Demo-Anwendungen für Cocoapods und Karthago hier https://github.com/onmyway133/TestTarget

  • Stellen Sie sicher, dass alle Frameworks mit den Testzielen verknüpft sind
  • Konfigurieren Sie Runpath Search Paths, um auf zu zeigen$(FRAMEWORK_SEARCH_PATHS)

Mehr Info

onmyway133
quelle
11
Hinzufügen $(FRAMEWORK_SEARCH_PATHS)zu Runpath Search Pathsfür mich gearbeitet. Prost!
NSTJ
1
Hey, auch für mich gelöst :) Kannst du bitte ein bisschen mehr erklären, was los ist?
Tiziano Coroneo
3
Vielen Dank! Es hat funktioniert, ich wollte nur beachten, dass Runpath Search Paths im Framework-Ziel und nicht im Testziel festgelegt werden sollten
Bretsko
OMG, das hat mir auch geholfen! Vielen Dank!
Baran Emre
Gott, bist du dat? Konfigurieren, Runpath Search Pathsum darauf zu zeigen, $(FRAMEWORK_SEARCH_PATHS)hilft mir.
Bogdan
17

Ich benutze Karthago und das Problem für mich war die Suche nach Abhängigkeiten in einem Testziel. Fix:

Hinzufügen $(PROJECT_DIR)/Carthage/Build/iOSzuRunpath Search Paths

Eine Referenz finden Sie hier: Karthago Problem

Radosław Cięciwa
quelle
1
Dies hat das Problem für mich gelöst, vielen Dank! Auf meinem MacOS-Ziel wurden keine Tests ausgeführt, daher habe ich hinzugefügt $(PROJECT_DIR)/Carthage/Build/Mac.
Kilian
11

Es gibt möglicherweise eine andere Lösung, wenn Sie CocoaPods verwenden und das UI-Testziel in das App-Ziel eingebettet ist, was in der Standardvorlage ( pod init) leider der Fall ist .

Versuchen Sie, das UI-Testziel wie folgt aus dem App-Ziel zu verschieben:

von:

platform :ios, '11.0'
use_frameworks!

target 'MyApp' do
  # Pods for MyApp

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

  end
end

zu:

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

Das Guthaben geht an SpacyRicochet in diesem Issue-Thread: https://github.com/CocoaPods/CocoaPods/issues/4752#issuecomment-305101269

hujunfeng
quelle
Vielen Dank! aber ... warum funktioniert das?! und gibt es einen Fehler, der dies mit Cocoapods verfolgt?
Sam
@ Sam, sorry ich weiß auch nicht warum. Ich habe diese Lösung nur durch Ausprobieren gefunden. Weitere Informationen finden Sie möglicherweise im offiziellen CocoaPods-Repo.
Hujunfeng
Wir fanden ein Update der Cocoapod-Version und das Einrichten unserer Abhängigkeiten im Projekt (Zielabhängigkeit) schien Cocoapods über unsere Abhängigkeiten zu unterrichten und dies tatsächlich zu beheben.
Sam
Interessant. Ich habe bereits die neuesten CocoaPods 1.5.3 verwendet, als ich auf das Problem stieß. Die Zielabhängigkeit des UI-Testziels war einfach das Anwendungsziel. Nichts anderes. Trotzdem musste ich das Podfile so ändern, wie ich es oben gepostet habe, damit das UI-Testziel erfolgreich gestartet werden konnte.
Hujunfeng
Leben beide im selben Projekt?
Sam
6

Meine Lösung bestand darin, meinem Testziel eine "Kopierdatei-Phase" hinzuzufügen. Dort habe ich das Ziel auf Frameworks gesetzt und mein Framework mit dem + -Zeichen hinzugefügt.

leizeQ
quelle
Danke, das hat in meinem Fall geholfen. Hier ist der Artikel, der ein Problem beschreibt medium.com/@greesce/…
Bartosz Olszanowski
Kurz gesagt: Fügen Sie alle aktuell verwendeten Frameworks rekursiv hinzu.
Zaporozhchenko Oleksandr
Für mich liefen UI-Tests auf dem Simulator in Ordnung, aber nicht auf dem realen Gerät. Das Hinzufügen der "Phase" Datei kopieren "hat geholfen, danke!
Dmitry Simkin
5

In meinem Fall war nichts falsch mit verknüpften Dateien. Der Simulator blieb bei der Nachricht hängen, die die App ausgelöst hatte, wie zum Beispiel: "Der App-Name möchte Ihnen Benachrichtigungen senden". Drücken Sie OK und das nächste Mal funktionierten meine XCTests einwandfrei.

Filzmarker
quelle
5

Nur um meine Erfahrungen mit diesem Fehler zu teilen:

Ich benutze Fastlane + Cocoapods.

Ich habe einen Arbeitsbereich mit 2 dynamischen Frameworks:

  • Eine grundlegende Struktur
  • B.framework

Abhängigkeiten:

  • A hängt von AFNetworking mit Cocoapods ab
  • B hängt von A ab

Abhängigkeiten werden im Podfile definiert.

Der Fehler wurde beim Ausführen von Framework B-Tests ausgelöst.

In meinem Fall hing das Problem mit der fehlenden Abhängigkeit von AFNetworking im B.framework-Ziel zusammen.

Durch Hinzufügen einer Pod-Abhängigkeit zu AFNetworking in B.framework in Podfile wurde alles behoben.

Selbst wenn das Ziel B erfolgreich kompiliert wurde, wurde AFNetworking nicht in die B-Test-App eingebettet und der Simulator konnte die B-Test-App nicht ausführen, was diesen "sehr bedeutsamen" (*) Fehler auslöste .

(*) Danke an Apple dafür!

Lubbo
quelle
2

In meinem Fall wurde Build Active Architecture Only auf YES gesetzt.

In Projekt und Zielen: Build-Einstellungen -> Architekturen -> Nur aktive Architektur erstellen sollte NEIN anstelle von JA sein

Mihriban Minaz
quelle
2

Wow, ich habe viel Zeit damit verschwendet, mein Testpaket hatte die "Host-Anwendung" für meine Anwendung ausgewählt. Andere Testpakete haben dies nicht getan.

Ich gehe davon aus, dass diese Lösung möglicherweise nicht für jede Situation die richtige Lösung ist, aber meine Tests bestanden hauptsächlich darin, die dynamische Bibliothek zu testen, und es war nicht wirklich eine Host-Anwendung erforderlich, um ausgeführt zu werden. Ich habe den obigen Fehler erhalten. Durch Deaktivieren konnte ich die Tests ausführen, ohne diesen Fehler zu erhalten, und die Haltepunkte funktionierten. Ich habe MacOS ausgeführt, aber es funktioniert wahrscheinlich auch für andere Umgebungen. Ich gehe davon aus, dass diese Lösung möglicherweise nicht für jede Situation die richtige ist, aber meine Tests bestanden hauptsächlich darin, die dynamische Bibliothek zu testen, und es war nicht wirklich eine Host-Anwendung erforderlich, um ausgeführt zu werden.

Gehen Sie im Testpaket zu Allgemein -> Testen -> Setzen Sie "Host-Anwendung" auf Keine.

possen
quelle
2

In meinem Fall hatte ich keine Run Script-Phase für die Quick- und Nimble-Bibliotheken hinzugefügt, die ich mit Carthage integriert habe.

Ben Thomas
quelle
2

Ich hatte das gleiche Problem und habe bereits alles, was hier vorgeschlagen wurde, ohne Erfolg ausprobiert.

Das Ausführen der Tests auf einem anderen Simulator löste das Problem für mich. Danach verursachte der ursprüngliche Simulator auch keine Ausfälle mehr.

Fredpi
quelle
2

Mein Fall war etwas Besonderes. Ich habe 2 Dateien als Testklassen verwendet. einer funktionierte perfekt und der andere hatte diesen Fehler.
Beide verbinden sich mit demselben Framework.

Lösung

KLARE ABGELEITETE DATEN

Fenster => Projekte => Löschen (bei Ihrem Projekt)

Viel Glück und viel Spaß beim Testen!

Yitzchak
quelle
1

Während ich Cocoa Touch Framework erstellte, endete jeder Versuch, Tests auszuführen, mit derselben Fehlermeldung wie OP.

Ich habe es behoben, indem ich die Build-Konfiguration von TEST von Debug auf Release geändert habe.

Schritt 1

Geben Sie hier die Bildbeschreibung ein

Schritt 2

Geben Sie hier die Bildbeschreibung ein

Schritt 3

Geben Sie hier die Bildbeschreibung ein

Hinweis : Es war keine zusätzliche Konfiguration von erforderlichRunpath Search Paths .

Ich verwende Cocoapods in Version 1.6.1 und Xcode 10.1

Kamil Harasimowicz
quelle
Sehr eigenartig. Dies funktionierte auch für mich in einem Projekt (mit denselben Versionen), aber ein anderes Projekt funktioniert gut mit der Debug-Konfiguration, um 🤷🏻‍♂️
phatblat
1

Wenn noch jemand dieses Problem hat , hat mir diese Antwort geholfen. Setzen Sie in den Projekteinstellungen Always Embed Swift Standard Libraries auf No. Ich habe es für das UI-Testziel gemacht.

stellz
quelle
1

Ich habe viele verschiedene Optionen ausprobiert, aber keine hat mir geholfen, außer unten, und viel Zeit verschwendet, indem ich dies gepostet habe, damit es wirklich hilft und Zeit spart:

Befolgen Sie alle Anweisungen zur vollständigen manuellen Konfiguration

https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md#full-manual-configuration Tipps Wenn Sie zu dem Teil kommen, in dem Sie xcodebuild ausführen, wenn der Die Erstellung schlägt fehl, und im Protokoll wird "RoutingHTTPServer" oder "YYCache" erwähnt. Fügen Sie diese beiden Frameworks auf der Registerkarte "Erstellungsphasen" des WebDriverAgentRunner-Ziels hinzu. Öffnen Sie die Datei "WebDriverAgent.xcodeproj"

Wählen Sie 'Ziele' -> 'WebDriverAgentRunner'

Öffnen Sie 'Build Phases' -> 'Copy Frameworks'.

Klicken Sie auf '+' -> RoutingHTTPServer hinzufügen

Klicken Sie auf '+' -> YYCache hinzufügen https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-382344697 https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-383362376

Der Build / Test kann auch fehlschlagen, weil die WebDriverAgentRunner-App / der WebDriverAgentRunner-Entwickler auf dem Gerät nicht vertrauenswürdig ist. Bitte vertraue der App und versuche es erneut.

Wenn beim Versuch, auf den WebDriverAgent-Serverstatus zuzugreifen, versucht wird, eine Verbindung über Port 0 herzustellen, wird der Port 8100 in appium-xcuitest-driver / WebDriverAgent / WebDriverAgentLib / Routing / FBWebServer.m fest codiert

Ursprüngliche Zeile: server.port = (UInt16) port; Neue Zeile: server.port = 8100; https://github.com/facebook/WebDriverAgent/issues/661#issuecomment-338900334

Ravi
quelle
0

Ich möchte meine Antwort teilen und hoffe, dass dies jemandem Zeit sparen kann.

Für mich war die .m-Datei unter Build-Phasen -> Quellen kompilieren nicht richtig verknüpft

Varun Mehta
quelle
0

In meinem Fall hatte ich eine Eigenschaft in einer Header-Datei als schreibgeschützt deklariert:

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

aber ich habe vergessen, diese Deklaration zur .m hinzuzufügen, damit ein Setter generiert wird:

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

Ein dummer Fehler, nicht ganz sicher, warum er sich in diesem Fehler manifestiert hat, aber das Hinzufügen dieser Zeile zur .m hat das Problem behoben.

JohnG
quelle
0

In meinem Fall wurden meine Build-Einstellungen -> Architekturen nur für armv7 festgelegt, und ich habe für ARCHS_STANDARD geändert, das mit meiner Host-Anwendung identisch ist

Felipe FMMobile
quelle
0

Für mich musste ich dem Entwickler in "Geräteverwaltung" unter "Einstellungen -> Allgemein" auf meinem Gerät "vertrauen". (Einstellungen -> Allgemein -> Geräteverwaltung -> Entwickler- ID -> "App vertrauen") Als ich die App durch seitliches Laden mit meiner Apple-ID ausführte.

Endlosschleife
quelle
0

In meinem Fall hatte ich entfernen $(inherited)aus Anderen Linker Flags in meinem ui Testziel. Ich habe statische Bibliotheken über Cocoapods installiert.

zuziaka
quelle
0

Für mich war das Problem die Pod-Datei.
Ich habe ein neues Ziel erstellt, aber vergessen, ein Ziel in die Pod-Datei einzufügen

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

Fügen Sie einfach ein Ziel in die Pod-Datei ein, um das Problem zu beheben

Sultan Ali
quelle
0

Es gibt einige automatisch hinzugefügte Projekteinstellungen, die mit Xcode 10 geliefert werden, und sie kommen manchmal, nicht immer. Starten Sie Ihren Computer nach dem Herunterladen von Xcode 10 neu. Das hat das für mich behoben. Keine dieser Antworten hat es für mich behoben. Ich hoffe das hilft. Ich wünschte, ich könnte eine bessere Antwort geben.

ScottyBlades
quelle
0

Der Wechsel von Xcode 9.4.1 zu Xcode 10.1 löste das Problem in meinem Fall.

pmdj
quelle
0

In meinem Fall hatte ich ein vollständig sauberes Projekt mit standardmäßig leeren Tests. Wenn ich einen Pod hinzugefügt habe, habe ich diesen Fehler erhalten. Die Lösung bestand darin, dass mindestens eine Datei im Testziel Foundation importieren sollte

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.
        }
    }

}
MarekM
quelle
0

In meinem Fall gab es ein Problem mit meiner App im Simulator. Bevor das Problem auftrat, habe ich eine Datenbankmigration (Realm) verarbeitet, die fehlgeschlagen ist und meine Datenbank zerstört hat. Nachdem ich die App auf dem Simulator gelöscht hatte, funktionierte alles für mich.

Sandu
quelle