2017-01-22 5 views
1

Sagen wir, ich habe 2 Frameworks:Dependent Gerüste mit Spielplatz

  • MyApp.framework
  • FancyLabels.framework

MyApp.framework ein Storyboard hat, die Klassen von FancyLabels.framework verwendet.

Wenn ich ein App Ziel erstellen, die beide Frameworks verknüpft und einbettet, kann ich View-Controller von MyApp.framework kein Problem instanziiert.

Aber wenn ich einen View-Controller von MyApp.framework auf einem Spielplatz versuchen und instanziiert, kann es nicht die Klassen aus FancyLabels.framework finden.

Mein Spielplatz Code:

//: Playground - noun: a place where people can play 

import UIKit 
import MyApp 
import FancyLabels 

let bundle = Bundle(for: MyAppViewController.self) 
let storyboard = UIStoryboard(name: "Main", bundle: bundle) 
let vc = storyboard.instantiateViewController(withIdentifier: "MyAppViewController") 
let view = vc.view 

Die Ausgabe in der Konsole:

2017-01-22 19:18:17.016 MyPlayground[98260:3124481] Unknown class _TtC18FancyLabels11StyledLabel in Interface Builder file. 
2017-01-22 19:18:17.037 MyPlayground[98260:3124481] Failed to set (styleString) user defined inspected property on (UILabel): [<UILabel 0x7fcf175017c0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key styleString. 

Antwort

0

diese schließlich herausgefunden. Das Problem war, dass mein Framework "FancyLabels" ein vorgefertigtes Framework über Carthage (XCGLogger) verwendete. Die Lösung bestand darin, die entsprechenden Schritte zu befolgen, um ein Carthage-Framework auf einem Spielplatz zu verwenden, nämlich das Framework-Projekt von Carthage/Checkouts zu meinem Arbeitsbereich hinzuzufügen und es zu bauen. Dann funktioniert alles wie erwartet, sogar der Spielplatz, der innerhalb des Rahmenprojekts ist, mit voller Nutzung von FancyLabels in den Storyboards/xibs des MyApp-Frameworks.

Für Menschen auf diese Frage kommen, die diese bei der Einrichtung auch ohne Karthago sind strugging, ich habe ein schnelles Arbeitsbeispiel getan, wie diesen hier einzurichten: https://github.com/mfclarke/NestedFrameworksInPlaygrounds/

2

Ich kämpfe habe dies auch den besten Ansatz zu finden :(

Die beste Lösung ich habe festgestellt, ist einen leeren/leeren Arbeitsbereich zu erstellen, wo Sie Ihren Rahmen hinzufügen können (nur ziehen Sie sie in den Arbeitsbereich, wie Sie zu einem regulären Projekt hinzufügen würden) und fügen Sie dann auch die Spielplätze zum worksp As.

Statt die Spielplätze der Öffnung, Sie dann den Arbeitsbereich öffnen und den Spielplatz nutzen in diesem Kontext.

Wenn Sie den Spielplatz das erste Mal im Arbeitsbereich öffnen, erhalten Sie eine Fehlermeldung, dass das Framework nicht gefunden werden kann, aber nach dem Ausführen von build ist das Framework verfügbar.

Eine andere gotcha ist, dass, während Sie den Rahmen aus diesem Arbeitsbereich sind den Zugriff auf alle anderen Projekte den Rahmen verwendet, wird auch geschlossen werden müssen.

Wenn Sie ein Beispiel-Setup prüfen wollen, können Sie das ‚Spielplätze‘ -Ordner in meinem Projekt sehen hier: https://github.com/mathewsanders/Mustard/tree/master/Playgrounds

Würde gerne hören, wenn andere Menschen besser Ansatz gefunden haben, dass dies, weil die Beschränkung des Habens Andere Projekte zu schließen, während der Arbeitsbereich benutzt wird, ist ziemlich ärgerlich.

+0

Vielen Dank für Ihre Antwort @MathewS. Das Problem in meinem speziellen Fall war, dass das "FancyLabels" -Framework ein vorgefertigtes Carthage-Framework verwendete. Ich habe es geschafft, das zu erreichen, ohne einen leeren/leeren Arbeitsbereich zu benutzen. Sehen Sie sich den GitHub-Link in meiner Antwort an. –