Xamarin iOS Bindings Objective-C

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

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

主題

如何在Xamarin引用原生Objective-CClassLibrary所產生出來的a

文章簡介

透過此篇文章步驟式的解說,你將能清楚的知道如何Visual StudioXamarin.iOS專案當中XCode建立Objective-CClassLibrary,透過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 Libraryjar

首先我們先利用XCode建立一個Objective-C Class LibraryProject所以我們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.iOSiPhone專案範本,這邊採用預設名稱App1,接著點選確定。

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


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



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



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


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



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



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


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


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

回到Mac當中,繼續使用命令列工具首先切換所在的資料夾讓等等產出檔案到此路徑資料夾中,鍵入cd Desktop/TestClassLibrary。接著確認一下目前的XcodeSDK版本,鍵入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