博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一起谈.NET技术,Mono向Mac OS应用程序开发示好
阅读量:6161 次
发布时间:2019-06-21

本文共 2289 字,大约阅读时间需要 7 分钟。

Mono正在努力改进各个平台上的使用体验。近日Miguel de Icaza在博客上宣布。是面向Mac OSX API的C#绑定,其API设计主要受到了的启发,后者可以基于Mono开发原生的iOS应用程序。MonoMac套件的目标之一,也是发布独立的.app应用程序,让最终用户摆脱对Mono的依赖。

多年以前,Geoff Norton创建了,这是第一套面向Cocoa API的.NET绑定。从那时起,Mono用户开始尝试利用.NET客户端调用Objective-C的API。几年下来,也出现了其他几个设法集成Objective-C和.NET语言的框架,它们各有利弊。一年多前Mono希望可以将这些竞争对手结合起来,可惜最后无疾而终。

之后MonoTouch的成功则是一个良好的基础,于是Mono开始将Cocoa API使用C#和.NET世界中的模式与惯例用法表现出来,并提供开发人员整套Cocoa应用程序的开发工具。在设计方面,MonoMac参考了《》一书中总结出的设计决策及建议,主要包括:

  • 减少意外
  • 基于C#及其他.NET类库
  • 降低出错的可能
  • 增加开发乐趣
  • 提高生产力,节省开发人员时间
  • 利用一切.NET方面的知识

Miguel表示,.NET从一开始便设计成为一个易于互操作的框架,他对于跨运行时及框架的无缝通信提供了许多高级的支持,这对创建Cocoa API的绑定很有帮助。MonoMac的设计原则与MonoTouch非常接近,它充分考虑到.NET程序员的习惯需求,例如使用Lambda表达式和委托来表示Objective-C API中的“block”。

Cocoa的API由两部分组成,一部分是基于C的API,例如AudioToolbox、CoreGraphics、CoreFundation和CoreText,它们利用P/Invoke的方式直接封装成C#类。而在UI层面上则是大量的Objective-C编写的API,例如Foundation和AppKit。MonoMac提供了新的一套新的绑定引擎MonoMac.ObjCRuntime,以及btouch绑定生成器。btouch绑定生成器接受C#语言形式的API约定,自动生成一个绑定,例如MSActionCell:

 
[BaseType (typeof (NSCell))]
interface NSActionCell {
[Export (
"
initTextCell:
"
)]
IntPtr Constructor (
string
aString);
[Export (
"
initImageCell:
"
)]
IntPtr Constructor (NSImage image);
[Export (
"
target
"
)]
NSObject Target { get; set; }
[Export (
"
action
"
)]
Selector Action { get; set; }
[Export (
"
tag
"
)]
int Tag { get; set; }
}

 

由于生成Objective-C API有大量重复工作,MonoMac还提供了一个头文件解析工具,可以从Objective-C的头文件中生成绝大部分的API。不过对于某些生成的结果还需要进行一些修改才能满足设计的要求,例如,NSArray的参数和返回值需要根据文档修改为合适的强类型。

MonoMac还没有覆盖完整的Cocoa API,不过已经基本可以用于创建API,并已经开放接纳社区的贡献。目前的绑定有:

  • AddressBook(完成)
  • AudioToolbox(完成)
  • AppKit(90%完成)
  • CoreAnimation(完成)
  • CoreFoundation(已完成设计原则中需要的部分)
  • CoreText(完成)
  • CoreLocation(完成)
  • CoreData(完成)
  • CoreGraphics(完成)
  • Foundation(已完成设计原则中需要的部分,包括其他部分的辅助工具)
  • WebKit(缺少DOM代码)

MonoMac仅仅是一套用于开发OSX应用程序的类库。MonoMac团队同样发布了一套基于MonoDevelop的开发工具,其生成结果便是Mac OS下的app应用程序包。此外,Mono 2.8还包含了一个新工具叫做“Mono打包器(bundler)”。这个打包器可以检查你的.NET应用程序,并将其依赖的部分打包在一起。这个技术如今已经用于OSX版本的项目(一款基于Mono和Gtk#的播放器),这样发布后的应用程序无需在目标机器装有Mono框架。

MonoMac使用MIT X11许可协议发布。源码分为两部分:和,都可以在GitHub上获得。前者包含了面向MacOS的绑定,而后者则包含了MonoMac和MonoTouch共用的代码。如果您对OS X下的.NET开发及MonoMac感兴趣,可以参考。

另一方面,最近的技术领导人David Mitchell,他们基于Mono,将原本为Windows平台开发的软件移植到了Mac平台上,两者共享了绝大部分代码,唯一不同的只是UI方面从WPF变成了OS X的原生界面。不过与MonoMac的做法不同,Logos Bible Software的做法是在Objective-C编写的UI界面中调用.NET代码。

转载于:https://www.cnblogs.com/waw/archive/2011/09/02/2163207.html

你可能感兴趣的文章
ubuntu vnc安装
查看>>
LVS+Redis部署手册
查看>>
搜索服务Elasticsearch与Solr比较
查看>>
CKEditor的使用方法
查看>>
JavaScript:综合案例---房贷计算器的实现
查看>>
【SpringMVC学习05】SpringMVC中的参数绑定总结——较乱后期准备加入 同一篇幅他人的参数绑定...
查看>>
LInux系统木马植入排查分析 及 应用漏洞修复配置(隐藏bannner版本等)
查看>>
Oracle 向上递归、向下递归
查看>>
编写自己的代码库(javascript常用实例的实现与封装)
查看>>
good archtchre article
查看>>
Java推断文本文件编码格式以及读取
查看>>
web.xml文件的作用
查看>>
python学习笔记(一)
查看>>
《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明
查看>>
Summary: Difference between null and empty String
查看>>
2014牡丹江——Hierarchical Notation
查看>>
delphi BLE 后台
查看>>
创建ServiceArea
查看>>
java读properties的通用类,兼容linux和windows
查看>>
[SpringMVC]SpringMVC学习笔记一: springmvc原理及实例解析.
查看>>