写点什么

Xamarin:让 C#登陆 Mac App Store

  • 2013-01-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-01-14 04:543779
用户头像

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

关注

评论

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

程序员你所害怕的中年危机,恰恰是人生的转机!,kotlin高阶函数源码讲解

android 程序员 移动开发

知乎3000多人关注!27w+阅读开发者进阶难题,2021安卓开发社招面试解答之性能优化

android 程序员 移动开发

移动应用遗留系统重构(9)- 路由篇,移动开发者大会

android 程序员 移动开发

移动应用遗留系统重构(7)- 解耦重构演示篇(一),android开发环境的搭建视频

android 程序员 移动开发

移动应用遗留系统重构(9)- 路由篇(1),kotlin版权

android 程序员 移动开发

程序员35岁之后该怎样规划自己的职业?,Android开发手册

android 程序员 移动开发

疫情之下,这真是一份完美的程序员宅家指南,androidsdk开发实例

android 程序员 移动开发

知乎热榜第一破10w阅读-Android不行了?2021程序员的风口又要来了,你还不抓紧机会

android 程序员 移动开发

破解 Kotlin 协程(1) - 入门篇,35岁以后的Android程序员出路在哪里

android 程序员 移动开发

程序员中年了40岁,公司里熬到中层年薪30w+,最新高频Android面试题目分享

android 程序员 移动开发

疫情下,中年IT的焦虑,Android面试总结

android 程序员 移动开发

看完此文,你对Gradle的理解又升级了!,万字总结

android 程序员 移动开发

疫情结束后,会影响程序员年后找工作吗?,安卓开发面试题自定义view

android 程序员 移动开发

种草Dribbble:从未见过如此Q弹的Switcher,腾讯架构师深入讲解Android开发

android 程序员 移动开发

程序员30岁+又怎么了呢?找准定位,kotlin可选参数

android 程序员 移动开发

程序员为什么越老贬值的越厉害?,面试官6个灵魂拷问

android 程序员 移动开发

疫情下中年IT的焦虑,轻松拿下offer

android 程序员 移动开发

疫情下,每个职场人都要思考这4点,有了这些中高端面试专题-大厂还会远吗

android 程序员 移动开发

百度阿里腾讯头条面试Android高级岗必问!Handler源码解析!

android 程序员 移动开发

移动端视频开发通过什么方式实现直播?十分钟带你快速了解

android 程序员 移动开发

程序员别只顾着敲代码了,老板们不喜欢聘请40岁程序员真相原来是

android 程序员 移动开发

值得收藏的 Eureka 控制台详解

悟空聊架构

Eureka 源码解析 注册中心 悟空聊架构 11月日更

百万级日活 App 的屏幕录制功能是如何实现的,flutter小程序的onshow

android 程序员 移动开发

移动开发程序员怎么优雅迈过30K+这道坎?成功入职字节跳动

android 程序员 移动开发

真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer

android 程序员 移动开发

移动开发的罗曼蒂克消亡史 _ InfoQ,网易云的朋友给我这份339页的Android面经

android 程序员 移动开发

移动开发的罗曼蒂克消亡史,android系统开发书籍

android 程序员 移动开发

疫情让“灵活用工”浮出水面,一线互联网公司面经总结

android 程序员 移动开发

看我一波,Android获取进程名函数,代码优化到极致的操作

android 程序员 移动开发

疫情过后打算跳槽阿里,本以为凉了没想到居然是它“救,2021年Android大厂面试分享

android 程序员 移动开发

真的已经讲烂了!想彻底掌握-binder-机制,必须先搞懂这几个关键类

android 程序员 移动开发

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