VS中使用MonoTouch開發(fā)iOS應(yīng)用程序 配置環(huán)境
在Visual Studio中使用MonoTouch開發(fā)iOS應(yīng)用程序 配置環(huán)境是本文要介紹的內(nèi)容,前段時間在工作機(jī)上裝了Mac OS X,這主要是因為我最近需要開發(fā)iPhone應(yīng)用程序。
雖然Xcode,Objective C一定是開發(fā)iOS應(yīng)用程序的主流,但是經(jīng)過一番考慮,我還是決定嘗試一下使用MonoTouch進(jìn)行開發(fā)。MonoTouch是Novell公司基于開源的Mono平臺構(gòu)建的一套iOS開發(fā)環(huán)境,使用MonoDevelop作為代碼編寫工具。不過目前的MonoDevelop較之Visual Studio可謂“螢火之光比皓月之明”,甚至還有無法輸入中文的低級問題。因此,至今我所有在Mono上運(yùn)行的代碼其實都是用Visual Studio寫的,這次自然也不例外。不過,這似乎并不是件非常直接的事情……
什么是MonoTouch
Mono是由Novell提供的.NET跨平臺執(zhí)行環(huán)境,無論別人如何進(jìn)行FUD,我使用下來對Mono的感覺很不錯,自認(rèn)為也有足夠的理由來支持我的觀點(diǎn),如今無論是微軟Mix大會還是社區(qū)類型的NDC 2010都有Mono的內(nèi)容(尤其是后者)。在我看來,如果沒有嘗試過Mono就發(fā)表的猜忌就很難令人接受了。
Mono使用的授權(quán)方案允許第三方基于它上構(gòu)建商業(yè)應(yīng)用程序,MonoTouch便是其中的典型(還有哪些?自己看吧)。MonoTouch是Novell公司的產(chǎn)品,可以讓開發(fā)人員在.NET環(huán)境下開發(fā)iOS應(yīng)用程序(包括iPhone 4和iPad),支持最新的iOS SDK 4.1。
這樣.NET開發(fā)人員就可以利用現(xiàn)有的知識來開發(fā)iOS應(yīng)用程序,如.NET 3.5中的絕大部分類庫以及C# 3.0。例如,之前有同事抱怨Android里的API沒法方便地使用SOAP協(xié)議(似乎iOS下也有不便),但是在MonoTouch中,一切的一切都是最常見的Add Web Services,或是用WCF的svcutil.exe便可直接生成代理。我們同樣可以復(fù)用大量.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。當(dāng)然,尤其是UI方面,MonoTouch還是使用了傳統(tǒng)iOS應(yīng)用程序的架構(gòu),包括它的MVC驅(qū)動方式。因此,即使您使用MonoTouch,最好也要能夠看懂簡單的Objective C代碼,因為SDK提供的文檔和大量的示例都是用它來實現(xiàn)的。
眾所周知,Mono使用JIT(Just-in-Time)編譯來執(zhí)行IL代碼,JIT代表了在運(yùn)行時動態(tài)生成原生代碼,但是iOS不允許這么做。因此,MonoTouch實際上是使用了AOT(Ahead-of-Time)編譯方式,真正部署在機(jī)器上時已經(jīng)是原生代碼了。此外,MonoTouch還提供了一個Linker,它只會將SDK及我們自己編寫的代碼中,真正使用到的部分靜態(tài)鏈接至應(yīng)用程序中,這削減了應(yīng)用程序的體積。
從中我們可以看出,使用MonoTouch開發(fā)出來的應(yīng)用程序,其實和普通使用iOS SDK開發(fā)出的應(yīng)用程序并沒有什么區(qū)別,都是完全獨(dú)立運(yùn)行的。當(dāng)然,這也是因為MonoTouch將一個Runtime塞入應(yīng)用程序內(nèi)部的關(guān)系,這會給應(yīng)用程序的體積帶來大約5MB的增長,壓縮后(也就是用戶真正需要下載的體積)大約是3MB。
除了MonoTouch以外,用于Android開發(fā)的MonoDroid也已經(jīng)進(jìn)入了beta階段,已經(jīng)向一些開發(fā)人員提供試用版本了。這意味著,在不久的將來,C#及.NET類庫將成為Windows Phone,iOS,Android三大移動平臺上的跨平臺開發(fā)工具。關(guān)于MonoTouch的更多消息,您可以關(guān)注NDC 2010上的相關(guān)演講。
在Windows和Mac OS X中共享文件
MonoTouch的開發(fā)工具是MonoDevelop和Interface Builder,后者用于編輯應(yīng)用程序中的UI文件。不過編寫C#代碼的神器終歸是Visual Studio,即便是最簡單的Express版本在代碼編寫方面也勝出MonoDevelop很多,更別說是經(jīng)過增強(qiáng)的高級版本了。因此,我打算使用Visual Studio編寫C#代碼,而使用Interface Builder開發(fā)UI界面。不過我們要做的第一件事情是在Windows和Mac OS X之間共享源文件。這里我繼續(xù)基于之前Win7 + VirtualBox + Snow Leopard的環(huán)境進(jìn)行配置,您也可以使用相同的方法連接兩臺獨(dú)立的機(jī)器。
由于Mac OS X是在虛擬機(jī)上,我選擇將源文件放在Windows里,并在Mac OS X上訪問。首先,我們在Windows上共享一個目錄,這里我將整個E盤共享給vbox賬號,取名為host-e,并賦予完全控制權(quán)限:
然后在Mac OS X中打開Finder,在Go菜單中選擇Connect to Server:
在彈出的對話框中輸入Windows的IP:
點(diǎn)擊Connect,并在下一個對話框中輸入用戶名的密碼(注意這里需要包含機(jī)器名):
點(diǎn)擊Connnet,此時對話框會列出這個賬號的共享內(nèi)容:
于是我們選擇host-e,并點(diǎn)擊OK。此時,您會在Finder的Shared欄目中訪問到共享的內(nèi)容,其中的projects目錄是這里的關(guān)鍵:
我將所有的項目都存放在e:\projects目錄中,接下來也不例外。為了方便起見,我在Mac OS X的home目錄下建立一個軟鏈接,指向共享中的projects目錄
ln -s /Volumes/host-e/projects ~/Projects此時我們就能在home目錄下看到Projects文件夾了,而在各種應(yīng)用程序中,我們可以使用~/Projects來訪問其中的內(nèi)容:
自然,其他方式也沒有問題,您只要找到適合您自己的最合適的方式即可。例如,我現(xiàn)在提到的共享方式要求兩臺機(jī)器通過網(wǎng)絡(luò)互連,如果您無法實現(xiàn)這點(diǎn),也可以借助如Dropbox這樣的同步工具,其實也非常方便。
安裝MonoTouch
要安裝MonoTouch,首先您必須安裝Mono,MonoDevelop,iOS SDK。我的配置是:
- Mono 2.6.7
- MonoDevelop 2.4
- iOS SDK 4.1
Mono和iOS SDK的安裝過程十分普通,而MonoDevelop的安裝方式對于Windows用戶可能有些特別。在加載了dmg文件以后,會彈出這樣一個界面:
根據(jù)提示,此時您只需要將MonoDevelop的圖標(biāo)拖至右側(cè)目錄中就可以了。
隨后,您便可以安裝MonoTouch了。MonoTouch是商業(yè)產(chǎn)品,不過您可以免費(fèi)下載它的試用版,無限期使用。不過試用版只能在模擬器上運(yùn)行調(diào)試,如果需要在真機(jī)上運(yùn)行測試、打包、甚至發(fā)布至AppStore,則需要購買授權(quán)。企業(yè)用戶自不必說,MonoTouch針對個人用戶的授權(quán)費(fèi)用399美金,如果您真有制作應(yīng)用程序的好點(diǎn)子,那這點(diǎn)錢實在不算什么了。
小結(jié):在Visual Studio中使用MonoTouch開發(fā)iOS應(yīng)用程序 配置環(huán)境 (上)的內(nèi)容介紹完了,希望本文對你有所幫助。請閱讀: