使用 iOS 從屬端 SDK 撰寫 Swift 應用程式

您可以使用 iOS 從屬端 SDK 和 Swift 和 Objective-C 程式設計語言來開發 iOS 行動應用程式。

使用Xcode IDE:

  1. 新增橋接標頭檔案。
  2. 新增 SDK 標頭檔案和程式庫。
  3. 新增 Objective-C 連結器旗標。
  4. 使用 iOS 從屬端 SDK 編譯並連結應用程式,就像您使用 Xcode 進行的任何其他 iOS 專案一樣。使用 SDK 搭配 Swift 時,具有與使用 SDK 搭配 Objective-C 相同的所有相依性。

新增橋接標頭檔案

您必須使用橋接標頭檔案來匯入您 Swift 應用程式呼叫之 Objective-C 公用類別的標頭檔案。您可以在 SDK 的 include 資料夾中找到Oracle Mobile Hub 從屬端 SDK 中所有可用的公開類別。

在 Xcode 中建立 bridging 標頭檔案:

  1. 選取檔案 > 新建。。。 > 檔案。。。,然後使用.h 圖示從 iOS/Source 選擇標頭檔案。您可以為選擇的標頭檔案指定橋接標頭檔案。
    視應用程式使用的 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.alibIDMMobileSDK.a 的父項目錄等等。請確定使用的是專案的相對路徑。
  5. 編輯橋接標頭檔案,以包含您實際需要用於程式碼的標頭檔案。
    這表示您也需要新增想要使用之類別所使用的標頭。
    例如,若要確定可以存取OMCAuthorization.h的所有方法,您也需要新增OMAuthView.hOMCUser.hOMDefinitions.h。在橋接標頭檔案中沒有這些檔案,將看不到 OMCAuthorization 的某些方法和特性,編譯器將不會警告您發生錯誤。

在 Swift 應用程式中使用 SDK 物件

下文件中說明從 Objective-C 轉換成 Swift 的規則。如需這兩種語言之關係與用途的一般資訊,請務必查看這裡。

監看下列項目:

  • Xcode 中「程式碼編輯器」的自動完成功能通常十分有效率,可讓您取得對應。然而,有時會將標籤放在第一個不應該存在的參數中。如果您使用自動完成,請進行監看。

  • 當 Objective-C init 方法進入 Swift 時,就會採用原生 Swift 初始設定元語法。這表示 init 前置碼會被切割並成為關鍵字,以指示方法為初始設定元。請參閱 Apple 文件瞭解完整的詳細資訊。

  • 請特別注意可選參數設定,以及宣告中的任何參數類型。將 Objective-C 對應至 Swift 時,編譯器會自動決定選擇性類型。

您必須能夠在「Xcode 模擬器」和實際裝置上使用 Swift 和Oracle Mobile Hub 從屬端 SDK 來編譯及執行行動應用程式。

以下是使用Oracle Mobile Hub 從屬端 SDK 之 Objective-C 與可比較 Swift 代碼的範例。

註冊推送通知之裝置記號的下列 Objective-cc 代碼:

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