50+大厂技术专家现场分享,GMTC北京站9折购票倒计时,戳此查看最新日程 了解详情
写点什么

Xamarin:让 C#登陆 Mac App Store

  • 2013 年 1 月 14 日
  • 本文字数:1613 字

    阅读完需:约 5 分钟

流行平台 MonoTouch 和 Mono for Android 的制造商 Xamarin,已经凭借其 Xamarin.Mac 进入了 Mac App Store 市场。

这并不是第一次人们尝试在 OS X 上绑定 C#,以前的 Cocoa Sharp Monobjc NObjective 都做过这方面的工作。Xamarin.Mac 的不同之处在于,它是一个商业产品,其背后的 Xamarin 是一家股份公司,所以该绑定不会半途而废。

你可能会注意到上面的列表中没有 MonoMac 。这是因为 Xamarin.Mac 是 MonoMac 的一个扩展。除了取消 LGPL 许可限制之外,Xamarin.Mac 还提供了一些优于 MonoMac 的特性。

最重要的是,它能创建完全自包含的(self-contained)应用程序。用户不需要单独安装 Mono,这一方面是 Mac App Store 的要求,一方面也是出于用户使用方便的考虑。

Xamarin.Mac 还支持 MonoMac 所忽略的一些框架。

  • CoreBluetooth
  • GameKit
  • New MountainLoin AppKit APIs
  • SceneKit
  • StoreKit

Xamarin.Mac 目前面向 Mac OS X Lion 和 Mountain Lion。Xamarin 还建议开发者使用最新版本的 Xcode 4.5.2。

尽管 Xamarin.Mac 允许开发者在不同的平台之间共享业务逻辑,但与 UI 相关的所有代码都需要为 Mac 重写。Xamarin 不提供跨平台的工具包,而是鼓励开发者使用原生绑定,以确保应用程序在各个设备上显示正确。

很多开发者对此进行了长期地争论,他们希望能有一门基于 XAML 的 UI 语言(可以基于 Silverlight 或 Moonlight),提供“一次编写,到处运行”的体验。而对于 XAML 本身,尽管它不能在不同平台复用,但由于其对样式和动画提供了丰富的支持,有些人也在考虑尝试它。

当被问及代码复用时,Data Dashboard 的 adamkemp 这样说道:

我是 Data Dashboard for iPad 的主程之一,这个应用是(Xamarin.Mac)发布声明中的第一个学习案例。我们有相当多的代码复用了为 WPF/Silverlight 编写的 C#代码。UI 部分可能完全不同,但大型应用中非 UI 代码还是很多的。

他还说,

我们还在学习如何以最佳的方式跨 WPF 和 iOS 这两个平台应用 MVVM(该代码库目前不支持 Android)。Data Dashboard 本身只支持 iPad,所以我们的 UI 代码只针对 iPad。对于该应用,我们只是使用了苹果的 MVC 模式,每一个视图都有一个视图控制器,视图控制器背后的模型是可以跨平台的。

我们现在正在开发一些跨平台的应用,对于这些应用,我们目前的计划是将 WPF 的 MVVM 模式集成到 iOS 代码中来。我们计划让视图模型继承自 UIViewController(在可以这样操作的地方),然后使用分部类将平台特定的代码隔离到不同的文件中。

也就是说,我们并没有正确地实现 MVVM。我们的视图模型包含对视图的引用,这在 MVVM 中是不正确的。如果能从头开始,我希望以正确的方式实现 MVVM,来更好地隔离平台特定的代码和平台无关的代码。这意味着视图模型可以是平台无关的,而视图是平台特定的。视图与视图模型是绑定的。

我们在 Data Dashboard 中使用了命令,而且我们会在以后的应用中更多地使用它。但是,为了让命令系统的工作方式与在 WPF 上的一致,我们实际上是在 MonoTouch 上做了另一套实现。苹果实现命令的方式是通过 ObjectiveC 选择器和响应链。有的时候我试着桥接这两种方式,但 MonoTouch 里面的一些限制使这很难实现。

还有人在帖子里提到了 Eto,一个“针对桌面和移动应用程序的.NET 跨平台 GUI 框架”。对此,adamkemp 回应道:

