wake-up-neo.com

Verbinden Sie das Objective C-Framework mit der Swift iOS 8-App (Parse-Framework)

Ich versuche, ein Objective C-Framework mit der Programmiersprache Swift= für iOS 8 zu verwenden. Dies ist ein spezieller Fall eines Imports, aber das allgemeine Problem ist:

Wie importieren Sie ein Objective C-Framework in Swift und lassen den Import erkennen?

Ich versuche, das Parse-Framework mit den Betas für iOS 8 und Xcode 6 in eine Swift) -Anwendung zu integrieren.

Hier ist die Technik für die Parse-Framework-Integration in Objective C:

https://www.parse.com/apps/quickstart#social/mobile/ios/native/existing

Ich habe das Parse-Framework als komprimiertes Archiv heruntergeladen, es extrahiert und problemlos in Xcode 6 importiert. In meiner Anwendung wird es als ordnungsgemäß formatiertes Framework unter dem Namen Parse.framework angezeigt.

Mein aktueller Denkprozess besteht darin, die Datei AppDelegate.Swift Im Stammverzeichnis meines Projekts zu ändern. Hier ist die aktuelle Datei ohne Änderungen (automatisch von Xcode bei der Swift Projekterstellung) generiert):

https://Gist.github.com/fconcklin/e8ef7d8b056105a04161

Ich habe versucht, eine Analyse zu importieren, indem ich die Zeile import Parse Unter der Zeile import UIKit Einfügte. Xcode gibt jedoch eine Warnung aus, dass kein solches Modul gefunden wurde und die Erstellung fehlschlägt.

Ich habe auch versucht, eine Datei ${PROJ_NAME_HERE}-Bridging-Header.h Zu erstellen, die den Objective C-Import von Parse mit import <Parse/Parse.h> Enthält. Diese Zeile wirft keinen Fehler, scheint aber letztendlich keinen Unterschied zu machen.

Danke im Voraus. Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

49
user284244

Ein "narrensicherer" Weg zum Hinzufügen eines Überbrückungs-Headers ist wie folgt:

Wenn Sie ein Swift -Projekt haben, fügen Sie Ihrem Projekt ein neues Objective-C-Datei hinzu, und Xcode fordert Sie auf, Ihr Projekt mit einem Überbrückungsheader zu konfigurieren. Drücken Sie auf Ja.

Wenn Sie ein Objective-C -Projekt haben, fügen Sie ein neues Swift File hinzu, und Sie erhalten dieselbe Eingabeaufforderung. Drücken Sie auf Ja.

Nachdem Sie den Überbrückungsheader erhalten haben, können Sie die soeben hinzugefügte Datei löschen, wenn Sie möchten.

48
Jack

Nach weiteren Recherchen fand ich die Lösung und stellte fest, dass ich nur verwirrt war.

Der richtige Ansatz lautet wie folgt:

  • Importieren Sie Ihr Objective C-Framework, indem Sie das Framework in ein Xcode 6 Swift - Projekt ziehen und dort ablegen.

  • Erstellen Sie eine neue Objective C-Datei in Ihrem Projekt (Datei-> Neu-> Datei [Objective C für iOS]).

  • Akzeptieren Sie die Aufforderung (zustimmen), um eine Überbrückungsheaderdatei zwischen Objective C und Swift zu erstellen.

  • Löschen Sie Ihre neu erstellte Objective C-Datei, behalten Sie jedoch die Bridging-Header-Datei ${YOURPROJ}-Bridging-Header.h.

  • Importieren Sie in der Bridging-Header-Datei Ihr Framework mit der Standard-Importsyntax Objective C (z. B. #import <Parse/Parse.h>).

  • Dadurch entfällt die Notwendigkeit, eine import Parse Aussage in Ihrem AppDelegate.Swift Datei. Sie können jetzt Code schreiben, der jedes Framework verwendet, solange er mit dem Bridging-Header importiert wird. Es ist in allen Swift - Dateien Ihres Projekts verfügbar.

Wenn Sie nun die Parse-Integration in Ihr Projekt testen möchten, können Sie Parse. und verwenden Sie die Codevervollständigung, um das Framework zu durchsuchen und festzustellen, ob die Codevervollständigung auf einen erfolgreichen Import hinweist.

Es gibt jedoch eine weitere Einschränkung, die bei Verwendung einer Bridging-Header-Datei behoben werden muss. Alle Abhängigkeiten des Frameworks müssen ebenfalls in der Bridging Header-Datei angegeben werden. Wenn Sie das Parse-Framework in eine Swift) -Anwendung integrieren, sieht Ihre Bridging-Header-Datei folgendermaßen aus:

 #import <Foundation/Foundation.h>

 // Parse Dependencies
 #import <AudioToolbox/AudioToolbox.h>
 #import <CFNetwork/CFNetwork.h>
 #import <CoreGraphics/CoreGraphics.h>
 #import <CoreLocation/CoreLocation.h>
 #import <MobileCoreServices/MobileCoreServices.h>
 #import <QuartzCore/QuartzCore.h>
 #import <Security/Security.h>
 #import <StoreKit/StoreKit.h>
 #import <SystemConfiguration/SystemConfiguration.h>

 // Import parse framework
 #import <Parse/Parse.h>

