原文 引用Objective-C class library
这个范例是如何在Xamarin.ios中去使用一个我们自行在Xcode中开发的Objective-c Class Library. 主要会执行的步骤如下
- 在Xcode 里面去建立一个Class Library
- 编译这个Class Library让他同时支持IOS Device与 iOS simulator
- 使用Objective Sharpie Tool建立Matadata
- 在Xamarin中建立IOS Binding Project
- 在Xamarin IOS APP 项目中参考 IOS Binding Project.
1. 在X-Code里面建立一个Static class Library
1.1在xode里面建立一个Static class Library , 命名为[sharecode]
- 在sharecode.h档案中宣告一个名称为test的方法,并且让这个方法回传一个NSString
sharecode.h
#import <Foundation/Foundation.h>
@interface sharecode : NSObject{
}
- (NSString *)test;
@end
- 在sharecode.m档案中实作这个 - (NSString *)test 方法,让他回传一个字符串
sharecode.m
#import "sharecode.h"
@implementation sharecode
-(NSString *) test{
return @"Hello Binding";
}
@end
1.2在命令提示字符接口中以Xcodebuild编译这个项目
预设static library编译后只能给ARM架构 的IOS Device 执行, 由于iOS仿真器属于X86架构, 因此需要再编译一份程序让仿真器执行. 请在终端机接口中用xcodebuild指令来产生相对应的档案
- 产生iOS simulator 用的档案
xcodebuild -sdk iphonesimulator -configuration Debug - 产生 IOS Device 用的档案
xcodebuild -sdk iphoneos -arch armv7 -configuration Debug
1.3使用lipo指令将.a档案包成一个单一档案
将上一个步骤产生出来的档案透过lipo指令打包成一个单一档案.范例程序请参考下方
lipo -create -output libsharecode.a libsharecode-armv7.a libsharecode-i386.a
lipo -create -output test.a ./build/ Debug-iphoneos/ libtest.a ./build/Debug-iphonesimulator/ libtest.a
2. 使用Objective Shapie tool建立头文件
2.1 下载objective sharpie tool
- 请到下方网址下载objective sharpie tool.http://files.xamarin.com/~abock/ObjectiveSharpie/ObjectiveSharpie-0.4.11.zip
- 下载完成后开启objective shapie, 在Target SDK里面选择你的APP要支持的版本
2.2 选择Header File 这个步骤要去选择到我们在Xcode里面开发的class library [sharecode] 里面的interface档案.[Sharecode.h] 选择完毕后按[Next]进到下一步.
2.3 指定Namaspace. 这里需要指定namespace名称 , 在后面Xamarin.ios项目会依据这个namespace来参照到你的Class library..
2.4 储存metadata档案. 指定Namespace后, Objective sharpie会自动建立一个Metadata档案.这时选择你想要储存的地方来储存这的档案.
3. 建立Xamarin IOS binding project
3.1在Xamarin里面新建一个IOS Binding项目
这个项目是用来Binding用Xcode开发出来的Class Library. 在建立Xamarin项目时选择Xamarin >> New >> IOS >> IOS Binding Project
3.2调整iOS Binding 项目
3.2.1 修改 ios xcode binding 项目的ApiDefinition.cs
将刚刚由Objective sharpie帮我们建立的Matadata档案内容复制到ios xcode binding里面的ApiDefinition.cs
3.2.2 在ApiDefinition.cs档案中有两个地方要做修正.
- 删除 [Export] 里面的 Verify片段.
Verify ("ObjC method massaged into getter property","/Users/benlu/Projects/Xamarin_ios_lab/BindingObjective-c/sharecode/sharecode/sharecode.h", Line = 15)
删除后的结果如下:
2.确认在Public partial interface 后面的名称大小写与我们在Xcode 中建立的Class library名称是一样的.
3.3在IOS Binding项目中把Xcode class library中编译 .a的项目加进来然后编译这个项目
4.建立Xamarin IOS 项目
4.1在Xamarin里新建一个IOS iPhone专案 这边选择Xamarin >> New >> IOS >>IPhone storyboard >>Single View Application, 然后在Xamarin项目里面将IOS Binding project 中的dll档案加进参考
4.2 这时就可以在Xamarin IOS iPhone 项目里面参考并使用在Xcode中开发的objective-c class library
其他相关参考网站
- Automated Binding Definitions using Objective Sharpie
http://docs.xamarin.com/guides/ios/advanced_topics/binding_objective-c/objective_sharpie - Binding an Existing Objective-C Library
http://docs.xamarin.com/guides/ios/advanced_topics/binding_objective-c/binding_walkthrough