2014-06-05 22 views
34

Ich erkunde Swift mit Xcode-6 und so weit so gut, obwohl ich denke, dass die neuen Sammlungen ein wenig Arbeit brauchen, da ich es geschafft habe, den Compiler ein paar Mal zu brechen.Gebäude reines Swift Cocoa Touch Framework

Problem ist, ich bin jetzt in einem anderen das Rahmenpaket dann erstellen verwendet Projekt stecken versuchen. Das Projekt wird ohne Probleme erstellt, und alle Tests werden erfolgreich bestanden. Wenn ich gehe, Archive zu erstellen (was ich davon ausgehen, ist das, was erforderlich ist) ich die Fehlermeldung:

:0: error: underlying Objective-C module 'Sample' not found

Jetzt nehme ich dies etwas mit dem Inhalt meines Sample.h zu tun hat, die mir

// In this header, you should import all the public headers of your framework using statements like #import <Sample/PublicHeader.h> 
erzählt

das ist in Ordnung, außer ich habe nur Swift Enums, Strukturen und Klassen für dieses Framework verwendet, daher keine .h-Dateien existieren.

Kann jemand etwas Licht auf dieses eine werfen, wie ich keine vorhandene Dokumentation finden kann?

+0

Warum Archivrahmen? – vladof81

+0

Haben Sie versucht, ein reines Swift-Framework-Projekt zu erstellen und dieses aus einer Client-App im selben Arbeitsbereich zu verwenden? Wenn ja, hat es funktioniert? – Omer

Antwort

25

Ich setzte mich mit einem Ingenieur und fragte genau diese Frage. Dies war ihre Antwort:

Xcode 6 unterstützt derzeit keine verteilbaren Swift-Frameworks und Apple wird diese Funktionalität wahrscheinlich erst dann in Xcode einbauen, wenn es für sie vorteilhaft ist. Momentan sind Frameworks eher in das Projekt Ihrer App eingebettet als verteilt. Wenn Sie sich eines der Sitzungsvideos ansehen oder die Beispielprojekte sehen, ist dies immer das Arrangement. Another reason is that Swift is very new and likely to change. Thus your Swift-based framework is not guaranteed to work on the platform you originally built it on.

Geringfügige aktualisieren

Der Ingenieur erwähnt, dass es nicht unmöglich ist, einen Rahmen für die Verteilung zu machen, nur, dass es nicht unterstützt wird.

+4

Dies steht in direktem Konflikt mit Apples Dokumentation: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html – rougeExciter

+2

Diese Dokumente sind immer noch "Pre-Release", so dass es Thema ist ändern Auch haben sie nicht gesagt, dass es nicht möglich ist, ein Framework zu erstellen und es in einem separaten Projekt zu verwenden. Sie sagten nur, dass es nicht unterstützt wurde. Haben Sie versucht, ein Swift Framework-Ziel für die Verwendung in einem anderen Projekt zu erstellen? – Aaron

+0

Ja, ich habe mein Pulver trocken gehalten und versucht, die Grenzen dessen zu finden, was funktioniert und was nicht, aber im Moment läuft alles gut. Ich vermute, dass zumindest folgende Einschränkungen bestehen: Wenn sie die schnelle Sprache trotz der versprochenen Binärkompatibilität überarbeiten, müssen die Anwendung und alle ihre Frameworks mit der gleichen Binärversion erstellt werden. – rougeExciter

0

Ich denke, es ist ein Fehler in XCode 6, oder dass Apple nicht erlaubt, das Framework von XCode während der Beta zu archivieren.

Wenn Sie zum Profil kompilieren, generiert XCode das Framework korrekt. (Siehe Release-Ordner in DerivedData erstellt)

11

ich in der Lage war Vergangenheit der Fehler zu erhalten, indem für den Rahmen an das Ziel zu gehen und auf dem Build-Phasen-Registerkarte unter Headers, entfernen Sie die Datei MyFramework.h

ich jedoch bekam den Fehler "Underlying Objective-C Modul nicht gefunden", als ich ein Framework nutzte, um Code zwischen einer beinhaltenden App und einer App-Erweiterung zu teilen, die beide pure Swift waren.

Image showing MyFramework.h for the MyFramework target on the Build Phases tab under Headers

+0

Das hat mir geholfen mit dem gleichen Problem, obwohl es mir nicht wirklich sagt, was los war ... wie auch immer, danke! :) – Dschee

2

Sie diese nützlich finden könnten: Creation of pure swift module

Kurz gesagt: es ist möglich, statische Rahmen zu machen, aber es gibt ein Problem: es funktioniert nicht in Endbenutzers Projekt, wenn „ProjectName- Swift.h "Header enthalten.

Aber es funktioniert gut, wenn Sie nur schnell verwenden.

+0

Kannst du das weiter ausbauen? – OlivaresF

1

Angenommen, Sie erstellen ein wirklich reines Swift-Modul, müssen Sie den Objective-C-Kompatibilitätsheader und alle generierten Schnittstellenheader deaktivieren, damit der Compiler nicht davon ausgehen kann, ein Objective-C-Modul für das Framework zu finden.enter image description here

Nicht entfernen Sie Ihre öffentlichen Framework-Header. Sie erhalten dann eine Modulkartenwarnung zur Linkzeit, wenn Sie dies tun.

Verwandte Themen