谢谢,但我们不想使用跨平台的 GUI API。在设计 UI 时,我们希望专门为特定的平台使用原生的 UI 元素,这样的 UI 看上去会有平台原生的感觉。跨平台 API 只是用所有平台所共有的那小部分特性来生成 UI,因此总是感觉不太好。触摸屏与鼠标和键盘是不同的,因此触摸屏的 UI 应该以触摸的思想来设计,不应该从为键鼠设计的 UI 上移植。

查看英文原文 Xamarin is Bringing C# to the Mac App Store


感谢杨赛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013 年 1 月 14 日 04:543470
用户头像

发布了 59 篇内容, 共 20.4 次阅读, 收获喜欢 3 次。

关注

评论

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

企业面临大危机,CRM崩溃告急,程序员竟用特殊手段化解危机!

Learun

敏捷开发 CRM

《算法导论》.pdf

田维常

区块链司法存证应用落地应用解决方案

t13823115967

区块链落地开发

业务中台建设-数据

孝鹏

架构 中台 数据 赋能

没有它你的DevOps是玩不转的,你信不?

华为云开发者联盟

容器 DevOps 微服务

话题讨论 | 选择做一个程序员,你后悔过吗?

xcbeyond

话题讨论

一文教你看懂缓存穿透、击穿、雪崩、降级等异常

鄙人薛某

Java 缓存 后端 缓存击穿 缓存雪崩

JVM调优不知道怎么回答,阿里总结四大模块,学不会就背过来

小Q

Java 学习 架构 面试 JVM

原创 | 使用JPA实现DDD持久化-O/R映射元数据:类级映射-实体和值对象

编程道与术

Java hibernate 编程 mybatis jpa

operator-sdk & kubebuilder

QiLab

k8s operator-sdk kubebuilder crd

时序数据库DolphinDB与Druid的对比测试

DolphinDB

数据分析 时序数据库 Druid 数据库选择 DolphinDB

开发实践丨用小熊派STM32开发板模拟自动售货机

华为云开发者联盟

物联网 小熊派 开发板

网咯请求中的 connectTimeout 和 soTimeout

不在调上

数据库面试要点:关于MySQL数据库千万级数据查询和存储

华为云开发者联盟

数据库 sql 存储

得不到提升的开发老鸟,试试这3个方法,让你事半功倍!

Linux服务器开发

程序员 后端 互联网人 底层应用开发 Linux服务器开发

Mybatis 中xml和注解映射,这次终于搞明白了

田维常

mybatis

情报合成研判系统开发,智慧警务解决方案

t13823115967

智慧公安

原创 | 使用JPA实现DDD持久化-领域模型:对象的世界

编程道与术

Java hibernate 编程 mybatis jpa

全球熵ETV系统APP软件开发

系统开发

安装MySQL后,需要调整的10个性能配置项

Simon

MySQL percona server

关于Kubernetes和Docker关系的八个问题

杨明越

了不起!靠技术脱贫,他们只用了短短两年!

华为云开发者联盟

人工智能 华为 技术

P8架构挑战:七大专题1425页考点,你能成功吗?

小Q

Java 学习 程序员 架构 面试

英特尔携手德晟达、游密,发布云会议终端解决方案,打造视听新体验

新闻科技资讯

话题讨论 | 30 张图解高并发服务模型你必须这些

程序员柠檬

话题讨论

原创 | 使用JPA实现DDD持久化-O/R映射元数据:映射注解分组

编程道与术

Java hibernate 编程 mybatis jpa

Java架构速成笔记:七大专题,1425页考点,挑战P8岗

Java架构追梦

Java 学习 面试 java架构

不满意社区的轮子,我们自创了一套 React Hooks 风格的数据加载方案

LeanCloud

API React Hooks

使用JPA实现DDD持久化-O/R映射元数据-特殊属性映射:ID、Version和Transient

编程道与术

Java hibernate 编程 mybatis jpa

话题讨论 | 立一个近期的flag,你会想到什么?

xcbeyond

话题讨论

甲方日常 65

句子

工作 随笔杂谈 日常

Xamarin:让C#登陆Mac App Store_语言 & 开发_Jonathan Allen_InfoQ精选文章