写点什么

基于.NET/C#开发跨平台 Windows Phone 7、iPhone 及 Android 应用程序

  • 2010-10-28
  • 本文字数:1850 字

    阅读完需:约 6 分钟

在近日举办的 Modern .NET DDD Conference 会议上,Chris Hardy 在他的演讲中展示了如何基于.NET/C#,开发面向 Windows Phone 7,iPhone 及 Android 三个平台的应用程序,以及其中的注意事项。

首先 Chris 列举了三个平台上使用的工具及框架等周边环境:

Windows Phone 7 iPhone(MonoTouch) Android(MonoDroid 预览版) 操作系统 Windows Mac 跨平台 开发工具 Visual Studio 2010 MonoDevelop VS 2010 / MonoDevelop 设计工具 Expression Blend 4 Interface Builder XML 文件 / DroidDraw 开发框架 Silverlight for WP Silverlight 3 的超集 Silverlight 3 的超集 社区情况 极好 较好 尚早 MonoTouch 是 Novell 公司推出的基于 Mono 的 iOS 应用程序开发套件,并可以将应用程序发布至苹果应用程序商店。Mono 是一款基于 ECMA 标准开发的.NET 运行环境,使用 JIT(Just-in-Time)编译方式来执行 IL 代码,不过由于 iOS 设备的限制,MonoTouch 使用了 AOT(Ahead-of-Time)编译方式,直接将原生代码部署至 iOS 设备(iPhone,iPhone 4,iPad)上。MonoTouch 还提供了一个 Linker,它会将 SDK 及程序代码中真正使用到的部分静态链接至应用程序中,从而削减了应用程序的体积。使用 MonoTouch 开发出来的应用程序可以在 iOS 设备上独立运行,这是因为 MonoTouch 会将一个运行时放入应用程序内部的原因。据 Chris 称,这会给应用程序的体积带来大约 6MB 的增长。

使用 MonoTouch,.NET/C#程序员可以利用现有的知识进行开发,能够使用反射、泛型、LINQ、Lambda 等各种高级的.NET/C#特性。面向原生 API 的绑定存放在 monotouch.dll 中的 MonoTouch 命名空间下,并与 CocoaTouch(即用于 iOS 开发的原生 Objective-C 框架)的命名空间映射。在绑定时,MonoTouch 不是一味地直接暴露出 Cocoa Touch 的功能,而是在一定程度上将它的 API 改写为更倾向于.NET 程序员的形式。例如 UIView 的 Frame 属性为 System.Drawing.RectangleF 类型,而不是 Cocoa Touch 中原本使用的 CGRect。对于一些如 NSArray 这样的类型,MonoTouch 也在合适的地方将其转化为强类型的数组。在调试方面,MonoTouch 使用了 Mono 的 Soft-Debugger,支持在模拟器、真机,甚至通过 WIFI 进行调试。

MonoDroid 是针对 Android 系统的应用程序开发套件,大体和 MonoTouch 相同,目前正处在预览发布阶段,只有少量早期预订的用户拿到了 SDK。

据 Chris 称,有了 MonoTouch 和 MonoDroid 便可以复用相当部分的代码,包括现有的开源项目,如 Json.NET FlickrNet XnaTouch 。XnaTouch 是一款基于 MonoTouch 的 XNA 框架实现,简化 XBox 及 WP7 上的游戏向 iOS 上的移植工作。不过在复用时并不能共享二进制文件,而必须针对不同的平台重新编译代码。

在 UI 部分,三个平台各有原生的解决方案。除了 WP7 以外,iPhone 和 Android 分别使用 MonoTouch 及 MonoDroid 提供的原生 API 的 C#绑定进行开发。例如,MonoTouch 进行 UI 开发时使用的是 iOS 标准的应用程序的架构,包括其 MVC 驱动方式。开发人员可以通过 Interface Builder 编辑 XIB 文件,MonoTouch 会自动根据 XIB 的内容在局部类中生成 C#代码,所有的 outlet,action 等元素都会在代码中得到体现。

Chris 也提到了其他一些必须针对平台编写特定代码的地方,例如在文件的存储上,MonoTouch 和 MonoDroid 可以直接像本地路径写入数据,而在 WP7 上则必须使用独立存储:

