Hello World
Spiga

在Visual Studio中使用MonoTouch开发iOS应用程序(上):环境配置

2010-09-28 13:52 by 老赵, 23084 visits

前段时间在工作机上装了Mac OS X,这主要是因为我最近需要开发iPhone应用程序。虽然Xcode,Objective C一定是开发iOS应用程序的主流,但是经过一番考虑,我还是决定尝试一下使用MonoTouch进行开发。MonoTouch是Novell公司基于开源的Mono平台构建的一套iOS开发环境,使用MonoDevelop作为代码编写工具。不过目前的MonoDevelop较之Visual Studio可谓“萤火之光比皓月之明”,甚至还有无法输入中文的低级问题。因此,至今我所有在Mono上运行的代码其实都是用Visual Studio写的,这次自然也不例外。不过,这似乎并不是件非常直接的事情……

什么是MonoTouch

Mono是由Novell提供的.NET跨平台执行环境,无论别人如何进行FUD,我使用下来对Mono的感觉很不错,自认为也有足够的理由来支持我的观点,如今无论是微软Mix大会还是社区类型的NDC 2010都有Mono的内容(尤其是后者)。在我看来,如果没有尝试过Mono就发表的猜忌就很难令人接受了。

Mono使用的授权方案允许第三方基于它上构建商业应用程序,MonoTouch便是其中的典型(还有哪些?自己看吧)。MonoTouch是Novell公司的产品,可以让开发人员在.NET环境下开发iOS应用程序(包括iPhone 4和iPad),支持最新的iOS SDK 4.1。这样.NET开发人员就可以利用现有的知识来开发iOS应用程序,如.NET 3.5中的绝大部分类库以及C# 3.0。例如,之前有同事抱怨Android里的API没法方便地使用SOAP协议(似乎iOS下也有不便),但是在MonoTouch中,一切的一切都是最常见的Add Web Services,或是用WCF的svcutil.exe便可直接生成代理。我们同样可以复用大量.NET平台下的开源类库,只要基于MonoTouch重新编译一遍就可以了。在NDC 2010中“深入MonoTouch”演讲中便演示了在MonoTouch中使用Json.NETFlickrNetCoolStorage三套类库的做法。

除了.NET 3.5中的类库之外,MonoTouch也提供了访问iOS API(即Cocoa Touch)的.NET接口(尤其是在UI方面)。在这方面MonoTouch不是一味地直接暴露出Cocoa Touch的功能,而是在一定程度上将它的API改写为更倾向于.NET程序员的形式。例如UIView的Frame属性为System.Drawing.RectangleF类型,而不是Cocoa Touch中原本使用的CGRect。当然,尤其是UI方面,MonoTouch还是使用了传统iOS应用程序的架构,包括它的MVC驱动方式。因此,即使您使用MonoTouch,最好也要能够看懂简单的Objective C代码,因为SDK提供的文档和大量的示例都是用它来实现的。

众所周知,Mono使用JIT(Just-in-Time)编译来执行IL代码,JIT代表了在运行时动态生成原生代码,但是iOS不允许这么做。因此,MonoTouch实际上是使用了AOT(Ahead-of-Time)编译方式,真正部署在机器上时已经是原生代码了。此外,MonoTouch还提供了一个Linker,它只会将SDK及我们自己编写的代码中,真正使用到的部分静态链接至应用程序中,这削减了应用程序的体积。从中我们可以看出,使用MonoTouch开发出来的应用程序,其实和普通使用iOS SDK开发出的应用程序并没有什么区别,都是完全独立运行的。当然,这也是因为MonoTouch将一个Runtime塞入应用程序内部的关系,这会给应用程序的体积带来大约5MB的增长,压缩后(也就是用户真正需要下载的体积)大约是3MB。

除了MonoTouch以外,用于Android开发的MonoDroid也已经进入了beta阶段,已经向一些开发人员提供试用版本了。这意味着,在不久的将来,C#及.NET类库将成为Windows Phone,iOS,Android三大移动平台上的跨平台开发工具。关于MonoTouch的更多消息,您可以关注NDC 2010上的相关演讲

在Windows和Mac OS X中共享文件

MonoTouch的开发工具是MonoDevelop和Interface Builder,后者用于编辑应用程序中的UI文件。不过编写C#代码的神器终归是Visual Studio,即便是最简单的Express版本在代码编写方面也胜出MonoDevelop很多,更别说是经过增强的高级版本了。因此,我打算使用Visual Studio编写C#代码,而使用Interface Builder开发UI界面。不过我们要做的第一件事情是在Windows和Mac OS X之间共享源文件。这里我继续基于之前Win7 + VirtualBox + Snow Leopard的环境进行配置,您也可以使用相同的方法连接两台独立的机器。

由于Mac OS X是在虚拟机上,我选择将源文件放在Windows里,并在Mac OS X上访问。首先,我们在Windows上共享一个目录,这里我将整个E盘共享给vbox账号,取名为host-e,并赋予完全控制权限:

然后在Mac OS X中打开Finder,在Go菜单中选择Connect to Server:

