在Visual Studio中使用MonoTouch开发iOS应用程序(上):环境配置
前段时间在工作机上装了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.NET、FlickrNet及CoolStorage三套类库的做法。
除了.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美金,如果您真有制作应用程序的好点子,那这点钱实在不算什么了。
建议继续学习:
- IOS安全–浅谈关于IOS加固的几种方法 (阅读:15230)
- iOS内存暴增问题追查与使用陷阱 (阅读:4351)
- 10个必需的iOS开发工具和资源 (阅读:3975)
- iOS push服务 (阅读:3699)
- iPhone 5/iOS 6前端开发指南 (阅读:3144)
- iOS到Android到底有多远 (阅读:3161)
- 在Visual Studio中使用MonoTouch开发iOS应用程序(下):开发体验 (阅读:3074)
- iOS安全系列之二:HTTPS进阶 (阅读:2812)
- iOS设备唯一标识获取策略 (阅读:2645)
- 在iOS中使用icon font (阅读:2441)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:老赵 来源: 老赵点滴
- 标签: iOS MonoTouch
- 发布时间:2011-02-10 22:30:32
- [70] IOS安全–浅谈关于IOS加固的几种方法
- [69] Twitter/微博客的学习摘要
- [64] 如何拿下简短的域名
- [63] Go Reflect 性能
- [63] android 开发入门
- [61] find命令的一点注意事项
- [59] 流程管理与用户研究
- [58] Oracle MTS模式下 进程地址与会话信
- [58] 读书笔记-壹百度:百度十年千倍的29条法则
- [58] 图书馆的世界纪录