如何在Xamarin中引用原生Objective-C的ClassLibrary所產生出來的a檔
主題: |
如何在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
• Objective Sharpie
http://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/objective_sharpie/