在弹出的对话框中输入Windows的IP:

点击Connect,并在下一个对话框中输入用户名的密码(注意这里需要包含机器名):

点击Connnet,此时对话框会列出这个账号的共享内容:

于是我们选择host-e,并点击OK。此时,您会在Finder的Shared栏目中访问到共享的内容,其中的projects目录是这里的关键:

我将所有的项目都存放在e:\projects目录中,接下来也不例外。为了方便起见,我在Mac OS X的home目录下建立一个软链接,指向共享中的projects目录

ln -s /Volumes/host-e/projects ~/Projects

此时我们就能在home目录下看到Projects文件夹了,而在各种应用程序中,我们可以使用~/Projects来访问其中的内容:

自然,其他方式也没有问题,您只要找到适合您自己的最合适的方式即可。例如,我现在提到的共享方式要求两台机器通过网络互连,如果您无法实现这点,也可以借助如Dropbox这样的同步工具,其实也非常方便。

安装MonoTouch

要安装MonoTouch,首先您必须安装Mono,MonoDevelop,iOS SDK。我的配置是:

  • Mono 2.6.7
  • MonoDevelop 2.4
  • iOS SDK 4.1

Mono和iOS SDK的安装过程十分普通,而MonoDevelop的安装方式对于Windows用户可能有些特别。在加载了dmg文件以后,会弹出这样一个界面:

根据提示,此时您只需要将MonoDevelop的图标拖至右侧目录中就可以了。

随后,您便可以安装MonoTouch了。MonoTouch是商业产品,不过您可以免费下载它的试用版,无限期使用。不过试用版只能在模拟器上运行调试,如果需要在真机上运行测试、打包、甚至发布至AppStore,则需要购买授权。企业用户自不必说,MonoTouch针对个人用户的授权费用399美金,如果您真有制作应用程序的好点子,那这点钱实在不算什么了。

相关文章

