Xamarin iOS Bindings Objective-C

如何在Xamarin中引用原生Objective-C的ClassLibrary所產生出來的a檔

James Tsai 2015/10/31 23:55:12
2138

主題:

如何在Xamarin中引用原生Objective-C的ClassLibrary所產生出來的a檔。

文章簡介:

透過此篇文章步驟式的解說,你將能清楚的知道如何在Visual Studio的Xamarin.iOS專案當中,將從XCode建立Objective-C的ClassLibrary,透過Bindings的機制來使用其所產生出來的a檔。

作者:

James Tsai

版本/產出日期:

V1.0/2015.10.30

1. 前言

• 常常會遇到有人在從iOS原生開發(Objective-C)轉移到Xamarin.iOS開發時,有需要將過去開發好的iOS Class Library直接匯入到Xamarin.iOS底下使用,讓專案可以更加快速的完成,其過程常常會讓人有點困惑,所以再透過本篇文章詳細的介紹一下其步驟,讓大家更能夠掌握其中的訣竅。


2. 環境準備

• Windows 8/8.1/10

• MacOS X EI

• Visual Studio 2015

• XCode

• Objective Sharpie

3. 本文

在Eclipse中製作Android Class Library的jar檔

• 首先我們先利用XCode建立一個Objective-C Class Library的Project。所以我們在XCode的啟動歡迎畫面當中,選擇Create a new XCode project。



• 點選iOS底下的Framework & Library後,選取Cocoa Touch Static Library後點選Next。



• 在Choose options for your new project的對話窗中,在Product Name的輸入框當中鍵入TestClassLibrary,點選Next。



• 選取要儲存的位置後,點選Create。




• 專案建立完成後的專案長相。





• 接著在左邊的側邊欄,點選預設生成的一個TestClassLibrary.h檔。




• 在此TestClassLibrary.h檔當中鍵入我們所設計的兩個公開的靜態方法。供之後若引用此ClassLibrary的專案可以呼叫。




• 接著打開對應的TestClassLibrary.m檔。




• 鍵入所需的程式碼,完成兩個公開的靜態方法的實作。



• 在專案設定當中的Code Signing先設定為iOS Developer。




• 完成後選取選單當中的Product->Build For->Running。




• 如果程式沒有錯誤的話,就會看到Build Succeeded的訊息一閃而過。




• 接著直接在Xcode左側的側邊欄,展開Products點選該libTestClassLibrary.a檔。再到Xcode右側的側邊欄,點選小箭頭,打開該.a檔所在的位置。



• 看到Finder打開,應該就可以看到我們終於製作出libTestClassLibrary.a可以讓應用專案使用。



• 但注意,預設這個是給Device用的.a檔,若要特別給模擬器使用的.a檔,要到上一層的iphonesimulator的資料夾當中找到該.a檔。


在Visual Studio建立Xamarin.iOS專案與BindingsLibrary(iOS)專案

• 在新增C#專案的範本當中,選到Xamarin.iOS的iPhone專案範本,這邊採用預設名稱App1,接著點選確定。

• 接著在方案總管當中,找到新增好的方案檔上按右鍵選單,新增一個新的專案。


• 在專案範本當中,選到BindingsLibrary(iOS)的範本後,將此專案取名為MyBindingsClassLibrary後,點選確定。



• 新增完成後在方案總管當中的呈現。



• 在新增好的BindingsLibrary專案當中,在專案檔上面右鍵選單,選到加入->現有項目。


• 選到剛剛在前一步驟建立的a檔。



• 加入後在專案當中呈現狀況。



• 調整該a檔屬性當中的建置動作(Build Action)為ObjcBindingNativeLibrary、ObjcBindingNativeLibrary、ObjcBindingNativeLibrary。(很重要所以說三次)


• 在MyBindingsClassLibrary的專案檔上右鍵選單,點選建置。


透過Objective Sharpie轉換C#的程式宣告檔

• 回到Mac當中,繼續使用命令列工具。首先切換所在的資料夾讓等等產出檔案到此路徑資料夾中,鍵入cd Desktop/TestClassLibrary。接著確認一下目前的Xcode的SDK版本,鍵入sharpie xcode –sdks。再接著鍵入轉換的指令sharpie bind -output TestClassLibrary -namespace TestClassLibrary -sdk iphoneos9.1 ./TestClassLibrary/*.h (下圖當中的三個紅色框)

• 所以在TestClassLibrary的資料夾當中,就會產生ApiDefinitions.cs檔。




• 再將產生的ApiDefinitions.cs當中的程式碼複製,取代原本我們專案當中的ApiDefinitions.cs程式碼。畫面如下:



• 接著我們回到App1專案當中在參考上右鍵選單,選擇加入參考。


• 在參考管理員的對話視窗當中,點選專案當中的方案,勾選MyBindingsClassLibrary,後點選確定。


• 加入參考完成後的狀態。



• 接著我們直接打開AppDelegate.cs,來撰寫測試程式碼。


程式撰寫使用

直接在C#中撰寫相關的呼叫程式,順利完成!!!。

4. 參考來源

• Walkthrough: Binding an Objective-C Library

http://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/Walkthrough_Binding_objective-c_library/

• Objective Sharpie

http://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/objective_sharpie/

James Tsai