Ecrire des applications Swift à l'aide du SDK client iOS

Pour développer des applications mobiles iOS, utilisez le SDK client iOS et les langages de programmation Swift and Objective-C.

Utilisation de l'IDE Xcode :

  1. Ajoutez les fichiers d'en-tête de pont.
  2. Ajoutez les fichiers d'en-tête et les bibliothèques SDK.
  3. Ajoutez l'indicateur de liaison Objective-C.
  4. Compilez et liez votre application à l'aide du kit SDK client iOS comme n'importe quel autre projet iOS dans Xcode. L'utilisation du kit SDK avec Swift a toutes les mêmes dépendances que l'utilisation du kit SDK avec Objective-C.

Ajouter le fichier d'en-tête Bridging

Vous devez utiliser un fichier d'en-tête de passerelle pour importer les fichiers d'en-tête des classes publiques Objective-C que vos appels d'application Swift. Vous trouverez l'ensemble des classes publiques disponibles dans le kit SDK du client Oracle Mobile Hub dans le dossier include du kit SDK.

Pour créer un fichier d'en-tête de pont dans Xcode, procédez comme suit :

  1. Sélectionnez Fichier > Nouveau... > Fichier..., puis dans le fichier iOS/Source, choisissez En-tête en utilisant l' icône .h. Vous pouvez attribuer à votre choix le fichier d'en-tête de pont.
    Selon les classes SDK utilisées par l'application, le contenu doit ressembler à ce qui suit :
    #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. Une fois le fichier d'en-tête créé, notez son emplacement dans les paramètres de construction du paramètre Objective-C Bridging Header.
    Il est préférable de conserver l'emplacement d'en-tête indiqué par rapport au projet, plutôt que par un chemin absolu, si le projet est partagé.

Ajouter les en-têtes et bibliothèques SDK à une application Swift

L'ensemble d'en-têtes et de bibliothèques que vous ajoutez dépend des bibliothèques statiques du kit SDK client que vous incluez dans votre application. Vous avez besoin au minimum des bibliothèques libOMCCore.a et libIDMMobileSDK.a.

Pour ajouter des bibliothèques et des en-têtes SDK, procédez comme suit :
  1. Téléchargez et décompressez le kit SDK Oracle Mobile Hub.
  2. A partir de l'emplacement où vous avez décompressé les fichiers SDK, faites glisser les bibliothèques et les fichiers d'en-tête vers votre projet Swift dans Xcode.
    Le contenu des bibliothèques SDK est organisé par catégorie selon une hiérarchie. Vous devrez donc faire glisser les dossiers entiers pour conserver les inclusions d'autres en-têtes.
  3. Sous les paramètres de phases de construction, ajoutez les bibliothèques statiques ainsi que les structures iOS requises par la bibliothèque IDM à la phase Lien avec bibliothèques binaires.
  4. Ajoutez les fichiers d'en-tête au chemin de recherche. Sous les paramètres du projet, configurez Header Search Paths pour inclure l'emplacement du répertoire parent des dossiers SDK, à savoir le répertoire parent libOMCCore.a, libIDMMobileSDK.a, etc. Veillez à utiliser un chemin relatif pour le projet.
  5. Modifiez le fichier d'en-tête de pont pour inclure les fichiers d'en-tête dont vous aurez réellement besoin pour votre code.
    Cela signifie que vous devrez également ajouter les en-têtes utilisés par la classe que vous voulez utiliser.
    Par exemple, pour vous assurer que toutes les méthodes OMCAuthorization.h sont accessibles, vous devez également ajouter OMAuthView.h, OMCUser.h et OMDefinitions.h. Si ces fichiers ne figurent pas dans le fichier d'en-tête de pont, certaines méthodes et propriétés d'OMCAuthorization ne seront pas visibles et le compilateur ne vous avertira pas avec des erreurs.

Utiliser des objets SDK dans les applications Swift

Les règles de conversion d'Objective-C en Swift sont correctement décrites dans la documentation Apple. Pour obtenir des informations générales sur la relation et l'utilisation de ces deux langues ensemble, assurez-vous que vous y trouvez.

Regardez les points suivants :

  • La fonction d'écriture automatique de l'éditeur de code dans Xcode fonctionne généralement assez pour vous permettre d'obtenir les mappings. Cependant, il place parfois le libellé du premier paramètre qui n'est pas supposé y figurer. Regardez cette règle si vous utilisez la saisie automatique.

  • Lorsque les méthodes Objective-C init renvoient à Swift, elles prennent la syntaxe native Swift initializer. Cela signifie que le préfixe init est réduit et devient un mot-clé indiquant que la méthode est un initialiseur. Pour plus d'informations, reportez-vous à la documentation d'Apple.

  • Prêtez une attention particulière aux spécifications de paramètres facultatifs ! et ?, ainsi qu'aux types parametrized des déclarations. Les types facultatifs sont déterminés automatiquement par le compilateur lors du mapping entre Objective-C et Swift.

Vous devez pouvoir compiler et exécuter votre application mobile à l'aide de Swift et du SDK client Oracle Mobile Hub sur le simulateur Xcode et sur un appareil réel.

Voici un exemple d'Objective-C et du code Swift comparable qui utilise le SDK client Oracle Mobile Hub.

Code Objective-C suivant permettant d'inscrire un jeton de dispositif pour les notifications 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
	}) ;
}];

peut être écrit comme suit dans 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);
	};
}