Creative Commons License

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名赵劼(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言

Add your comment

38 条回复

  1. waynebaby
    112.64.190.*
    链接

    waynebaby 2010-09-28 14:43:21

    中午刚跟同事说在你那的收获 你就写完了~~

  2. Leon weng
    123.6.105.*
    链接

    Leon weng 2010-09-28 15:29:20

    不错,我准备在ubuntu上搞mono试试,BTW,老赵,你现在不是在上班吗?

  3. 老赵
    admin
    链接

    老赵 2010-09-28 15:31:42

    @Leon weng

    所以为了写这篇文章中午就啃了两个苹果……

  4. 老赵
    admin
    链接

    老赵 2010-09-28 15:32:02

    @waynebaby

    不错不错,不过还有半篇……

  5. Leon weng
    123.6.105.*
    链接

    Leon weng 2010-09-28 15:45:47

    我想在家里的机器上也装个mac系统,不知道ubuntu,win7,mac能三系统都装不。

  6. Leon weng
    123.6.105.*
    链接

    Leon weng 2010-09-28 15:47:12

    话说你的系统账号透露了你所在的团队。。。

  7. 老赵
    admin
    链接

    老赵 2010-09-28 15:49:52

    @Leon weng

    有条件的话,买个MAC体验体验也是不错的,没有想象中或是传说中那么贵……

  8. Ben
    220.248.45.*
    链接

    Ben 2010-09-28 15:54:17

    Cool, 想用啥技术都是自己决定,真爽啊, 谢谢分享

  9. Leon weng
    125.40.48.*
    链接

    Leon weng 2010-09-28 15:57:24

    @老赵

    不知道在淘宝上买靠谱不,科技市场里的感觉都比较水啊

  10. waynebaby
    112.64.190.*
    链接

    waynebaby 2010-09-28 16:02:04

    要是 vbox 支持把windows 的多点触摸映射到 虚拟机中就好了

    我估计现在还没戏

  11. jeffreydan
    124.65.100.*
    链接

    jeffreydan 2010-09-28 16:06:17

    公司配置鸟苹果机,也在苹果系统上的ipad的开发方面研究了一段时间,可惜俺还是跳槽了,选择了另外一个方向,不知道以后是遗憾还是神马捏。 看这老赵也开始玩介个系统上面的开发,难道我又选择错鸟。

  12. Gsanidt
    125.69.76.*
    链接

    Gsanidt 2010-09-28 16:14:00

    老赵果然神速,昨天才按你的方法装好了MAC OS,今天就又有新东西了,不错...

  13. Chris Hardy
    62.7.64.*
    链接

    Chris Hardy 2010-09-28 18:36:06

    Nice to see MonoTouch and MonoDroid stuff getting picked up across the sea :)

  14. stainboy
    122.84.23.*
    链接

    stainboy 2010-09-28 22:04:05

    老赵可以给Windows用户如何装虚拟机MAC开发iOS写一系列文章了,真的很不错,顶你一下。顺便问下,这是公司的任务吗,还是自己的兴趣爱好?

    BTW,每次用IE8打开你的blog总归有点小卡,用chrome就没事了。

  15. 老赵
    admin
    链接

    老赵 2010-09-28 22:52:29

    @stainboy

    这是公司的任务吗,还是自己的兴趣爱好

    公司的任务是“开发iOS应用程序”,我的兴趣爱好是“MonoTouch”,呵呵。

    每次用IE8打开你的blog总归有点小卡,用chrome就没事了

    说明IE还不够好啊,当然我做的这个皮肤的确也不太好……

  16. 装配脑袋
    207.46.92.*
    链接

    装配脑袋 2010-09-29 15:24:42

    在ipad上看完了此文章。我也刚装好虚拟mac os,正在学objective C,呵呵

  17. 链接

    装配脑袋 2010-09-29 21:14:34

    这是在Windows上的回复。。学习Objective C诡异的语法中

  18. 老赵
    admin
    链接

    老赵 2010-09-29 23:54:33

    @装配脑袋: 学习Objective C诡异的语法中

    一是那些方括号比较奇怪,二是命名规则,代码好长好长……

  19. Hesey
    222.175.103.*
    链接

    Hesey 2010-09-30 08:17:50

    赵姐夫真是Mono控啊

  20. gakaki
    114.91.202.*
    链接

    gakaki 2010-10-07 10:26:04

    我觉得PALM的 web os 也不错啊

  21. Air Force One
    59.61.9.*
    链接

    Air Force One 2010-11-23 13:26:21

    MAC这中虚拟主机没用过也,不知道怎么样,看了这文章后有待尝试

  22. Argo
    119.255.55.*
    链接

    Argo 2010-12-05 19:10:38

    弱弱的问问,CPU没有VT功能支持,按照这个方式是不是无法安装的啊?我按照此教程安装第一步就卡住了,能引到Mac OS但是无法安装,总是提示ACPI Table not found: DSDT.aml

    有什么建议吗?谢谢

  23. cctv
    123.180.73.*
    链接

    cctv 2010-12-25 10:31:02

    同问,我的也是提示 ACPI Table not found: DSDT.aml amd处理器.

  24. mico
    115.148.20.*
    链接

    mico 2011-01-09 23:31:35

    老赵,非常感谢你,之前我也了解过Monotouch,正计划学object-c的时候,看了你的这两篇文章,我就还是用回相对熟悉的c#了,现在已经做成第一个项目了,第二个也在谈着。

  25. 老赵
    admin
    链接

    老赵 2011-01-10 02:37:58

    @mico

    酷,展示一下?

  26. 峰峰
    58.17.197.*
    链接

    峰峰 2011-02-16 11:55:52

    ln -s /Volumes/host-e/projects ~/Projects 为什么建不起软链接,只是一个链接文件

  27. 链接

    2011-03-23 14:39:25

    老赵有没有mono touch的破解版本啊~~

  28. 老赵
    admin
    链接

    老赵 2011-03-23 15:19:34

    @萌

    请支持正版。

  29. 老赵
    admin
    链接

    老赵 2011-03-23 15:19:51

    @峰峰

    目标不存在吧。

  30. dafd
    119.6.78.*
    链接

    dafd 2011-04-01 12:46:02

    标题误导人啊,没看到vs的身影,敢问在vs上开发ios程序何解?

  31. 老赵
    admin
    链接

    老赵 2011-04-01 15:35:43

    @dafd

    哈哈,你真看文章了么。

  32. Loversion
    116.208.221.*
    链接

    Loversion 2011-07-05 21:38:18

    不错正在研究iOS开发,感觉挺有意思的。

  33. BE.Tenner
    121.8.124.*
    链接

    BE.Tenner 2011-08-09 12:36:17

    请问,用这套系统开发有什么局限性么? 是否可以用来开发比较大型的游戏?性能上如何?

  34. 老赵
    admin
    链接

    老赵 2011-08-09 22:21:27

    @BE.Tenner

    市场上有些益智游戏,跟水果忍者差不多,性能应该没问题。

  35. andymark
    23.235.227.*
    链接

    andymark 2019-04-01 14:00:19

    Very superb and such a nice article thanks for sharing this post.

    Card Games

  36. Ryan36
    42.201.162.*
    链接

    Ryan36 2020-02-13 18:35:59

    http://7newsglobal.com/ http://7newsglobal.com/ http://7newsglobal.com/ http://7newsglobal.com/ http://7newsglobal.com/ http://7newsglobal.com/

  37. happy wheels
    123.27.109.*
    链接

    happy wheels 2020-08-12 11:07:57

    Your feedback helps me a lot, A very meaningful event, I hope everything will go well basketball legends

  38. kericnnoe1964
    111.242.184.*
    链接

    kericnnoe1964 2023-03-13 01:36:51

    大家都知道比較有公信力的線上娛樂城,像百家樂APP、WM娛樂城歐博娛樂城這些大家都是同一時間連線

发表回复

登录 / 登录并记住我 ,登陆后便可删除或修改已发表的评论 (请注意保留评论内容)

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

评论内容(大于5个字符):

  1. Your Name yyyy-MM-dd HH:mm:ss

使用Live Messenger联系我