原文 引用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
 
其他相关参考网站

(7) 引用Objective-C class library的更多相关文章

  1. 在QT中引用Shark Machine Learning library

    最近因为项目需要,看了看机器学习方面的东西.Google一番,发现Shark正是朕需要的东西.于是准备按官方文档来使用它了.但是官方文档只有怎么生成静态库,并没有在QT里引用的sample. 废话不多 ...

  2. iOS开发 .framework的Optional(弱引用)和Required(强引用)区别, 有错误 Library not found………………

    http://www.cnblogs.com/wanyakun/p/3494323.html 强引用(Required)的framework是一定会被加载到内存的,但是弱引用(Optional)的fr ...

  3. 引用library之——带有自定义属性的自定义控件的library包

    一般来讲,当自定义一个控件Panel并且此控件有自定义属性时(例如:panel:closedHandle="@drawable/foot_bar_right"),xml中需要定义此 ...

  4. Android Support Library

    title: Android Support Library tags: Support Library,支持库 grammar_cjkRuby: true --- DATE: 2016-5-13. ...

  5. Android Support Library介绍

    v4 Support Library 这个库是为Android 1.6(API版本为4)及以上的版本设计的,它包含大部分高版本中有而低版本中没有的API,包括application component ...

  6. 深入理解shared pool共享池之library cache的library cache pin系列三

    关于library cache相关的LATCH非常多,名称差不多,我相信一些人对这些概念还是有些晕,我之前也有些晕,希望此文可以对这些概念有个更为清晰的理解,本文主要学习library cache p ...

  7. Android Studio com.android.dex.DexException: Multiple dex files define(重复引用包),androiddefine

    Android Studio com.android.dex.DexException: Multiple dex files define(重复引用包),androiddefine 如果你用Andr ...

  8. 【转】Android Support Library详细介绍

    网上对Android Support Library中各个依赖包介绍的中文资料太少了,结合官方文档和有限的参考资料做了一次总结,有描述得不对的地方还请指正. 一.主工程.依赖包.jar包.androi ...

  9. android:关于主工程和library project

    .如何将一个android工程作为库工程(library project) library project是作为jar包被其它android工程使用的,首先它也是普通的android工程.然后: )在 ...

  10. Android Studio com.android.dex.DexException: Multiple dex files define(重复引用包)

    如果你用Android Studio开发,并且要用其他项目作为library,这个问题是很容易出现的.出现这个问题的原因是包的重复引用,意思就是在你自己的项目中引用了某个包,而被你作为library的 ...

随机推荐

  1. 一个很奇特的异常 tmpFile.renameTo(classFile) failed

    刚换新电脑 win8+迈克菲 ,当tomcat把默认端口更改后(或者是启动了迈克菲的实时扫描),部署工程后,主页打不开了. 杀毒软件都会造成这个问题 百度杀毒全家桶 360全家桶 关掉就好了 .怀疑是 ...

  2. PHP面试题之小杂鱼

    这里的题目都是比较老的,但是做笔试题时经常碰到,因为这些题目比较凌乱,考的知识点不好分类,就放一块了 /** * 题目:最少代码实现求3个数的最大值 * 三目运算符实现 */ function get ...

  3. UIImage图片转NSData

    在Iphone上有两种读取图片数据的简单方法: UIImageJPEGRepresentation  取UIImage的JPEG格式的NSData UIImagePNGRepresentation.  ...

  4. Oracle EBS-SQL (PO-9):检查期间采购订单执行情况.sql

    --采购订单执行情况查询(七天内接收情况)select pha.segment1       采购订单,         msib.segment1      物料编码,         pla.qu ...

  5. 为WPF项目创建单元测试

    原文作者: 周银辉  来源: 博客园 原文地址:http://www.cnblogs.com/zhouyinhui/archive/2007/09/30/911522.html 可能你已发现一个问题, ...

  6. Delphi XE6调用javascript

    原文地址:Example of using JavaScript for Google maps in the Delphi XE6   XE6的TWebBrowser新增了EvaluateJavaS ...

  7. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  8. Python学习笔记8-类的继承 、深度优先、广度优先

    Python 类声明 语法: class 类名: 类体 例: #--encoding:utf-8-- # class AddressBookEntity: myVersion=0.1 def __in ...

  9. Struts2 二、为Action的参数注入值

    为Action参数注入值,主要使用在的场景为,Action的一个参数的值不是固定的是可以改变的,所以不能直接写在Action中,可以通过Struts配置的方式将值配置到Struts中,然后通过注入的方 ...

  10. 浅谈css盒模型

    在我们网页上的每一个元素,一个按钮,一段文本,一张图片等等,浏览器都将它们当做一个“盒子”看待,并把这样的盒子称为盒模型(box model).使用Chrome的右键>审查元素对某个网页上的元素 ...