限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

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

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

关注

评论

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

都在用MQ,Redis的Pub/Sub也可以试着了解下

李子捌

redis MQ 签约计划第二季

CSS之盒模型

Augus

CSS 11月日更

Prometheus Exporter (十三)Elasticsearch Exporter

耳东@Erdong

elasticsearch Prometheus exporter 11月日更

李子捌 Redis精通系列文章 研究分享| 内容合集

李子捌

redis 内容合集 签约计划第二季 技术专题合集

URL URI傻傻分不清楚,dart告诉你该怎么用

程序那些事

flutter dart 程序那些事 11月日更

linux双向重定向之tee命令

入门小站

Linux

Skip List(跳跃列表)它到底好在哪?今天我们不仅只聊为什么,还手写一个玩玩

李子捌

redis skiplist 签约计划第二季

Redis高可用的绝对的利器——持久化(RDB和AOF)

李子捌

redis redis持久化 签约计划第二季

为什么我的 C4C Service Request 没办法 Release 到 ERP?

汪子熙

Cloud SAP abap C4C 11月日更

云原生训练营作业--部署k8s集群

好吃不贵

转型中的学习型组织 ——阅读《第五项修炼》有感

研发管理Jojo

系统性思考 企业转型

Redis之Geospatial,助你轻松实现附近的xx功能

李子捌

redis geospatial 签约计划第二季

听说你的服务经常被打崩?试试布隆过滤器(Bloom Filter)

李子捌

redis 布隆过滤器 签约计划第二季

[Pulsar] 消息从Producer到Broker的历程

Zike Yang

Apache Pulsar 11月日更

k8s statefulset controller源码分析

良凯尔

源码 Kubernetes 源码分析 #Kubernetes#

跟小师妹一起学JVM-系列文章

程序那些事

Java JVM JIT 内容合集 签约计划第二季

Redis的LRU(Least Recently Used)算法你了解多少?

李子捌

redis 签约计划第二季

数据库不能没有事务,今天他来了——Redis事务详述

李子捌

redis 事务 签约计划第二季

限流系列文章——令牌桶限流

李子捌

redis 限流 签约计划第二季

签到功能怎么做?Bitmaps助你一臂之力

李子捌

redis bitmaps 签约计划第二季

在线文本交集计算工具

入门小站

工具

限流系列文章——漏斗限流

李子捌

redis 限流 签约计划第二季

SAP Cloud for Customer Price 计价简介

汪子熙

Cloud SAP C4C 11月日更 pricing

2021年大数据开发发展趋势

五分钟学大数据

11月日更

LRU经常被吐槽,要不试试LFU?本文详述LFU(Least Frequently Used)

李子捌

redis 签约计划第二季

数据分析从零开始实战,Pandas读写Excel/XML数据

老表

Python 数据分析 Excel pandas 11月日更

JSON 数据格式

大数据技术指南

11月日更

限流系列文章——滑动窗口限流

李子捌

redis 限流 签约计划第二季

【高并发】如何使用Java7提供的Fork/Join框架实现高并发程序?

冰河

Java 并发编程 多线程 高并发 异步编程

Linux 调优之:调整 bond hash 策略提升网络吞吐能力

卫智雄

HyperLogLog这里面水很深,但是你必须趟一趟

李子捌

redis 签约计划第二季

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