這個範例是如何在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.1xode裡面建立一個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.1Xamarin裡面新建一個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.3IOS Binding專案中把Xcode class library中編譯 .a的專案加進來然後編譯這個專案

4. 建立Xamarin IOS 專案

4.1Xamarin裡新建一個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 (转帖)的更多相关文章

  1. Visual Studio 跨平台開發實戰(3) - Xamarin iOS 多頁面應用程式開發 (转帖)

    前言 在前一篇教學中, 我們學會如何使用Visual Studio 搭配Xcode 進行iOS基本控制項的操作. 但都是屬於單一畫面的應用程式. 這次我們要來練習如何透過Navigation Cont ...

  2. Xamarin.ios引用第三方SDK

    引言 诚然,Xamarin是个优秀的跨平台解决方案,但毕竟还是不能将Native中所有的方法都直接实现.诸如各种第三方库,也都只有java/oc原生版本的SDK,无法直接拿过来直接使用.但,不能直接拿 ...

  3. Xamarin SQLite教程Xamarin.iOS项目添加引用

    Xamarin SQLite教程Xamarin.iOS项目添加引用 使用直接方式访问SQLite数据库,需要将System.Data和Mono.Data.SQlite库导入到创建的项目中.下面将分别讲 ...

  4. Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面

    Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面 关于欢迎界面 很多App第一次启动都会有一个欢迎界面,欢迎界面往往决定这用户对App的第一映像,所以欢 ...

  5. Visual Studio + C# + Xamarin = iOS/Android/Windows Apps

    Visual Studio 跨平台開發實戰 (1) -- Hello Xamarin! 前言 應用程式發展的腳步,從來沒有停過.從早期的 Windows 應用程式, 到網路時代的 web 應用程式,再 ...

  6. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  7. 【Xamarin挖墙脚系列:Xamarin.IOS的程序的结构】

    原文:[Xamarin挖墙脚系列:Xamarin.IOS的程序的结构] 开始熟悉Xamarin在开发IOS的结构!!!!!!! 先看官方 这个是以一个单页面的程序进行讲述的. 1 程序引用的程序集,核 ...

  8. Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发

    原文 Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发 前言 在前一篇教学中, 我们学会如何使用Visual Studio 搭配Xcode 进行iOS基本控 ...

  9. xamarin IOS 报错处理: an error occurred on client Build420719 while

    xamarin IOS 开发时如果报错如下: an error occurred on client Build420719 while...... 出现如下问题时,可能是1.丢失文件2.没有包括在项 ...

随机推荐

  1. curl工具

    在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具. 用法: cu ...

  2. 一)get started with the Quartz project

    官网 http://www.quartz-scheduler.org/ 下载链接 http://www.terracotta.org/download/reflector.jsp?b=tcdistri ...

  3. Hadoop-2.7.2分布式安装手册

    目录 目录 1 1. 前言 3 2. 特性介绍 3 3. 部署 5 3.1. 机器列表 5 3.2. 主机名 5 3.2.1. 临时修改主机名 6 3.2.2. 永久修改主机名 6 3.3. 免密码登 ...

  4. update chnroute

    curl -0 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk ...

  5. Android-bindService本地服务-音乐播放-上

    播放音乐的行为写在服务里,Activity去调用Service里面到方法,进行音乐播放,当Activity结束后,音乐播放器停止播放 界面: MainActivity: package liudeli ...

  6. Intellij IDEA如何在一个窗口同时打开多个Maven项目

    建立父目录,比如fatherProject,并将多个项目放入该父目录fatherProject下 File-Open...打开父目录fatherProject 引入pom.xml,打开Maven Pr ...

  7. IDEA配置hibernate

    当做完struts2的demo之后,发现这些和myeclipse下面几乎没有差别. 唯一觉得不好的就有一点,model的映射文件 .hbm.xml这个无法通过model来生成,所以是手写,有点麻烦.这 ...

  8. OpenResty 最佳实践 (1)

    此文已由作者汤晓静授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. OpenResty 发展起源 OpenResty(也称为 ngx_openresty)是一个全功能的 Web ...

  9. TestNG参数化之@Parameters传参

    通过TestNG实现参数话常用两种方式,一种是借助 @Parameters读取testng.xml中参数,一种是使用@DataProvider注解传参. 此次主要讲解XML传参,语法:在java类中定 ...

  10. python 取出字典的键或者值/如何删除一个字典的键值对/如何遍历字典

    先定义一个字典并直接进行初始化赋值 my_dict = dict(name="lowman", age=45, money=998, hourse=None) 1.取出该字典所有的 ...