查看: 480|回复: 0

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

 关闭 [复制链接]

该用户从未签到

发表于 2010-10-28 17:00 |河南| 显示全部楼层 |阅读模式
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和A**it。MonoMac提供了新的一套新的绑定引擎MonoMac.ObjCRuntime,以及btouch绑定生成器。 btouch绑定生成器接受C#语言形式的API约定,自动生成一个绑定,例如MSActionCell:

  [BaseType (typeof (NSCell))]

  interface NSActionCell {

  [Export ("initTextCell:")]

  IntPtr C**tructor (string aString);

  [Export ("initImageCell:")]

  IntPtr C**tructor (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(完成)

  A**it(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代码。

PCOS系统下载站:http://zhuangji.wang

本版积分规则