Fehler beim Testen von MacOS Swift Framework

8

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 sein

Beide (Framework und Testpaket) kompilieren ohne Fehler oder Warnung (in Beta2)

    
Stephan 10.07.2014, 05:58
quelle

6 Antworten

2

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.

    
Kevin Coble 13.07.2014, 01:52
quelle
13

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:

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

  2. 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%
  3. 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.

Jay Lieske 15.09.2014 06:49
quelle
6

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.

    
Pascal 12.08.2016 08:17
quelle
2

Meine Lösung bestand darin, meinem Testziel eine einzige Datei hinzuzufügen, AppKitTests.swift (oder AppKitSpec.swift in meinem Fall), und die gesamte Datei enthält:

%Vor%

Oh, ich habe auch AppKit zu den Frameworks des Testziels hinzugefügt.

    
Dave Lee 28.11.2014 05:09
quelle
0

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.

    
pohl 27.07.2014 17:10
quelle
0

Ich stieß auf dasselbe Problem und fügte

hinzu %Vor%

in der Swift-Datei behoben

    
Marco83 05.01.2015 13:18
quelle

Tags und Links