(7) 引用Objective-C class library

简介: 原文 引用Objective-C class library 这个范例是如何在Xamarin.ios中去使用一个我们自行在Xcode中开发的Objective-c Class Library. 主要会执行的步骤如下 在Xcode 里面去建立一个Class Library 编译这个Clas...

原文 引用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

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

  1. 删除 [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
 
其他相关参考网站
目录
相关文章
|
C# iOS开发 程序员
objective-C中的扩展方法与partial class
在c#中要扩展一个现有类很容易,比如这样: public static class Utils { public static void PrintToConsole(this string strSrc) { Console.
787 0
|
C# iOS开发
objective-C中的Class(类类型),Selector(选择器SEL),函数指针(IMP)
今天在园子里看到了一篇牛文“Objective-C 2.0 with Cocoa Foundation--- 5,Class类型,选择器Selector以及函数指针 ”,讲得十分精彩,忍不住把它的代码加上注释整理于此,以便日后查看。
918 0
|
7月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
430 2
|
5月前
|
开发工具 iOS开发 容器
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
iOS Objective-C 应用连接Azure Storage时,若不关闭账号的匿名访问,程序能正常运行。但关闭匿名访问后,上传到容器时会出现错误:“Public access is not permitted”。解决方法是将创建容器时的公共访问类型从`AZSContainerPublicAccessTypeContainer`改为`AZSContainerPublicAccessTypeOff`,以确保通过授权请求访问。
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
|
7月前
|
缓存 开发工具 iOS开发
优化iOS中Objective-C代码调起支付流程的速度
优化iOS中Objective-C代码调起支付流程的速度
123 2
|
7月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
308 0
|
iOS开发 容器
iOS 代码规范格式 Objective-C(上)
iOS 代码规范格式 Objective-C
439 0
iOS 代码规范格式 Objective-C(上)
|
编译器 API iOS开发
iOS 代码规范格式 Objective-C(下)
iOS 代码规范格式 Objective-C(下)
242 0