Escritura de Aplicaciones Swift con el SDK de Cliente iOS

Para desarrollar aplicaciones móviles iOS, utilice el SDK de cliente iOS y los lenguajes de programación Swift y Objective-C.

Utilizando IDE de Xcode:

  1. Agregue los archivos de cabecera de puentes.
  2. Agregue las bibliotecas y los archivos de cabecera de SDK.
  3. Agregue el indicador Objective-C linker.
  4. Compile y enlace la aplicación con el SDK del cliente iOS como lo haría con cualquier otro proyecto de iOS en Xcode. El uso del SDK con Swift tiene todas las mismas dependencias que el SDK con el contenedor de objetos.

Agregar el archivo de cabecera de puente

Debe utilizar un archivo de cabecera de puente para importar los archivos de cabecera de las clases públicas Objective-C que la aplicación Swift llama. Todas las clases públicas disponibles en el SDK del cliente de Oracle Mobile Hub se pueden encontrar en la carpeta include del SDK.

Para crear un archivo de cabecera de puente en Xcode:

  1. Seleccione Archivo > Nuevo... > Archivo... y, a continuación, en iOS/Origen , elija Cabecera utilizando el icono .h . Puede dar un nombre al archivo de cabecera de puentes que elija.
    En función de las clases SDK que utilice su aplicación, el contenido debería ser similar al siguiente:
    #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. Después de crear el archivo de cabecera, anote la ubicación del archivo en Configuración de Creación para el valor Objective-C Bridging Header.
    Es mejor mantener la ubicación de cabecera especificada en relación con el proyecto, en lugar de una ruta de acceso absoluta, en caso de que el proyecto sea compartido.

Agregar Cabeceras y Bibliotecas de SDK a una Aplicación Swift

El juego de cabeceras y bibliotecas que agregue depende de cuáles de las bibliotecas estáticas de SDK de cliente que incluya en su aplicación. Como mínimo, necesita las bibliotecas libOMCCore.a y libIDMMobileSDK.a.

Para agregar las cabeceras y bibliotecas SDK:
  1. Descargue y descomprima el SDK de Oracle Mobile Hub.
  2. Desde la ubicación en la que ha descomprimido los archivos SDK, arrastre las bibliotecas y los archivos de cabecera que desee al proyecto Swift en Xcode.
    El contenido de las bibliotecas SDK se organiza de forma jerárquica por categoría, por lo que tendrá que arrastrar las carpetas completas para mantener las inclusiones de otras cabeceras.
  3. En la configuración de Build Phases (Fases de creación), agregue las bibliotecas estáticas más los marcos de iOS que requiera la biblioteca IDM al enlace con la fase de bibliotecas binarias .
  4. Agregue los archivos de cabecera a la ruta de búsqueda. En la configuración del proyecto, configure Header Search Paths para incluir la ubicación del directorio principal de las carpetas SDK, es decir, el directorio principal de libOMCCore.a, libIDMMobileSDK.a, etc. Asegúrese de utilizar una ruta relativa al proyecto.
  5. Edite el archivo de cabecera de puentes para incluir los archivos de cabecera que necesita realmente para su código.
    Esto significa que también necesitará agregar cabeceras que utiliza la clase que desea utilizar.
    Por ejemplo, para asegurarse de que se puede acceder a todos los métodos de OMCAuthorization.h, también deberá agregar OMAuthView.h, OMCUser.hOMDefinitions.h. Sin estos archivos en el archivo de cabecera de puentes, algunos métodos y propiedades de OMCAuthorization no serán visibles, y el compilador no le avisará de errores.

Usar Objetos de SDK en Aplicaciones Swift

Las reglas para convertir de Objective-C a Swift se describen correctamente en la documentación de Apple. Para obtener información general sobre la relación y el uso de estos dos idiomas juntos, asegúrese de estar allí.

Vea lo siguiente:

  • La función de terminación automática del editor de códigos en Xcode funciona normalmente lo suficiente para obtener las asignaciones. Sin embargo, a veces coloca una etiqueta en el primer parámetro que no debería estar ahí. Observarlo si utiliza la terminación automática.

  • Cuando se vuelven a activar los métodos Objective-C init a Swift, se obtienen con la sintaxis del inicializador Swift nativo. Esto significa que el prefijo init se desglosa y se convierte en una palabra clave para indicar que el método es un inicializador. Consulte la documentación de Apple para obtener más información.

  • Preste especial atención a las especificaciones de los parámetros opcionales ! y ?, así como a cualquier tipo parametrizado en las declaraciones. Los tipos opcionales los determina de modo automático el compilador al asignar Objective-C a Swift.

Debería poder compilar y ejecutar la aplicación móvil con Swift y el SDK del cliente de Oracle Mobile Hub tanto en el simulador Xcode como en un dispositivo real.

A continuación se muestra un ejemplo de Objective-C y el código Swift comparable que utiliza el SDK del cliente de Oracle Mobile Hub.

El siguiente código Objective-C para registrar un token de dispositivo para notificaciones push:

// 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
	}) ;
}];

se puede escribir de la siguiente forma en Swift:

@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);
	};
}