您的位置:首页 > 移动开发 > Objective-C

[Xamarin.iOS] 如何引用Objective-c寫的Class Library (转帖)

2013-11-26 21:46 411 查看
這個範例是如何在Xamarin.ios中去使用一個我們自行在Xcode中開發的Objective-c Class Library.

主要會執行的步驟如下

1. 在Xcode 裡面去建立一個Class Library

2. 編譯這個Class Library讓他同時支援IOS Device與 iOS simulator

3. 使用Objective Sharpie Tool建立Matadata

4. 在Xamarin中建立IOS Binding Project

5. 在Xamarin IOS APP 專案中參考 IOS Binding Project.

[b]1. X-Code裡面建立一個Static class Library .[/b]


[b]1.1xode裡面建立一個Static class Library , 命名為[sharecode][/b]



n 在sharecode.h檔案中宣告一個名稱為test的方法,並且讓這個方法回傳一個NSString



[b]sharecode.h[/b]



#import <Foundation/Foundation.h>

@interface sharecode : NSObject{}


- (NSString *)test;

@end

n 在sharecode.m檔案中實作這個 - (NSString *)test 方法,讓他回傳一個字串


[b]sharecode.m[/b]



#import "sharecode.h"



@implementation sharecode



-(NSString *) test{



return @"Hello Binding";



}



@end



[b]1.2命令提示字元介面中以Xcodebuild編譯這個專案[/b]

[b]預設static library編譯後只能給ARM架構 的IOS Device 執行, 由於iOS模擬器屬於X86架構, 因此需要再編譯一份程式[/b]

[b]讓模擬器執行. 請在終端機介面中用xcodebuild指令來產生相對應的檔案[/b]

[b]n 產生iOS simulator 用的檔案[/b]

[b][b]xcodebuild -sdk iphonesimulator -configuration Debug[/b][/b]

[b][b]n 產生 IOS Device 用的檔案[/b][/b]

[b][b]xcodebuild -sdk iphoneos -arch armv7 -configuration Debug[/b][/b]

[b][b][b][b]1.3使用lipo指令將.a檔案包成一個單一檔案[/b][/b][/b][/b]

[b][b][b][b]將上一個步驟產生出來的檔案透過lipo指令打包成一個單一檔案.範例程式請參考下方[/b][/b][/b][/b]

[b][b][b][b]lipo -create -output libsharecode.a libsharecode-armv7.a libsharecode-i386.a[/b][/b][/b][/b]

[b][b][b][b]lipo -create -output test.a ./build/ Debug-iphoneos/ libtest.a ./build/Debug-iphonesimulator/ libtest.a[/b][/b][/b][/b]

[b][b][b][b][b][b]2. 使用Objective Shapie tool建立標頭檔[/b][/b][/b][/b][/b][/b]


[b][b][b][b][b][b]2.1 下載objective sharpie tool.[/b][/b][/b][/b][/b][/b]



[b][b][b][b][b]n 請到下方網址下載objective sharpie tool.[/b][/b][/b][/b][/b]


[b][b][b][b][b]http://files.xamarin.com/~abock/ObjectiveSharpie/ObjectiveSharpie-0.4.11.zip[/b][/b][/b][/b][/b]

[b][b][b][b][b]n 下載完成後開啟[b]objective shapie, 在Target SDK裡面選擇你的APP要支援的版本[/b][/b][/b][/b][/b][/b]

[b][b][b][b][b]

[/b][/b][/b][/b][/b]

[b][b][b][/b][/b][/b]

[b][b][b][b][b][b]2.2 選擇Header File[/b][/b][/b][/b][/b][/b]

[b][b][b][b][b]這個步驟要去選擇到我們在Xcode裡面開發的class library [sharecode] 裡面的interface檔案.[Sharecode.h][/b][/b][/b][/b][/b]

[b][b][b][b][b]選擇完畢後按[Next]進到下一步.[/b][/b][/b][/b][/b]

[b][b][b][b][b]

[/b][/b][/b][/b][/b]

[b][b][b][b][b]

[/b][/b][/b][/b][/b]

[b][b][b][/b][/b][/b]

[b][b][b][b][b][b]2.3指定Namaspace.[/b][/b][/b][/b][/b][/b]

[b][b][b][b][b]這裏需要指定namespace名稱 , 在後面Xamarin.ios專案會依據這個namespace來參照到你的Class library..[/b][/b][/b][/b][/b]

[b][b][b][b][b]

[/b][/b][/b][/b][/b]

[b][b][b][/b][/b][/b]

[b][b][b][b][b][b][b]2.4 儲存metadata檔案.[/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b]指定Namespace後, Objective sharpie會自動建立一個Metadata檔案.這時選擇你想要儲存的地方來儲存這的檔案.[/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b]

[/b][/b][/b][/b][/b][/b]

[b][b][b][b][/b][/b][/b][/b]

[b][b][b][b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b]3. 建立Xamarin IOS binding project[/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b]3.1Xamarin裡面新建一個IOS Binding專案[/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b]這個專案是用來Binding用Xcode開發出來的Class Library. 在建立Xamarin專案時選擇Xamarin >> New >> IOS >> IOS[/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b]Binding Project[/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b]

[/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b]3.2調整iOS Binding 專案[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b]3.2.1 修改 ios xcode binding 專案的ApiDefinition.cs[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b]將剛剛由Objective sharpie幫我們建立的Matadata檔案內容複製到ios xcode binding裡面的ApiDefinition.cs[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b]3.2.2 ApiDefinition.cs檔案中有兩個地方要做修正.[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b][b]3.2.2.1 刪除 [Export] 裡面的 Verify片段.[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b][b]Verify ("ObjC method massaged into getter property", "/Users/benlu/Projects/Xamarin_ios_lab/BindingObjective-c/sharecode/sharecode/sharecode.h", Line = 15)[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b]

[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b]刪除後的結果如下:[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b]

[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b][b]3.2.2.2. 確認在Public partial interface 後面的名稱大小寫與我們在Xcode 中建立的Class library名稱是一樣的.[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]3.3IOS Binding專案中把Xcode class library中編譯 .a的專案加進來然後編譯這個專案[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]4. 建立Xamarin IOS 專案[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]4.1Xamarin裡新建一個IOS iPhone專案[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]這邊選擇Xamarin >> New >> IOS >>IPhone storyboard >>Single View Application[b],[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]然後在Xamarin專案裡面將IOS Binding project 中的dll檔案加進參考[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]

[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]4.2 這時就可以在Xamarin IOS iPhone 專案裡面參考並使用在Xcode中開發的objective-c class library[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]

[b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b][b]

[/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b][/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: