Ich habe ein Framework in obj-c und swift geschrieben.
Jetzt versuche ich, ein Testziel für eine verwandte Einheit auszuführen, aber ich erhalte diesen Fehler:
%Vor%Irgendeine Idee, was die Ursache sein kann? Der Fehler scheint auf "Bibliothek nicht geladen: @ rpath / libswiftAppKit.dylib"
bezogen zu seinBeide (Framework und Testpaket) kompilieren ohne Fehler oder Warnung (in Beta2)
Ich hatte das gleiche Problem.
Habe libwiftAppKit.dylib aus dem Xcode-Anwendungsverzeichnis kopiert (ich benutze Beta3), in ein Verzeichnis, das ich referenzieren konnte (nicht Teil eines Anwendungspakets), dann die Bibliothek zu "Link binary with libraries" hinzufügen "Einstellung für das Testpaket. Meine Tests haben dann angefangen zu arbeiten.
FYI, der Pfad für die Dylib war '/Applications/Xcode6-Beta3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/libswiftAppKit.dylib'
Wahrscheinlich keine gute endgültige Lösung, aber es funktioniert für die Zwischenzeit.
Ich hatte ein ähnliches Problem, obwohl meines ein iOS-Testziel war, das auf ein Swift-Framework verlinkte, das nicht auf Xcode 6 GM laufen konnte. Das Testziel war erfolgreich auf einer frühen Beta von Xcode 6 ausgeführt worden, aber die endgültige Version meldete den Laufzeitfehler: Library not loaded: @rpath/libswiftCore.dylib
Ich habe festgestellt, dass ein neueres Projekt den Fehler nicht hatte, also habe ich die Buildeinstellungen und den Testcode verglichen. Ich konnte das Problem mit drei Schritten lösen:
Für das Testziel muss die Einstellung "Eingebettetes Ziel enthält Swift-Code" JA lauten. Dies weist den Linker an, die Swift-Laufzeitbibliotheken zur ausführbaren Datei hinzuzufügen.
Das Testziel benötigt einen expliziten Wert für die Build-Einstellung "Runpath Search Paths". Dies teilt dem Loader mit, wo die Swift-Laufzeitbibliotheken zu finden sind. Ich habe die folgende Einstellung von einem neuen Testziel kopiert:
%Vor% Die Testfälle müssen explizit alle Module importieren, die vom verknüpften Framework verwendet werden. In meinem Projekt verwendete das Framework UIKit, aber die Testfälle verwendeten nur mein Framework. Als ich ein explizites import UIKit
zu den Testfällen hinzufügte, ging das Verbindungsproblem weg.
Da ich immer wieder auf dieses Problem stoße, wenn ich mit den Build-Einstellungen herumarbeite, hier ist die sauberste Antwort, die ich ab Xcode 8b5 geben kann:
Wenn Komponententests nicht auf iOS ausgeführt werden, stellen Sie Folgendes sicher:
Pfadpfade für Suchpfade :
@loader_path/Frameworks
Wenn Komponententests nicht auf macOS ausgeführt werden, stellen Sie Folgendes sicher:
Pfadpfade für Suchpfade :
@loader_path/../Frameworks
Dies wird als LD_RUNPATH_SEARCH_PATHS
in Ihrer pbxproj-Datei angezeigt. Sie können auch $(inherited)
hinzufügen, um sicherzustellen, dass auch projektweite Pfade hinzugefügt werden, die aber wahrscheinlich leer sind.
Zuletzt habe ich die executable_path/...
-Einstellungen nicht benötigt, macht keinen Unterschied für mich, ob sie für Komponententests da sind oder nicht.
Ich hatte das in Beta 4 vor mir und es stellte sich heraus, dass ich es mir selbst angetan hatte, ohne es zu merken.
Ich hatte ein Framework-Projekt namens Fnord. Mein FnordTests-Ziel enthielt einige Einheitstestklassen mit import Fnord
am Anfang jeder Datei. Aus irgendeinem Grund beschwerte sich Xcode über diese Importe und so habe ich sie auskommentiert. Dies ist, als ich begann, die gleichen Symptome zu bekommen, während ich versuchte, meine Komponententests auszuführen.
Ich habe festgestellt, dass die Einstellungen für mein FnordTests-Ziel so waren, dass das Ziel mit Fnord.framework
verknüpft wird, und ich habe festgestellt, dass es das möglicherweise nicht mit den oben genannten import Fnord
-Dokumenten tun kann.
Also habe ich sie wieder eingefügt, und alles ist wieder normal geworden. Seltsamerweise zeigte Xcode diese Importanweisungen nicht mehr als problematisch an, aber das ist Beta, also kann ich das verzeihen.
Ich hoffe, das hilft jemandem.
Tags und Links frameworks swift xctest