【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

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

关注

评论

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

MySQL数据库中SQL语句分几类?

小魏写代码

在使用item_get API时,如何处理重复的商品信息?

技术冰糖葫芦

API 接口

人工智能的基础概念与原理

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

测试

从 MLOps 到 LMOps 的关键技术嬗变

百度Geek说

大模型 MLOps 12 月 PK 榜 Prompt LMops

Dropzone 4 for mac(文件拖拽增强工具)v4.80.4激活版

iMac小白

Solidity之旅(七)单位以及全局变量

BSN研习社

云原生业务的容器排障与思考

后台技术汇

后台开发 云原生 k8s

【EMNLP 2023】面向垂直领域的知识预训练语言模型

阿里云大数据AI技术

URL Manager Pro for Mac(浏览器标签管理应用)v6.4.1激活版

iMac小白

如何最大化利用虚拟主机:实用技巧与建议

一只扑棱蛾子

虚拟主机

生产环境质量保障的四大挑战

老张

质量保障 测试右移

鹏华基金核心系统完成国产化升级,腾讯云大数据TBDS再拓应用新场景

腾讯云大数据

TBDS

做服务的架构陷阱,你掌握了多少

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟

【腾讯云 HAI域探秘】整合腾讯云HAI的ChatGLM模型到NUXT官网:实现智能IM功能

攀登者

专业统计分析绘图软件:GraphPad Prism 10 激活最新版

mac大玩家j

数据分析工具 Mac软件 数学分析软件

搭建本地http服务器-打开本地文件

Lemoon Can

notion链接脑图 mac开机自启动服务 打开本地文件的http服务器

使用 KubeRay 和 Kueue 在 Kubernetes 中托管 Ray 工作负载

字节跳动云原生计算

ray KubeRay

去哪儿如何实现故障率降低65%?技术+管理的数字化度量体系实践

TakinTalks稳定性社区

亚马逊云科技宣布推出三项无服务器服务创新

财见

Macs Fan Control Pro for mac( 电脑风扇控制软件)v1.5.16中文激活版

iMac小白

怎样防止数字人直播被判定为录播?

青否数字人

数字人

低代码正在改变软件开发方式

互联网工科生

软件开发 低代码 JNPF

一文详解安全随机数

华为云开发者联盟

安全 华为云 华为云开发者联盟

应用现代化加速企业数字化转型

这我可不懂

人工智能 大数据 云原生 数字化

JetBrains PhpStorm 2023 for Mac(PHP集成开发)v2023.3中文激活版

iMac小白

专业视频调色软件达芬奇DaVinci Resolve Studio 18激活中文正式版

胖墩儿不胖y

Mac软件 视频剪辑工具 视频后期处理工具 Mac软件视频编辑

未雨绸缪,天翼云云备份护航企业稳健发展

Geek_2d6073

人工智能 | 计算机如何理解和生成人类语言

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

测试

AI数字人短视频添加背景教程!(数字人SaaS系统或剪映)

青否数字人

数字人

文心一言 VS 讯飞星火 VS chatgpt (151)-- 算法导论12.2 7题

福大大架构师每日一题

福大大架构师每日一题

DaVinci Resolve Studio 18:视频编辑和调色的新标准

iMac小白

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