写点什么

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:262868
用户头像

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

关注

评论

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

基于YOLOv8的田间杂草检测识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

yolov8

垃圾回收算法有哪些?了解哪些垃圾回收器?

不在线第一只蜗牛

Java 算法 JVM

10+热门 AI Agent 框架深度解析:谁更适合你的项目?

测吧(北京)科技有限公司

MiniMax 将完成近 3 亿美元融资,估值超 40 亿美元;Grok 上线动漫 AI 伴侣功能丨日报

声网

【IoTDB 线上小课 17】开源 ≠ 免费,3 分钟总结开源商用指南

Apache IoTDB

给 DolphinScheduler 加一个 SQL Copilot 聊天助手,这个主意怎么样?

白鲸开源

GitHub 开源 AI Apache DolphinScheduler Copilot

【重磅发布,限时下载】《WhaleStudio商业案例白皮书》上线,数智化转型最佳实践一次看全

白鲸开源

大数据 白皮书 DataOps 白鲸开源 商业案例

龙蜥中级认证课程上线,Linux 技术进阶新选择

OpenAnolis小助手

Linux 操作系统 龙蜥社区人才培养计划

缓存穿透的解决方式?—布隆过滤器

量贩潮汐·WholesaleTide

缓存

VMware Cloud Foundation Automation 9.0 新增功能

sysin

vcf

VMware Cloud Foundation Operations 9.0 新增功能

sysin

vcf

MySQL 数据同步至 S3file,并接入 Hive 访问:SeaTunnel 实践指南

白鲸开源

MySQL hive Doris 数据同步 Apache SeaTunnel

达摩院玄铁、龙蜥等联合出题,首届 CIE 全国 RISC-V 高水平创新和应用大赛邀您报名

OpenAnolis小助手

操作系统 risc-v 龙蜥社区 龙蜥社区赛题

PostgreSQL 数据库中 ETL 操作的实战技巧

谷云科技RestCloud

数据库 postgresql 数据处理 ETL 数据集成

智野双全一车搞定 豪华智能越野“第一车”即将发布

极客天地

Mac经典网页设计RapidWeaver 9直装版

Rose

特斯拉Optimus V3,来了!!

机器人头条

特斯拉 人形机器人 宇树科技 智元机器人 特斯拉optimus

自 4O 之后,Voice 从 Assistant 到 Agent,新机会都藏在哪些场景里?|Voice Agent 学习笔记

声网

飞蜂全能PDF格式转换器 PDF to PowerPoint Pro for mac

Rose

​​超越传统:低代码如何以敏捷开发+高效能撬动企业数智转型性价比天花板?​

电子尖叫食人鱼

低代码

DolphinScheduler 如何高效调度 AnalyticDB on Spark 作业?

白鲸开源

MySQL spark 开源 Apache DolphinScheduler analyticDB

龙蜥牵手如意 RISC-V 社区,共筑 RISC-V 软件生态新未来

OpenAnolis小助手

开源 操作系统 risc-v 龙蜥社区

OASA 6 月月会圆满结束,同步联盟目标、漏洞激励计划等新进展

OpenAnolis小助手

开源 龙蜥社区 龙蜥社区安全联盟 软件适配

阿里云 Serverless 重塑创蓝云智通信底座,引领行业变革!

阿里巴巴云原生

Serverless

亲测可用!麒麟环境下安装 SeaTunnel 完整指南

白鲸开源

Linux 开源 安装 麒麟操作系统 Apache SeaTunnel

倒计时 1 天!龙蜥邀您参加 RISC-V 中国峰会

OpenAnolis小助手

操作系统 risc-v 龙蜥社区 Anolis OS 龙蜥社区 RISC-V SIG

回看限时上线!2025 Altair 区域技术交流会精彩演讲回播来啦

Altair RapidMiner

人工智能 AI 仿真 CAE 航空航天

了解案例共创活动

华为云开发者联盟

Wolfram Mathematica 激活密钥 Mac数学软件

Rose

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