Mono向Mac OS应用程序开发示好

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

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

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

减少意外 基于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版本的Banshee项目(一款基于Mono和Gtk#的播放器),这样发布后的应用程序无需在目标机器装有Mono框架。

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

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

时间: 2014-12-25

Mono向Mac OS应用程序开发示好的相关文章

一起谈.NET技术,Mono向Mac OS应用程序开发示好

Mono正在努力改进各个平台上的使用体验.近日Miguel de Icaza在博客上宣布MonoMac发布了新的版本.MonoMac是面向Mac OSX API的C#绑定,其API设计主要受到了MonoTouch的启发,后者可以基于Mono开发原生的iOS应用程序.MonoMac套件的目标之一,也是发布独立的.app应用程序,让最终用户摆脱对Mono的依赖. 多年以前,Geoff Norton创建了CocoaSharp,这是第一套面向Cocoa API的.NET绑定.从那时起,Mono用户开始尝

使用MONO在MAC OS上开发——同步日志(二)

上一篇使用MONO在MAC OS上开发--同步日志(一)讲述了在MAC OS读取配置文件以及写日志,那么只算是完成了基本的配置,下面的才是重点. 由于时间关系,就简单描述下,并不具体分析源码.最后奉上源码. 一:安装 第一步,安装MONO框架.你可以在MONO官网去下载.注意"MonoFramework-MRE-2.10.5_0.macos10.xamarin.x86.dmg"在低版本MAC OS上运行有问题.建议安装"MonoFramework-MRE-2.10.4_0.m

苹果招聘信息表明Mac OS X将开发革命性新功能

苹果本周发布的一则招聘信息表明,该公司将为Mac OS X操作系统增添一项"令所有人感到惊奇的""革命性"新功能. 苹果的招聘信息多次提到据称是Mac OS X一部分的一项功能.尽管没有披露这项功能的具体信息,但苹果招聘信息3次使用了"革命性"(revolutionary)这一字眼. 苹果招聘信息称,"愿意帮助我们开发前所未有.令所有人惊奇的新功能吗?对每天有数百万苹果http://www.aliyun.com/zixun/aggreg

使用MONO在MAC OS上开发——同步日志(一)

  原先打算再写点EXT.NET方面的,由于现在在玩Silverlight和Android,所以不打算写下去了.而且最近很忙,所以发帖也不会很及时.   好了,转入正题了:最近客户有个需求,要求写个小程序监控生产线上的苹果一体机的日志文件并上传到服务器.开始想使用Perl或者Python,但是时间不够(因为对这两门语言还不太熟悉),于是想试试MONO.MONO虽然没想象中好用,但是还算勉强能用.   虽然MonoDevelop还可以,但是还是比较喜欢使用VS开发.于是在VS里面先编码.值得注意的

从Windows角度看Mac OS X上的软件开发

    如果原来从事Windows软件开发,想跨足或转换至Mac OS X环境,需要知道那些东西?有什么知识技能可以快速运用在Mac OS X环境上的?这两个问题应该是Windows开发者进入Mac OS X环境最关心的问题.本文假设读者以往采用微软的开发工具,并以C/C++/C#的任一种组合作为开发语言. 大体说来,Windows和Mac OS X都是为桌面应用环境.图形用户接口(GUI)而设计的操作系统.虽然不同平台细节各有特色,但两者相近的抽象概念,其实远远多于相左之处.本文试图指出方向上

朝鲜“红星OS ”- 呵呵,这货长得跟苹果家 Mac OS 好像啊~

class="post_content" itemprop="articleBody"> 尽管 Windows 系统仍旧统治世界操作系统市场,但越来越多的消费者们也意识到了其他的可能选项,其中最具代表性的便是苹果的 Mac OS X .这一新思路也影响了朝鲜,其最新发布的红星 OS 便几乎是 Mac OS 的翻版-- 相关阅读:COS 宣传片 – 中国自主智能手机操作系统面世 该版本红星 OS 为此系统的第三代版本.上一代红星 OS 与 Windows 7 极

Mac OS X系统搭建谷歌Go语言开发工具 Sublime Text 2环境配置

  一.安装Golang的SDK 在官网http://golang.org/ 直接下载安装包安装即可.下载pkg格式的最新安装包,直接双击运行,一路按照提示操作即可完成安装. 安装完成后,打开终端,输入go,检测Golang SDK是否安装成功,如下显示,则表示安装成功: 开发工具 Sublime Text 2环境配置-mac os 搭建ftp服务器"> 你也可以输入go version 查看你所安装的Golang的版本 二.环境变量配置(GOPATH) GOPATH是用来告诉Golang

Mac OS X 内核Rootkit开发指南

1.引言  1.1 背景介绍          困 扰着不同操作系统的Rootkit已经由来已久,Linux,Windiws,还有各种类BSD等系统都受到了Rootkit的极大危害.目前广泛使用的 一类"内核Rootkit",是原来"文件转移Rootkit"的衍生和发展.这种发展趋势的必然性,来源于Rootkit和Osiris. Tripwire等安全软件之间的竞争--后者的出现使得Rootkit开发者不得不在内核空间中寻找更加隐秘的途径,以达到渗透和颠覆系统的目的

.NET Core多平台开发体验[2]: Mac OS X

除了微软自家的Windows平台, .NET Core针对Mac OS以及各种Linux(RHEL.Ubuntu.Debian.Fedora.CentOS和SUSE等)都提供了很好的支持,我们先来体验一下使用Mac来开发.NET Core应用,在这之前我们照例先得构建我们的开发环境. 一.安装开发环境 和Windows一样,如果我们下午在Mac上进行.NET Core应用的开发,我们只需要安装 .NET Core SDK和相应的IDE就可以了.对于前者,我们可以直接从微软官方站点(https:/