使用 iOS 客户机 SDK 写入 Swift 应用程序

您可以使用 iOS 客户机 SDK 和 Swift 和 Objective.sql 编程语言开发 iOS 移动应用程序。

使用 Xcode IDE:

  1. 添加桥接程序标头文件。
  2. 添加 SDK 标头文件和库。
  3. 添加 ObjectiveIops 链接器标记。
  4. 编译并使用 iOS 客户机 SDK 关联应用程序,就像在 Xcode 中使用任何其他 iOS 项目一样。将 SDK 与 Swift 配合使用时所有相同的相关性与将 SDK 与 Objective-C。

添加过渡标头文件

您需要使用桥接头文件来导入 Swift 应用程序调用的 Objective-C public 类的头文件。Oracle Mobile Hub 客户机 SDK 中的所有可用公共类都可以在 SDK 的 include 文件夹中找到。

要在 Xcode 中创建桥接程序头文件,请执行以下操作:

  1. 选择文件 > 新建 ... > 文件 ...,然后从 iOS/源中选择使用.h 图标的标题文件。可以为所选的任何名称指定桥接程序标头文件。
    根据您的应用程序使用的 SDK 类,内容应如下所示:
    #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. 在创建标题文件之后,请记下该文件在构建设置中的 Objective-C Bridging Header 设置的位置。
    最好保留指定的相对于项目的标头位置,而不是绝对路径(在共享项目时)。

将 SDK 标头和库添加到 Swift 应用程序

您添加的标头和库集取决于您在应用程序中包含的客户机 SDK 的静态库。至少需要libOMCCore.alibIDMMobileSDK.a 库。

要添加 SDK 标头和库,请执行以下操作:
  1. 下载并解压缩Oracle Mobile Hub SDK。
  2. 从解压缩 SDK 文件的位置,将库和标头文件拖到 Xcode 中的 Swift 项目中。
    SDK 库的内容按类别分层排列,因此您需要在整个文件夹上拖动以保留其他标头包含。
  3. 构建阶段设置下,添加静态库以及 IDM 库所需的 iOS 框架到“使用二进制库链接 ”阶段。
  4. 将标头文件添加到搜索路径。在项目设置下,配置 Header Search Paths 以包含 SDK 文件夹的父目录(即libOMCCore.a的父目录、libIDMMobileSDK.a 等)的位置。确保使用项目的相对路径。
  5. 编辑桥接程序标头文件以包括代码实际需要的标头文件。
    这意味着您还需要添加由要使用的类使用的标头。
    例如,要确保所有OMCAuthorization.h方法都可以访问,还需要添加OMAuthView.hOMCUser.hOMDefinitions.h。在桥接程序标头文件中没有这些文件时,一些 OMCAuthorization 的方法和属性将不可见,编译器不会向您发出错误。

在 Swift 应用程序中使用 SDK 对象

在 Apple 文档中描述了用于从 Objective.sql 转换为 Swift 的规则。有关这两种语言的关系和用法的一般信息,请确保您在此外观。

观看下列内容:

  • Xcode 中代码编辑器的自动完成功能通常足以充分利用映射。但是,有时它会将一个标签放入第一个不应该位于该位置的参数中。如果您正在使用自动完成功能,请观看此功能。

  • 当 Objective-C init 方法超过 Swift 时,它们将采用本机 Swift 初始化程序语法。这意味着将 init 前缀关闭并变为关键字,以指示该方法是初始化程序。有关完整详细信息,请参阅 Apple 文档。

  • 请特别注意!?可选参数规范,以及声明中的任何参数化类型。将 Objective.sql 映射到 Swift 时,编译器会自动确定可选类型。

您应当能够在 Xcode 模拟器和实际设备上使用 Swift 和Oracle Mobile Hub 客户端 SDK 编译和运行移动应用。

下面是 Objective-C 的示例以及使用Oracle Mobile Hub 客户机 SDK 的可比较的 Swift 代码。

用于注册用于推送通知的设备标记的以下 Objective-C 代码:

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

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