Swift-Anwendungen mit dem iOS Client SDK schreiben

Sie entwickeln iOS-Apps mit den iOS-Client-SDK- und der Swift- und Objective-C-Programmiersprachen.

Xcode IDE verwenden:

  1. Fügen Sie die Bridge-Headerdateien hinzu.
  2. Fügen Sie die SDK-Headerdateien und Librarys hinzu.
  3. Fügen Sie das Kennzeichen "Objective-C linker" hinzu.
  4. Kompilieren und verknüpfen Sie Ihre Anwendung mit dem iOS-Client-SDK wie jedes andere iOS-Projekt im Xcode. Die Verwendung von SDK mit Swift hat alle gleichen Abhängigkeiten wie die Verwendung von SDK mit Objective-C.

Bridging-Headerdatei hinzufügen

Sie müssen eine Header-Datei mit Bridging verwenden, um die Header-Dateien der Objective-C öffentlichen Klassen zu importieren, die Ihre Swift-App aufruft. Alle verfügbaren öffentlichen Klassen im Oracle Mobile Hub-Client-SDK finden Sie im Ordner include des SDKs.

So erstellen Sie eine Bridge-Headerdatei in Xcode:

  1. Wählen Sie Datei > Neu... > Datei... , und wählen Sie dann unter iOS/Quelle mit dem Symbol .h die Option Headerdatei . Sie können den ausgewählten Namen in der Bridge-Headerdatei eingeben.
    Je nach SDK-Klassen, die Ihre App verwendet, sollte der Inhalt wie folgt aussehen:
    #ifndef GettingStartedSwift_Bridging_Header_h
    #define GettingStartedSwift_Bridging_Header_h
    
    #import "OMCCore.h"
    #import "OMCAuthorization.h"
    #import "OMCMobileBackend.h"
    #import "OMCMobileManager.h"
    #import "OMCServiceProxy.h"
    #import "OMCUser.h"
    
    #import "OMCStorage.h"
    #import "OMCMobileBackend+OMC_Storage.h"
    #import "OMCStorageCollection.h"
    #import "OMCStorageObject.h"
    
    #import "OMCSynchronization.h"
    #import "OMCMobileBackend+OMC_Synchronization.h"
    #import "OMCFetchObjectCollectionBuilder.h"
    #import "OMCMobileResource.h"
    #import "OMCSyncGlobals.h"
    
    #import "OMCAnalytics.h"
    #import "OMCMobileBackend+OMC_Analytics.h"
    
    #import "OMCNotifications.h"
    #import "OMCMobileBackend+OMC_Notifications.h"
    
    #import "OMCLocation.h"
    #import "OMCMobileBackend+OMC_Location.h"
    
    
    #endif /* GettingStartedSwift_Bridging_Header_h */
  2. Nachdem Sie die Header-Datei erstellt haben, beachten Sie den Speicherort der Datei in den Build-Einstellungen für die Einstellung Objective-C Bridging Header.
    Am besten wird der Header-Speicherort bezogen auf das Projekt und nicht als absoluter Pfad angegeben, falls das Projekt gemeinsam verwendet wird.

SDK-Header und Librarys einer Swift-App hinzufügen

Das Set der Header und Librarys, die Sie hinzufügen, hängt von den statischen Librarys des Client-SDK ab, die Sie in die App aufnehmen. Sie benötigen mindestens die Librarys libOMCCore.a und libIDMMobileSDK.a.

