這個範例是如何在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. HTTP 499 状态码 nginx下 499错误

    日志记录中HTTP状态码出现499错误有多种情况,我遇到的一种情况是nginx反代到一个永远打不开的后端,就这样了,日志状态记录是499.发送字节数是0. 老是有用户反映网站系统时好时坏,因为线上的产 ...

  2. 看图说说JVM新生代垃圾收集器

  3. MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

    第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就 ...

  4. 好用的开关按钮——switchbutton

    1.简介 GitHub地址:https://github.com/zcweng/SwitchButton gradle:  repositories { mavenCentral() jcenter( ...

  5. docker 操作命令详解

    docker attach命令-登录一个已经在执行的容器 docker build 命令-建立一个新的image docker commit命令-提交一个新的image docker cp命令-将容器 ...

  6. .net使用QQ邮箱发送邮件

    /// <summary> /// 发送邮件 /// </summary> /// <param name="mailTo">要发送的邮箱< ...

  7. 关于EF的一点小记录

    今日新闻:朝鲜要改革开放了!!!比你牛逼的人都在努力,你还有理由懒惰吗? 宇宙强大IDE配套的EF问题记录 今天做数据添加时,Id我设置为int类型了,结果在做Add操作时报的错让我摸不着头脑,后来问 ...

  8. python网络编程--socketserver 和 ftp功能简单说明

    1. socketserver 我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信.它是在socket的基础上进行了一层封装,也 ...

  9. Exp2 后门原理与实践 20164323段钊阳

    220164323 Exp2 后门原理与实践 (1)例举你能想到的一个后门进入到你系统中的可能方式?在使用盗版软件,盗版系统,甚至游戏外挂时,往往会让我们关闭杀毒软件,.(2)例举你知道的后门如何启动 ...

  10. C#读入整数

    // ClassLibrary1.h #include<iostream> #pragma once using namespace System; namespace ClassLibr ...