[Xamarin.iOS] 如何引用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]
n 在sharecode.h檔案中宣告一個名稱為test的方法,並且讓這個方法回傳一個NSString
sharecode.h
#import <Foundation/Foundation.h>
@interface sharecode : NSObject{}
- (NSString *)test;
@end
n 在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指令來產生相對應的檔案
n 產生iOS simulator 用的檔案
xcodebuild -sdk iphonesimulator -configuration Debug
n 產生 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.
n 請到下方網址下載objective sharpie tool.
http://files.xamarin.com/~abock/ObjectiveSharpie/ObjectiveSharpie-0.4.11.zip
n 下載完成後開啟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檔案中有兩個地方要做修正.
3.2.2.1 刪除 [Export] 裡面的 Verify片段.
Verify ("ObjC method massaged into getter property", "/Users/benlu/Projects/Xamarin_ios_lab/BindingObjective-c/sharecode/sharecode/sharecode.h", Line = 15)
![]()
刪除後的結果如下:
![]()
3.2.2.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
![]()
[Xamarin.iOS] 如何引用Objective-c寫的Class Library (转帖)的更多相关文章
- Visual Studio 跨平台開發實戰(3) - Xamarin iOS 多頁面應用程式開發 (转帖)
前言 在前一篇教學中, 我們學會如何使用Visual Studio 搭配Xcode 進行iOS基本控制項的操作. 但都是屬於單一畫面的應用程式. 這次我們要來練習如何透過Navigation Cont ...
- Xamarin.ios引用第三方SDK
引言 诚然,Xamarin是个优秀的跨平台解决方案,但毕竟还是不能将Native中所有的方法都直接实现.诸如各种第三方库,也都只有java/oc原生版本的SDK,无法直接拿过来直接使用.但,不能直接拿 ...
- Xamarin SQLite教程Xamarin.iOS项目添加引用
Xamarin SQLite教程Xamarin.iOS项目添加引用 使用直接方式访问SQLite数据库,需要将System.Data和Mono.Data.SQlite库导入到创建的项目中.下面将分别讲 ...
- Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面
Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面 关于欢迎界面 很多App第一次启动都会有一个欢迎界面,欢迎界面往往决定这用户对App的第一映像,所以欢 ...
- Visual Studio + C# + Xamarin = iOS/Android/Windows Apps
Visual Studio 跨平台開發實戰 (1) -- Hello Xamarin! 前言 應用程式發展的腳步,從來沒有停過.從早期的 Windows 應用程式, 到網路時代的 web 應用程式,再 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 【Xamarin挖墙脚系列:Xamarin.IOS的程序的结构】
原文:[Xamarin挖墙脚系列:Xamarin.IOS的程序的结构] 开始熟悉Xamarin在开发IOS的结构!!!!!!! 先看官方 这个是以一个单页面的程序进行讲述的. 1 程序引用的程序集,核 ...
- Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发
原文 Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发 前言 在前一篇教学中, 我们学会如何使用Visual Studio 搭配Xcode 进行iOS基本控 ...
- xamarin IOS 报错处理: an error occurred on client Build420719 while
xamarin IOS 开发时如果报错如下: an error occurred on client Build420719 while...... 出现如下问题时,可能是1.丢失文件2.没有包括在项 ...
随机推荐
- C++中const在函数中的用法
1.const放在函数前面 如果我们的函数的返回值是以 指针形式 返回的,如果在函数前面加上const修饰,则表示指针指向的内容是不能被改变的,并且接收返回值的 指针变量必须是const修饰的,例如: ...
- SQLITE3的锁以及事务
以下内容摘自<SQLITE权威指南>,下载地址http://download.csdn.net/detail/cxjchen/5643391 SQLITE的锁 在SQLite中,锁和事 ...
- iptables命令(备忘)
语法 iptables(选项)(参数) 选项 -t<表>:指定要操纵的表: -A:向规则链中添加条目: -D:从规则链中删除条目: -i:向规则链中插入条目: -R:替换规则链中的条目: ...
- 【C++】C++中的操作符重载
C++中的操作符重载使得对于类对象的操作更加方便和直观,但是对于各种操作符重载的规则以及语法形式,一直以来都是用到哪一个上stackoverflow上查找,在查找了四五次之后,觉得每次麻烦小总结一下. ...
- java性能分析工具 jconsole.exe
通过 Java visualMv结合 jconsole.exe 工具即可查看如图所示(Jconsole在JDK文件夹内,非JRE文件夹) 在Java Visualvm工具里面安装JTA插件,分析线 ...
- [c# 20问] 2.如何转换XML文件
添加System.Xml引用 使用XmlReader转换字符串 DEMO #region Parse Xml private static void ParseXml(string xmlString ...
- Hibernate 之单向多对一映射及其衍生问题
由于在数据表之间可以通过外键进行关联,在使用Hibernate操作映射到存在关联关系的数据表的对象时,需要将对象的关联关系与数据表的外键关联进行映射. 首先建立hibernate.cfg.xml和会话 ...
- XML--使用XML来将字符串分隔成行数据
DECLARE @xml XML SET @xml=CAST(REPLACE('<ROOT><X>'+'AA,AB,AC,AD'+'</X></ROOT> ...
- 基于Quartz.net的远程任务管理系统 二
紧接着上一篇.上一篇讲了表设计与ADO.Net基本操作.接下来,就来说说怎么动态来添加Job任务及清理过期任务吧. 首先,先理一下思路,做事情要先把思绪理清了,然后下手就快准狠了.下面是我的思路:做一 ...
- .NET中的异常处理机制(二)
本文我们继续通过另一个例子来讲解在C#中如何捕捉异常并进行处理. 首先,我们新建一个控制台应用和一个Class Library Project.如下图所示. 图1 ConsoleUI应用 图2 Exc ...