|
MonoMac是面向Mac OSX API的C#綁定,其API設(shè)計(jì)主要受到了MonoTouch的啟發(fā),后者可以基于Mono開發(fā)原生的ios應(yīng)用程序。MonoMac套件的目標(biāo)之一,也是發(fā)布獨(dú)立的 .app應(yīng)用程序,讓最終用戶擺脫對(duì)Mono的依賴。MonoTouch的成功則是一個(gè)良好的基礎(chǔ),于是Mono開始將Cocoa API使用C#和.NET世界中的模式與慣例用法表現(xiàn)出來,并提供開發(fā)人員整套Cocoa應(yīng)用程序的開發(fā)工具。
Mono之父Miguel de Icaza表示,.NET從一開始便設(shè)計(jì)成為一個(gè)易于互操作的框架,他對(duì)于跨運(yùn)行時(shí)及框架的無縫通信提供了許多高級(jí)的支持,這對(duì)創(chuàng)建Cocoa API的綁定很有幫助。MonoMac的設(shè)計(jì)原則與MonoTouch非常接近,它充分考慮到.NET程序員的習(xí)慣需求,例如使用Lambda表達(dá)式和委托來表示Objective-C API中的“block”。
Cocoa的API由兩部分組成,一部分是基于C的API,例如AudioToolbox、CoreGraphics、CoreFundation和CoreText,它們利用P/Invoke的方式直接封裝成C#類。而在UI層面上則是大量的Objective-C編寫的API,例如Foundation和AppKit。MonoMac提供了新的一套新的綁定引擎MonoMac.ObjCRuntime,以及btouch綁定生成器。
MonoMac僅僅是一套用于開發(fā)OSX應(yīng)用程序的類庫。MonoMac團(tuán)隊(duì)同樣發(fā)布了一套基于MonoDevelop的開發(fā)工具,其生成結(jié)果便是Mac OS下的app應(yīng)用程序包。此外,Mono 2.8還包含了一個(gè)新工具叫做“Mono打包器(bundler)”。這個(gè)打包器可以檢查你的.NET應(yīng)用程序,并將其依賴的部分打包在一起。這個(gè)技術(shù)如今已經(jīng)用于OSX版本的Banshee項(xiàng)目(一款基于Mono和Gtk#的播放器),這樣發(fā)布后的應(yīng)用程序無需在目標(biāo)機(jī)器裝有Mono框架。
MonoMac使用MIT X11許可協(xié)議發(fā)布。源碼分為兩部分:monomac和maccore,都可以在GitHub上獲得。前者包含了面向MacOS的綁定,而后者則包含了MonoMac和MonoTouch共用的代碼。
看完上面這段介紹,聰明的你知道主角是MonoMac了,下面我向大家介紹下開發(fā)環(huán)境的搭建和第一個(gè)Helloworld程序的開發(fā):
第一步:需要有一臺(tái)Mac 電腦,可以采用虛擬機(jī)搭一個(gè)也行,為了更好的操作體驗(yàn)還是準(zhǔn)備一臺(tái)Mac的機(jī)器比較好,2011年1月14日蘋果優(yōu)惠打折,毫不猶豫的就在香港apple商店上下單買回來一個(gè)MacBook Air(CPU:1.86 GHz Intel Core 2 Duo, 4GB RAM,128G SSD),價(jià)格10000HK$。
第二步:Mac開發(fā)環(huán)境Xcode和Monodevelop的安裝,當(dāng)然在安裝mac系統(tǒng)時(shí),如果選擇IT用戶,很多開發(fā)系統(tǒng)也就自動(dòng)安裝好了,比如jdk、maven、svn,Python的環(huán)境, 然而不是所有的軟件開發(fā)環(huán)境都會(huì)安裝好,比如xcode 、ios sdk 。
1、到,選擇 Mac 和ios 開發(fā),登陸后就可以下載Mac開發(fā)工具,里面包括Xcode,這個(gè)工具是免費(fèi)的,這點(diǎn)比微軟的政策好啊,就是要善待開發(fā)者。Xcode的環(huán)境和 Visual Studio 非常的相像,有Visual Studio的使用經(jīng)驗(yàn)非常容易入門.。
下載完軟件,點(diǎn)擊運(yùn)行如圖:
2、上邊的那幅圖中有xcode和ios SDK的安裝說明,下面那幅圖是軟件安裝的圖標(biāo),點(diǎn)擊下邊的Xcode and ios SDK開始安裝。
3、一路繼續(xù)就可以了
4、下載和安裝 MonoDevelop 2.4, 這是Mono的一個(gè)IDE ,是開源和免費(fèi)的,他要求 Mono 2.4 和 GTK。 Mono安裝過程十分普通,而MonoDevelop的安裝方式對(duì)于Windows用戶可能有些特別。在加載了dmg文件以后,會(huì)彈出這樣一個(gè)界面:
- 根據(jù)提示,此時(shí)您只需要將MonoDevelop的圖標(biāo)拖至右側(cè)目錄中就可以了。
- 下載和安裝 MonoMac。 MonoMac的插件安裝參考http://www.mono-project.com/MonoMac#Obtaining_MonoMac也很簡單。安裝完MonoMac的插件,在MonoDevelop的新建項(xiàng)目的對(duì)話框上就有了MonoMac的項(xiàng)目類型。
下面我們就用MonoDevelop和Xcode一起使用來完成第一個(gè)Mac Helloworld程序的開發(fā),下面的內(nèi)容主要基于這篇博客http://www.satter.org/2010/09/NET-development-for-os-x.html,所有用到的圖片也是這篇博客的,我只是按照這篇博客的內(nèi)容熟悉了一下開發(fā)環(huán)境,其中也碰到了一些問題,我會(huì)以紅色的文字進(jìn)行標(biāo)識(shí),相信也是你體驗(yàn)的時(shí)候會(huì)碰到的問題,不過這篇博客需要翻墻才能閱讀,你懂的:
首先需要?jiǎng)?chuàng)建一個(gè)MonoMac的工程,我們命名為HelloMonoMac:
MonoDevelop是英文的,是因?yàn)樵谥形牡腗ac系統(tǒng)下,MonoDevelop界面上的中文會(huì)亂碼,通過MonoDevelop—〉Preferences –>Visual Style –>General—>User Interface Language 選擇English就可以解決。
創(chuàng)建的項(xiàng)目有下面文件:
- info.plist - 一個(gè)文本文件包含應(yīng)用程序的一些屬性字符串,類似于.NET項(xiàng)目的AssemblyInfo.cs,具體參考 reference guide.
- Main.cs - Main.cs里包含了項(xiàng)目的啟動(dòng)代碼.
- MainMenu.xib - 菜單資源和代碼文件. 具體參考Interface Builder User Guide
- MainWindow.xib - 主窗口的界面文件,具體參考Interface Builder User Guide 而MainWindow.xib.designer.cs文件則是MonoDevelop根據(jù)xib文件中的標(biāo)記所自動(dòng)創(chuàng)建的C#代碼,在絕大部分情況下我們不會(huì)去修改它。
MonoMac使用Xcode的模式構(gòu)建UI應(yīng)用,Xcode使用MVC模型。XIB文件中包含UI和你的代碼,也就是View。你的控制器和模型用.NET來寫,也就是你必須使用Xcode來構(gòu)建UI,因此必須安裝Xcode。
使用Interface Builder進(jìn)行界面的布局,在MonoDevelop的項(xiàng)目上雙擊MainWindow.xib文件,便會(huì)打開Interface Builder。我的使用過程中卻發(fā)生這樣的一件事,無論怎么雙擊也打不開Interface Builder,開始以為是MonoDevelop的問題,就使用Xcode創(chuàng)建一個(gè)項(xiàng)目,也是一樣的問題,最后是通過下面的方法解決的:通過Finder找到Developer/Applications/Interface Builder 先運(yùn)行Interface Builder,就可以了。
下圖有4個(gè)窗口,左為Library窗口(近似于VS中的Toolbox),可以通過拖拽方式將控件加入到窗口里去;中間上方是可視化的UI編輯器,下方則是對(duì)象管理器,顯示了界面中定義的對(duì)象;右側(cè)便是用來修改屬性的Inspector窗口(近似于VS中的Properties窗口):
在Library里找到NSButton,把它拖到中間的UI 編輯器窗口上,修改“Button”為“點(diǎn)擊我”:
下面添加一個(gè)NSTextField,方法和NSButton類似,我們要做的一件事就是按下按鈕的時(shí)候,修改TextField的文本顯示:
下一步是建立UI和控制器之間的接口,首先是一個(gè)更新文本的屬性,然后是通過一個(gè)事件 控制按鈕的點(diǎn)擊,控制器來我們使用C#代碼進(jìn)行編寫。到Library找到MainWindowController
并在下方下拉框中選取Outlets,并使用下方加號(hào)添加一個(gè)id,修改為NSTextField:
下一步是建立label和NSTextField之間的映射,這是個(gè)比較有趣的操作。回到MainWindow.xib窗口,選中“File’s owner”,在屬性窗口中選擇第五個(gè),一個(gè)向右的箭頭按鈕。再將label右側(cè)的小圓點(diǎn)拖動(dòng)至NSTextField,當(dāng)你釋放鼠標(biāo)你要看你NSTextField標(biāo)簽所聯(lián)系在一起:
快完成了。下一步是在Interface builder建立一個(gè)按鈕點(diǎn)擊事件。 到Library的窗口。確定它仍然顯示MainWindowController。選取Action。點(diǎn)擊“+”和增加buttonClicked 類型為 NSButton。在屬性窗口中,您應(yīng)該看到一個(gè)新收到行動(dòng)稱為buttonClicked。把它和在畫布上的按鈕按照標(biāo)簽相同的方法建立關(guān)聯(lián)。
最后一步是保存我們的界面修改結(jié)果,這一步很重要哦,因?yàn)镸onoDevelop是根據(jù)xib的內(nèi)容,自動(dòng)生成了相關(guān)的C#代碼。
現(xiàn)在我們回到MonoDevelop項(xiàng)目中,將下面的代碼加入到MainWindow.Controller.cs文件。關(guān)鍵是添加一個(gè)方法——buttonClicked,也需要NSButton。程序就會(huì)按鈕點(diǎn)擊的時(shí)候觸發(fā)請(qǐng)求該這個(gè)方法:
int count = 0;
partial void buttonClicked(NSButton sender)
{
label.StringValue = string.Format("Button clicked {0} times.", ++count);
}
NET技術(shù):OS X 上使用.NET開發(fā)應(yīng)用程序,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。