IBDesignable Fehler Beim Hinzufügen zu den Tests Ziel
Habe ich eine einfache UIButton
Unterklasse implementiert IBDesignable
mit einem IBInspectable
var:
@IBDesignable class Button: UIButton {
@IBInspectable var borderColor: UIColor = UIColor.whiteColor() {
didSet { layer.borderColor = borderColor.CGColor }
}
}
Ich bin nicht mit dieser in einem Rahmen, und es ist die Arbeit im Interface Builder so wie gewollt, doch sobald ich hinzufügen, die diese Unterklasse um meine Tests
Ziel, Stoppt der Wiedergabe von live-und ich bekomme den folgenden Fehler:
Main.storyboard: error: IB Designables: Failed to update auto layout status: dlopen(TestTests.xctest, 1): Library not loaded: @rpath/XCTest.framework/XCTest
Referenced from: TestTests.xctest
Reason: image not found
Main.storyboard: error: IB Designables: Failed to render instance of Button: dlopen(TestTests.xctest, 1): Library not loaded: @rpath/XCTest.framework/XCTest
Referenced from: TestTests.xctest
Reason: image not found
Wenn ich entfernen IBDesignable
und die IBInspectable
vars, die Fehler gehen nicht Weg - leider auch die live-Darstellung im Interface Builder.
Wie kann ich testen, gegen eine IBDesignable
Klasse, ohne diese Fehler?
- Eine chance der Veröffentlichung auf github?
- Ich hatte Fehler wie diese, wenn meine UIView-Unterklasse implementiert wurde, in einem Cocoapod. Verschieben der UIView-Klasse der Haupt-app machte es Arbeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst dachte ich, dies war eine Art von Fehler in Xcode. Im folgenden ist der workaround habe ich gefunden:
SCHRITT 1
Markieren Sie Ihre Klasse und Eigenschaften wie
public
.SCHRITT 2
Importieren Sie Ihre Anwendungs-Modul aus der "Tests" - Modul.
Zum Beispiel, vorausgesetzt, dass Ihre Anwendung namens
MyGreatApp
, in IhremMyGreatAppTests/MyGreatAppTests.swift
:Brauchen Sie nicht hinzufügen " - Button.swift " zu Ihren "Tests" target.
SCHRITT 3 (für Swift)
In Ihrem storyboard explizit wählen Sie das Modul, MyGreatApp für alle benutzerdefinierten Klassen statt Xcode verwenden Sie das aktuelle Modul.
Ihre Frage beschreibt genau die Umstände, die ich erlebt habe.
Der Fehler wird auch sichtbar in den Attribut-inspector unter eigene Attribute.
Dies ist der workaround, der bei mir funktioniert:
Schritt 1
entfernen Sie alle @IBDesignable und @IBInspectable von Ihrem source-code
Schritt 2
Gehen Sie zurück zum interface builder. Der Fehler ist immer noch da.
Schritt 3
Starten Sie XCode, Ihr Projekt neu erstellen.
Fehler sollten verschwunden.
Schritt 4
fügen Sie alle @IBDesignable und @IBInspectable wieder zu Ihrem source-code
Nachdem diese Schritte, die ich war in der Lage zu gehen mit meinem Projekt ohne Probleme.
Meine Theorie, warum dies funktioniert, ist, dass der interface builder caches einige Sachen, die nicht gelöscht (und später neu erstellt), wenn Sie ein Projekt machen -> Sauber.
Die andere Antwort (Import Ihrer Haupt-Modul in Ihrem test-Modul) ist eine gute Idee und löste einige unangenehme Probleme für mich in der Vergangenheit aber nicht diese.
Die Lösung ist sehr einfach. Sie müssen entfernen Sie Ihre test-target, und erstellen Sie es erneut von Anfang an. Als ich umgezogen war, das Projekt auf Xcode-7, bekam ich eine Warnung, dass mein test-target ist beschädigt. Also habe ich beschlossen, es noch einmal. ES FUNKTIONIERTE!.
Zusätzlich Sie nicht an Ihren storyboards und auch nicht jede Klasse, um Ihre test-target. Bitte tun Sie nicht es so:
Stattdessen tun Sie es auf diese Weise:
Also, einfach entfernen Sie eine Datei aus dem test-target (einschließlich der Klassen, die mit @IBDesignables), dann, Wenn Sie Zugriff benötigen, um Ihre Klassen in Ihrem test-target verwenden Sie einfach
@testable import MyApp
:Es ist Arbeit und jeder Fehler mit IBDesignables verschwinden. Genießen:-)
Was ist die Ursache?
Dieser Fehler erscheint, wenn zwei Dinge passieren:
@IBDesignable
oder@IBInspectable
in Ihrem test-target.Wie kann ich das verhindern?
Entweder:
@IBDesignable
oder@IBInspectable
in Ihrem test-target. (Wenn Sie testen nur ein paar isolierte Modell-Dateien, können Sie bleiben Mitglieder Ihres test-target.)@testable import MyApp
—siehe hier für mehr details.) Dies ist die beste Praxis, so dass Sie zum fortsetzen des Tests Ihre gestaltbares/inspectable Ansichten sowie einem Modell-code in Ihre app.Wie kann ich das Problem lösen, wenn es bereits passiert ist?
Dem lästigen Ding mit diesem Fehler ist, dass es nicht automatisch gehen Weg, sobald das problem gelöst wurde, möglicherweise, weil IB kann caching etwas wie Gerd schlägt in seiner Antwort.
Was ich gefunden habe ist, dass sobald Sie tatsächlich durchgeführt wird, eines der beiden vorbeugende Maßnahmen, die ich oben aufgelistet, einfach Neustart von Xcode (ohne ändern der Codes) sollte der Fehler Weg gehen.
Habe ich endlich die Lösung gefunden. Juste hinzufügen "-Rahmen XCTest", um Ihre test-target unter Build-Settings /other linker flags.
Dieses Problem kann auch dadurch verursacht werden, einschließlich der Kategorien oder Erweiterungen an den view-Klasse in den test-target.