So fügen Sie die SDK-Header und Librarys hinzu:
  1. Laden Sie das Oracle Mobile Hub-SDK herunter, und dekomprimieren Sie es.
  2. Ziehen Sie aus dem Verzeichnis, in dem Sie die SDK-Dateien dekomprimiert haben, die Librarys und Headerdateien, die Sie in Ihrem Swift-Projekt möchten, in Xcode.
    Der Inhalt der SDK-Librarys ist hierarchisch nach Kategorie angeordnet, sodass Sie den Inhalt aller Ordner ziehen müssen, um die Aufnahme anderer Header beizubehalten.
  3. Fügen Sie unter den Einstellungen für Build-Phasen die statischen Librarys sowie die iOS-Frameworks hinzu, die von der IDM-Library für die Phase "Link mit Binär-Librarys " benötigt werden.
  4. Fügen Sie die Headerdateien zu Ihrem Suchpfad hinzu. Konfigurieren Sie unter den Projekteinstellungen die Datei Header Search Paths so, dass sie den Speicherort des übergeordneten Verzeichnisses der SDK-Ordner enthält, d.h. das übergeordnete Verzeichnis von libOMCCore.a, libIDMMobileSDK.a usw. Verwenden Sie unbedingt einen relativen Pfad zum Projekt.
  5. Bearbeiten Sie die Bridge-Headerdatei, um die Headerdateien aufzunehmen, die Sie tatsächlich für Ihren Code benötigen.
    Dies bedeutet, dass Sie auch Header hinzufügen müssen, die von der Klasse verwendet werden, die Sie verwenden möchten.
    Beispiel: Um sicherzustellen, dass alle Methoden von OMCAuthorization.h zugänglich sind, müssen Sie auch OMAuthView.h, OMCUser.h und OMDefinitions.h hinzufügen. Ohne diese Dateien in der Bridge-Headerdatei werden einige Methoden und Eigenschaften von OMCAuthorization nicht angezeigt, und der Compiler warnt Sie nicht mit Fehlern.

SDK-Objekte in Swift-Apps verwenden

Die Regeln zum Konvertieren von Objective-C in Swift sind in der Apple-Dokumentation beschrieben. Um allgemeine Informationen zu Beziehung und Verwendung dieser beiden Sprachen zusammen zu erhalten, achten Sie darauf.

Sehen Sie sich wie folgt an:

  • Die automatische Vervollständigungsfunktion des Codeeditors in Xcode ist im Allgemeinen ausreichend, um die Zuordnungen zu erhalten. In manchen Fällen wird jedoch das Label im ersten Parameter hinzugefügt, der dort nicht vorgesehen ist. Sehen Sie sich dies an, wenn Sie die automatische Vervollständigung verwenden.

  • Wenn Objective-C init-Methoden zu Swift gehen, wird der native Swift-Initialisierungsblock benötigt. Dies bedeutet, dass das Präfix init deaktiviert ist und ein Schlüsselwort wird, mit dem angegeben wird, dass die Methode ein Initialisierungsblock ist. Vollständige Einzelheiten finden Sie in der Apple-Dokumentation.

  • Beachten Sie besonders die optionalen Parameterspezifikationen ! und ? sowie alle parametrisierten Typen in den Deklarationen. Die optionalen Typen werden automatisch vom Compiler bei der Zuordnung von Objective-C zu Swift bestimmt.

Sie sollten die App mit Swift und dem Oracle Mobile Hub-Client-SDK sowohl auf Xcode Simulator als auch auf einem eigentlichen Gerät kompilieren und ausführen können.

Im Folgenden finden Sie ein Beispiel für Objective-C und der vergleichbare Swift-Code, der das Oracle Mobile Hub-Client-SDK verwendet.

Der folgende Objective-C-Code zur Registrierung eines Gerätetokens für Push-Benachrichtigungen:

// Get notifications sdk object
OMCNotifications* notifications = [[appDelegate myMobileBackend] notifications];

// Register device token with MCS server using notifications sdk
[notifications registerForNotifications:[appDelegate getDeviceTokenData]
 
onSuccess:^(NSHTTPURLResponse *response) {						  
	NSLog(@"Device token registered successfully on MCS server");						  
	dispatch_async(dispatch_get_main_queue(), ^{
	// Update UI here
	}) ;
}
 
onError:^(NSError *error) {						
	NSLog(@"Error: %@", error.localizedDescription);							
	dispatch_async(dispatch_get_main_queue(), ^{
	// Update UI here
	}) ;
}];

kann in Swift auf folgende Weise geschrieben werden:

@IBAction func registerForPushNotifications() {
	
	// Get notifications sdk object
	let notifications = appDelegate.myMobileBackend().notifications();
	
	// Get device token first, and assign it here
	let deviceTokenData:NSData! = nil;
	
	// Register device token with MCS server using notifications sdk
	notifications.registerForNotifications(deviceTokenData, onSuccess: { (response:NSHTTPURLResponse!) in
		
		NSLog("Device token registered successfully on MCS server");
		
		dispatch_async(dispatch_get_main_queue()) {
			// Update UI here
		}
		
	}) { (error) in
		
		print("Error: %@", error.localizedDescription);
	};
}