Hoffe das hilft.

72
user284244

So fügen Sie dem Swift - Projekt das Parse - Framework hinzu: Fügen Sie diese Bibliotheken dem Swift - Projekt hinzu.

enter image description here

Fügen Sie diese Frameworks von ParseSDK in Ihr Projekt ein:

enter image description here

Fügen Sie einen ProjectName-Bridging-Header.h ( https://developer.Apple.com/library/ios/documentation/Swift/conceptual/buildingcocoaapps/MixandMatch.html ) ( https://stackoverflow.com/a/24272431/1847511 ) Datei mit diesem Inhalt.

enter image description here

Pfad zum Binden des Bridging-Headers hinzufügen:

enter image description here

Fügen Sie den TestCode hinzu:

enter image description here

Führen Sie die App aus.

9
Naloiko Eugene

Die Antwort für mein Problem war anders. Ich hatte die Framework-Suchpfade in den Build-Einstellungen meines Projekts auf rekursiv gesetzt , als sie hätten sein sollen nicht rekursiv .

In meinem Fall sind für mein Ziel die Framework-Suchpfade auf $ (geerbt) festgelegt, was bedeutet, dass die Einstellung von meinem Projekt geerbt wird.

Die Framework-Suchpfade meines Projekts hatten nur einen Pfad: $ PROJECT_DIR /../ External/** (Die beiden Sternchen bedeuten "Diesen Ordner rekursiv durchsuchen". My Parse.framework = Datei befand sich in der Basisebene des externen Ordners.

Ändern des Pfads von rekursiven zu nicht rekursiven festen Dingen für mich. Sehr eigenartig...

2
aleclarson

Die neue Parse-Framework-Version muss aktualisiert werden.

Zum Beispiel sollten Sie libsqlite3.0.dylib in Library Binary With Libraries einfügen und die Header-Datei mit #import und #import aktualisieren

1
Durul Dalkanat

Verwenden von Objective-C-Klassen in Swift

Wenn Sie Code innerhalb eines App-Ziels importieren (Mischen von Swift und Objective-C in einem Projekt), sollten Sie die Datei bridging header Verwenden, um Objective-C-Code für Swift Code verfügbar zu machen. [Mischen von Swift - und Objective-C-Code in einem Projekt]

In diesem Beitrag werde ich beschreiben, wie Objective-C-Framework in Swift Code importiert wird

Schneller Consumer -> Objective-C Dynamic Framework

Xcode Version 10.2.1

Erstellen Sie ein Objective-C-Framework

Erstellen Sie ein Framework-Projekt oder ein Framework-Ziel

File -> New -> Project... -> Cocoa Touch Framework
//or
Project editor -> Add a Target -> Cocoa Touch Framework

Es werden zwei Dateien generiert:

  1. Info.plist - Build Settings -> Info.plist File
  2. <product_name>.h - Build Phases -> Headers. Es ist Umbrella-Header-Datei [Über]

Fügen Sie alle .h - Dateien zu der Umbrella-Datei hinzu, die für den Verbraucher geöffnet wird

#import "header_1.h"
#import "header_2.h"

Implementierungsdateien hinzufügen .m

Select `.m` file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files

Fügen Sie Header-Dateien .h Hinzu, die in <product_name>.h (header_1.h, header_2.h) [kann es nicht tun][öffentliche Zielmitgliedschaft]

Select `.h` file -> Select File Inspectors Tab -> Target Membership -> Select the target and make it **public**
//or
Project editor -> select a target -> Build Phases -> Headers -> add files to the **public** zone

Bauen Sie das Framework - ⌘ Command + B oder Product -> Build

Anmerkung: Stellen Sie sicher, dass Sie das Framework für dieselbe Prozessarchitektur wie den Clientcode erstellen.

Find generated output [Standort erstellen]

Products group -> <product_name>.framework -> Show in Finder

Das Framework beinhaltet

  • Info.plist
  • Modules Ordner mit:
  • Headers Ordner mit:
    • dateien aus dem Abschnitt Headers. Es gibt öffentliche Schnittstellen/Definitionen

Verwenden des Objective-C-Frameworks

Drag and drop Die Binärdatei in das Xcode-Projekt [Über]

Embed binaries[Bibliothek nicht geladen][Link vs Embed]

Project editor -> select a target -> General -> Embedded Binaries -> path to `<product_name>.framework` file

Ich werde das Framework automatisch hinzufügen zu:

  1. Project editor -> select a target -> General -> Linked Frameworks and Libraries
  2. Project editor -> select a target -> Build Phases -> Embed Frameworks
  3. Project editor -> select a target -> Build Phases -> Link Binary With Libraries

Addiere Framework Search paths[Modul nicht gefunden][Rekursiver Pfad]

Project editor -> select a target -> Build Settings -> Search Paths -> Framework Search paths -> add path to the parent of `<product_name>.framework` file

Modul in den Swift Client Code importieren [Modulname]

import module_name

Weitere Beispiele hier

0
yoAlex5