写点什么

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

  • 2010-10-26
  • 本文字数:1791 字

    阅读完需:约 6 分钟

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 代码。

2010-10-26 23:262740
用户头像

发布了 157 篇内容, 共 60.3 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

利用YashanDB实现智能数据流处理

数据库砖家

Disk Graph|扇形图+矩形图双模式,清理磁盘空间超直观

柠檬与橘子

MacX Video Converter Pro视频处理软件

Geek贝

智源研究院26届“智星”科技人才计划正式启动

智源研究院

数据驱动决策:WeOps如何提升大型K8s集群排障效率

嘉为蓝鲸

监控 智能运维 k8s集群 #WeOps

电脑卡顿反应慢的原因及解决方法

阿拉灯神丁

电脑选购 CleanMyMac 电脑运行缓慢 Mac电脑使用教程 mac电脑维护工具

动态风险控制:嘉为蓝鲸CPack黑白名单保障制品全周期安全

嘉为蓝鲸

DevOps 智能运维 CPack 黑白名单

AI 英语口语 App 的核心功能

北京木奇移动技术有限公司

软件外包公司 AI英语学习 AI英语口语

从被动救火到主动预测!碧桂园服务以图谱技术重塑IT运维底座

智在碧得

利用YashanDB数据库实现跨地域数据同步攻略

数据库砖家

低代码这么火,为什么搞砸的这么多?

秃头小帅oi

PDF Protector for Mac(PDF加密与解密工具)

Geek贝

Archicad 28 for Mac(3D建筑建模工具)

Geek贝

基于YashanDB数据库的分布式系统构建经验

数据库砖家

医用布草管理RFID解决方案

斯科信息

RFID解决方案 医院布草管理 斯科信息

实例解析:粮油食品仓储RFID高效管理方案

斯科信息

仓储RFID解决方案

破局研运数据孤岛:嘉为蓝鲸CFlow实现全链路精准跟踪

嘉为蓝鲸

DevOps 智能运维 价值流管理 CFlow

赋能AI金融:低代码平台的工程实践与未来展望

电子尖叫食人鱼

AI 低代码 金融

Iridient Developer for mac RAW 图像处理与转换软件

Geek贝

Mac 软件

1688图片搜索API,根据图片搜索相似商品

tbapi

1688API 1688图片搜索接口 1688拍立淘接口

嘉为蓝鲸亮相GOPS全球运维大会·2025北京站,彰显研运领域硬核能力!

嘉为蓝鲸

智能运维 GOPS全球运维大会 研运一体化

MySQL查询执行顺序:一张图看懂SQL是如何工作的

不在线第一只蜗牛

MySQL sql

利用YashanDB数据库实现高并发访问的方案

数据库砖家

释放 IoT 数据价值,时序数据库 TDengine 上榜 2024 中国物联网创新产品榜

TDengine

tdengine 物联网 时序数据库

TypeScript结构化类型初探

电子尖叫食人鱼

typescript

引迈信息6周年:数智领航,共赴新程

引迈信息

Pickle 开源 AI 桌面助手 Glass:捕捉屏幕生成结构化信息;邱锡鹏团队开源对话语音模型 MOSS-TTSD丨日报

声网

商品中心—库存分桶高并发的优化文档

量贩潮汐·WholesaleTide

Java JavaScript 前端

商品中心—库存分桶高并发的优化文档(二)

量贩潮汐·WholesaleTide

Java JavaScript 前端

懒懒笔记 | 课代表带你梳理【RAG课程 19:基于知识图谱的RAG】

商汤万象开发者

AI agent LLM rag

MySQL 多版本并发控制

不在线第一只蜗牛

MySQL

Mono向Mac OS应用程序开发示好_.NET_赵劼_InfoQ精选文章