zoukankan      html  css  js  c++  java
  • 基于.NET/C#开发跨平台Windows Phone 7、iPhone及Android应用程序

    在近日举办的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.NETFlickrNetXnaTouch。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)
        {
    #if (MonoTouch || MonoDroid)
            File.WriteAllText(_localPath, data);
    #elif WINDOWS_PHONE
            using (var appStorage = 
                IsolatedStorageFile.GetUserStoreForApplication())
            {
                var file = appStorage.OpenFile(_localPath, FileMode.Create);
                FileExtension.WriteAllText(file, data);
            }
    #endif
        }

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

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

  • 相关阅读:
    739. Daily Temperatures
    556. Next Greater Element III
    1078. Occurrences After Bigram
    1053. Previous Permutation With One Swap
    565. Array Nesting
    1052. Grumpy Bookstore Owner
    1051. Height Checker
    数据库入门及SQL基本语法
    ISCSI的概念
    配置一个IP SAN 存储服务器
  • 原文地址:https://www.cnblogs.com/bmate/p/1875866.html
Copyright © 2011-2022 走看看