[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.没有包括在项 ...
随机推荐
- PL/SQL Developer 窥探事务
一次登录代表一个连接 一个SQL Window 代表一个会话(session),有唯一的SID 事务(transaction) 由 insert .update 或者 delete 开启 由 comm ...
- git 上传项目
参考:https://blog.csdn.net/qq_28304687/article/details/69959238?fps=1&locationNum=8 第一部分 初次上传 1.先在 ...
- HRBUST1212 乘积最大 2017-03-06 15:47 59人阅读 评论(0) 收藏
乘积最大 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...
- visual studio code中使用emmet插件在.vue文件失效
使用visual studio code编辑.vue文件时,emmet插件无法使用,可以通过以下两种试解决: 1.文件→设置,在右侧窗口添加以下代码: "emmet.syntaxProfil ...
- 理解mvn命令
mvn clean package依次执行了clean.resources.compile.testResources.testCompile.test.jar(打包)等7个阶段. mvn clean ...
- CSS3 线性渐变linear-gradient
CSS3 Gradient 分为 linear-gradient(线性渐变)和 radial-gradient(径 向渐变).为了更好的应用 CSS3 Gradient,需要先了解一下目前的几种现代浏 ...
- MaxScript通过.net发送邮件
Fn SmtpSendMail argSmtpAddress argSenderAddress argSenderPassword argTargetAddress argTitle argMessa ...
- (转载)Oracle的悲观锁和乐观锁
为了得到最大的性能,一般数据库都有并发机制,不过带来的问题就是数据访问的冲突.为了解决这个问题,大多数数据库用的方法就是数据的锁定. 数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁.什么叫 ...
- OpenResty 最佳实践 (1)
此文已由作者汤晓静授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. OpenResty 发展起源 OpenResty(也称为 ngx_openresty)是一个全功能的 Web ...
- 【OCP|052】OCP最新题库解析系列-2
2.Which two are true about Optimizer Statistics? ❑ A) They do not persist across Instance restarts. ...