复制代码
void SaveLocal(string data)
{
<strong>#if (MonoTouch || MonoDroid)</strong>
File.WriteAllText(_localPath, data);
<strong>#elif WINDOWS_PHONE</strong>
using (var appStorage =
IsolatedStorageFile.GetUserStoreForApplication())
{
var file = appStorage.OpenFile(_localPath, FileMode.Create);
FileExtension.WriteAllText(file, data);
}
<strong>#endif</strong>
}

同理,使用 WebClient 获取数据时,在 MonoTouch 及 MonoDroid 上可以直接调用 DownloadFile 相关方法来下载文件,而在 WP7 中,则需要使用 OpenRead 相关方法处理二进制数据流。

Chris 在演讲中演示了一个跨平台的 Twitter 应用程序的开发过程,您可以在他的博客上访问WP 7 和MonoDroid 的开发录像,以及完整的幻灯片内容。Chris 与他人还合著了一本讲解 MonoTouch 开发的书籍。此外,在国内技术社区也有关于 MonoTouch 的内容,如老赵在博客上描述了在虚拟机中安装 Mac OSX 雪豹操作系统以及利用 Visual Studio 开发 MonoTouch 应用程序的方式(上)。

2010-10-28 02:546011
用户头像

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

关注

评论

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

架构设计:微服务架构如何划分?这6个标准原则让你一目了然

互联网应用架构

微服务 架构设计

科大讯飞再握一国产核心技术,可高精细拾取30分贝超小音量

Talk A.I.

当代开发者的好帮手,浅析.NET敏捷开发框架的优势与特点

Learun

敏捷开发 开发工具

java安全编码指南之:输入校验

程序那些事

java安全编码 安全编码规范 java安全编码指南

智能商业时代的思考(三)数据驱动

刘旭东

大数据 数据驱动 智能商业

拆分链表、图解HTTPS、Zookeeper原理、如何成为技术专家、架构师三板斧 John 易筋 ARTS 打卡 Week 18

John(易筋)

ARTS 打卡计划 图解https ZooKeeper原理 架构师三板斧 拆分链表

Java开发连Redis都不会还想跳槽涨薪?先把Redis的知识点吃透再说

Java架构之路

Java redis 编程 程序员 面试

(0)skynet序章

休比

从linux源码看socket的阻塞和非阻塞

无毁的湖光

Linux TCP socket Linux Kenel

我的 2020 iOS BAT面试心得:Bigo、字节、快手、伴鱼、百度、微博等

iOSer

ios 面试

Golang框架探索(一)

余歌

Web框架 Go web

rpc探路(一)

余歌

springboot2.3手册:多租户及自动创建数据,这样做

互联网应用架构

springboot mybaitsplus 多租户 自动填充基础信息

测试工程师在敏捷项目中扮演什么角色?

禅道项目管理

程序员 敏捷开发 测试

第十一周.命题作业

刘璐

高效程序员的45个习惯:敏捷开发修炼之道(8)

石云升

敏捷开发 技术分享 轮换制

RDS、DDS和GaussDB理不清?看这一篇足够了!

华为云开发者联盟

数据库 华为云 RDS

Java ConcurrentHashMap 高并发安全实现原理解析

vivo互联网技术

Java hashmap 多线程 高并发

高难度对话读书笔记

wo是一棵草

实践解读丨Python 面向对象三大特征之多态

华为云开发者联盟

编程 面向对象

超全面分布式缓存高可用方案:哨兵机制

架构精进之路

redis哨兵模式

收藏手册:该不该用Lombok?15个常用注解全解析

互联网应用架构

lombok

站在巨人的肩膀上学习:五位阿里大牛联手撰写的《深入浅出Java多线程》

Java架构之路

Java 编程 面试 并发编程 多线程

分布式数据库拆分常用之法

华为云开发者联盟

数据库 架构 分布式

大作业2

雪涛公子

使用递增计数器的线程同步工具 —— 信号量,它的原理是什么样子的?

程序员小航

Java 源码 源码阅读 JUC Semaphore

Golang 反射性能优化

余歌

性能优化 Go 语言

收藏手册:Docker安装RabbitMQ,只需3步

互联网应用架构

Docker RabbitMQ

Java新特性:数据类型可以扔掉了?

Java 编程 架构师

Kotlin 插件1.4.10使用报错

三爻

android kotlin

JavaScript原型机制

Clloz

Java 原型

基于.NET/C#开发跨平台Windows Phone 7、iPhone及Android应用程序_.NET_赵劼_InfoQ精选文章