(7) 引用Objective-C class library

时间:2022-01-13 23:31:32

原文 引用Objective-C class library

这个范例是如何在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.
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

(7) 引用Objective-C class library
2.2 选择Header File 这个步骤要去选择到我们在Xcode里面开发的class library [sharecode] 里面的interface档案.[Sharecode.h] 选择完毕后按[Next]进到下一步.
(7) 引用Objective-C class library
(7) 引用Objective-C class library
2.3 指定Namaspace. 这里需要指定namespace名称 , 在后面Xamarin.ios项目会依据这个namespace来参照到你的Class library..
(7) 引用Objective-C class library
2.4 储存metadata档案. 指定Namespace后, Objective sharpie会自动建立一个Metadata档案.这时选择你想要储存的地方来储存这的档案.
(7) 引用Objective-C class library
3. 建立Xamarin IOS binding project
3.1在Xamarin里面新建一个IOS Binding项目 
这个项目是用来Binding用Xcode开发出来的Class Library. 在建立Xamarin项目时选择Xamarin >> New >> IOS >> IOS Binding Project
(7) 引用Objective-C class library

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档案中有两个地方要做修正.

  1. 删除 [Export] 里面的 Verify片段. 
    Verify ("ObjC method massaged into getter property","/Users/benlu/Projects/Xamarin_ios_lab/BindingObjective-c/sharecode/sharecode/sharecode.h", Line = 15)
(7) 引用Objective-C class library

删除后的结果如下:

(7) 引用Objective-C class library

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档案加进参考
(7) 引用Objective-C class library
4.2 这时就可以在Xamarin IOS iPhone 项目里面参考并使用在Xcode中开发的objective-c class library
(7) 引用Objective-C class library
 
其他相关参考网站