Xcode 4 unit-testing linker-Fehler
HINWEIS: "Verwenden Sie GHUnit" ist keine akzeptable Antwort auf diese Frage. Ich weiß, die meisten denken GHUnit ist besser als die Xcode4 OCUnit, aber das ist nicht das, was ich bin das Fragen. Ich werde das bewerten separat.
Habe ich ein Xcode-Projekt, das ich erstellt in Xcode4 aus dem nichts, mit der "unit-tests" checkbox überprüft während der Erstellung. Ich habe auch einige Bibliotheken, die ich entwickelt habe in einem früheren Projekt. Sie wurden Hinzugefügt, um das Projekt über die "Dateien Hinzufügen, x..." - dialog, und nur Hinzugefügt, um die Anwendung, die Ziel (nicht die Test-target). Sie funktioniert gut, wenn die Anwendung ausgeführt wird, so dass ich denke, Sie sind korrekt eingestellt. Ich habe auch eine Reihe von verschiedenen Klassen für das Projekt geschrieben.
Mein Test-Dateien sind in den standard-Weg, benannt [AppName]Tests.h und .m.
Code für den header:
#import < SenTestingKit/SenTestingKit.h >
@interface [AppName]Tests : SenTestCase {
@private
}
@end
Code für die Implementierung:
#import "[AppName]Tests.h"
@implementation [AppName]Tests
- (void)setUp
{
[super setUp];
//Set-up code here.
}
- (void)tearDown
{
//Tear-down code here.
[super tearDown];
}
//Test methods go here
@end
Ist nur das grundlegende Skelett. Es funktioniert einwandfrei in meinem anderen Projekt, und dieses Projekt, solange ich nicht importieren Sie andere Dateien. Wenn ich importieren andere Datei aus diesem Projekt und verwenden Sie es, sehe ich die folgende Fehlermeldung in der Xcode-output-Protokoll:
The test bundle at /Users/[Me]/Library/Developer/Xcode/DerivedData/[AppName]-dwuuuwcpmdqxqmgxomoniplwhlpb/Build/Products/Debug-iphonesimulator/[AppName]Tests.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.
Habe ich bereits bestätigt, dass:
- Alle frameworks, die ich verwendet wurde
Hinzugefügt, um "Link-Binary mit
Bibliotheken" für die app und testen
Ziele. - Die test-target konfiguriert wurde
zu bauen und richtig, dass alle meine
test-Methoden zeigen, bis in Bearbeiten
Schema...->Test>Tests - Jedes Problem, aber dieses wurde
gelöst und es gibt keine compiler
Fehler. - Alle Einstellungen besprochen
hier
richtig eingerichtet und identisch
zu meinem anderen Projekt, dass die tests
richtig.
Irgendwelche Gedanken auf, was könnte die Ursache sein?
- Ich bin mit GENAU dem gleichen problem. Die Tests laufen gut, bis Sie reservieren ein Objekt aus der host-Anwendung. War ratlos, den ganzen Tag 🙁
- Ich habe schon ratlos für einen guten Monat und eine Hälfte 😛 Irgendwann habe ich einfach aufgegeben und hab die Prüfung auf die altmodische Weise. Vielleicht ist die neue Xcode wird es zu beheben, wer weiß. Lassen Sie uns wissen, wenn Sie nichts finden, obwohl.
- Wie viele vor mir habe ich aufgegeben und bin jetzt mit GHUnit. Es dauerte etwa 10 Minuten für den Aufbau.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich den "Test Host" - Eigenschaft auf die unit-test-target zu
$(BUNDLE_LOADER)
. Das ist mein problem gelöst!Ich nur vergeudete Stunden auf diese und ähnliche Fehler - stellt sich heraus, ich hatte umbenannt mein Ziel - versuchen, dies zu beheben, durch die Umbenennung der relevanten Variablen und durch das entfernen der gesamten DerivedData Verzeichnis waren erfolglos.
Ich schließlich einfach eine neue unit-test-target nach den Schritten hier:
http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/
Und alles ist jetzt gut.
So, wenn du eine seltsame, unerklärliche Fehler könnten Sie besser dran, nur das erstellen einer neuen unit-test-target. Dauert nur 2 Minuten.
Habe ich Folgendes:
http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/
Nehmen Sie einen tieferen Blick auf Test_Hosts = $(BUNDLE_LOADER)
Einstellung der Test_Hosts Feste genau das gleiche Problem!
$(BUILT_PRODUCTS_DIR)/MyExistingApp.app/MyExistingApp
Wann bekomme ich linker-Fehler beim ausführen von unit-tests, zwei Dinge beheben das problem für mich. Die erste Lösung ist, um den Test Nach der Build-Einstellung auf JA, und wählen Sie Produkt - > Build > Bauen Für die Prüfung, um die tests auszuführen. Diese Lösung ist viel leichter zu implementieren.
Die zweite Lösung ist das hinzufügen der Anwendung Dateien Implementierung der unit-test-target. Öffnen Sie die Datei-Inspektor, indem Sie Ansicht > Dienstprogramme > Datei-Inspektor. Wählen Sie eine Implementierung-Datei im Projekt-navigator. Wählen Sie das Kontrollkästchen neben dem unit-test-target in der Datei-Inspektor.
Für iPhone-Anwendungen laufen im simulator, stellen Sie sicher, dass die Test-Host-build-Einstellung ist leer. Der simulator unterstützt nicht die Anwendung-gehostet unit-tests.
Ich hatte das gleiche problem einmal. Für einige Grund, warum man den Quellcode der Dateien für mein Projekt war ebenfalls enthalten, um kompiliert werden, um die test-target, wodurch diese link-Fehler.
Indem sichergestellt wird, dass nur der test-Implementierung-Dateien kompiliert werden, sollten Sie in der Lage sein, um diesen Fehler zu beheben. Sie können dies überprüfen, in:
TestTarget -> Build-Phasen -> Quellen Kompilieren
Stieß auf diesen Fehler läuft Xcode 4.5.2 - es Nov 2012 - keine der oben genannten gearbeitet. Es scheint, dass das einstellen der bundle-loader und test-host soll füllen Sie alle Abhängigkeiten von der Ihr Projekt für Sie - oder führen Sie die tests in Ihrer app-Umgebung oder so etwas, aber leider nicht für mich arbeiten. Was Sie getan haben war zu verhindern, dass die spezifische Xcode Warnungen über die Dateien/Bibliotheken fehlten.
Was für mich gearbeitet wurde das hinzufügen ein neues Ziel: cocoa touch unit-test, (sicherstellen, dass das bundle loader und test-host-build-Einstellungen waren leer), gerade die build-Fehler und manuelles hinzufügen der fehlenden Abhängigkeiten - einer nach dem anderen der source-Dateien aus meinem Projekt, die erforderlich waren, und dann die Rahmenbedingungen. Nicht sehr elegant, aber ich war einfach nur glücklich, es zu erhalten arbeitend. Nicht sicher, warum ich habe nicht versucht, diese GHUnit Bibliothek noch.
Stellen Sie sicher, dass die test-target hat die app-target konfiguriert als Abhängigkeit (Build-Phasen -> Ziel-Abhängigkeiten).
Ich bin mir bewusst, dass diese Frage schon ziemlich alt, aber ich habe gerade Schwierigkeiten mit dem identischen Problem für einige Zeit und schließlich geschafft, es zu lösen, also lassen Sie mich teilen, was ich gefunden habe.
Ich habe die Portierung einer app von iOS auf dem Mac, das Projekt selbst wurde für iOS, so dass sowohl das Projekt und die wichtigsten Gegner hatte iOS in den unterstützten Plattformen. Nun, als ich anfing zu portieren erstellte ich ein neues target für Mac und verändert unterstützten Plattformen zu OSX nur für das Ziel. Danach erstellte ich ein weiteres Ziel für unit-tests, aber vergessen zu ändern, die unterstützten Plattformen von iOS auf den Mac. Ich denke, man sollte schon wissen, was das problem war im Grunde die unit-tests Ziel ist standardmäßig verknüpft mit dem Cocoa-framework so, da werden die unterstützten Plattformen für dieses Ziel war nur iOS cocoa-framework wurde nie gebaut und war nicht richtig verknüpft. Ändern der unterstützten Plattformen zu OSX für das test-target das problem behoben.
Ich bin mir bewusst, dass dies möglicherweise nicht sehr hilfreich für iOS-test-targets, aber wenigstens gehen Sie zu Ihrem test-target Link-Binary Mit Bibliotheken-Abschnitt und sehen, ob es irgendwelche rot-Bibliotheken. Dies gab mir die Idee, vielleicht wird es auch einigen von Euch helfen.
Habe ich in dieser nach mehreren Zusammenführungen in letzter Zeit, wo ein Kollege und ich haben beide hinzugefügten Dateien in das Projekt, und nicht alle für die Durchführung Dateien sind ein Mitglied der unit-Test-target.
Die Lösung:
.m
Dateien (benutzen Sie "Filter im Navigator" (cmd-opt-j) Suche für.m
)Hinweis: wenn die test-target Kennzeichen zeigt
-
statt+
oder ohne Häkchen, bedeutet dies, dass einige, aber nicht alle, der ausgewählten Dateien sind Mitglied des Ziels.Ich habe versucht zu tun, ist mehr intelligente Dinge zu verschmelzen, Zeit mit der
.xcodeproj
'sproject.pbxproj
Datei, aber ich habe es aufgegeben aus frustration über Ihre Unergründlichkeit jeder Zeit und gefallenen wieder auf diese Methode.(Noch ein Hinweis: ich nur wählen Sie ein paar Dateien zu einem Zeitpunkt aus zwei Gründen: