讓我們開(kāi)門(mén)見(jiàn)山吧:做一個(gè)iPhone應用需要花多少錢(qián)?做一個(gè)蘋(píng)果應用軟件需要花多少錢(qián)?做一個(gè)iPhone應用需要花多少錢(qián)?做一個(gè)蘋(píng)果應用軟件需要花多少錢(qián)? 就是這個(gè)最常見(jiàn)的問(wèn)題,我的很多朋友(大多是些西裝革履的商務(wù)人士),還有我那些個(gè)對技術(shù)一知半解的客戶(hù)們,他們都問(wèn)過(guò)我這個(gè)的問(wèn)題。通常,我會(huì )先給出一個(gè)大致的報價(jià),這個(gè)報價(jià)并沒(méi)有細致到需要簽合同確認每一個(gè)功能點(diǎn)的地步。即便是這樣,每當的我報價(jià)一出口,對方都毫無(wú)例外的給驚著(zhù)了(當然不是因為便宜)。 說(shuō)實(shí)話(huà),我沒(méi)有獅子大開(kāi)口??纯碨tackOverflow上這個(gè)著(zhù)名的帖子吧,討論的是開(kāi)發(fā)Twitterific這樣一款應用需要多少錢(qián),后來(lái)討論范圍擴展到開(kāi)發(fā)一個(gè)iOS應用的合理費用范圍。雖然這個(gè)帖子是在2008年發(fā)布的,而帖子的最佳答案是由一名來(lái)自Twitteriffic的開(kāi)發(fā)人員于2010年回答的,但是時(shí)至今日,帖子里面討論的數字仍然是很靠譜的,而且我預計到2012年底依然有效。而我的報價(jià)和這個(gè)帖子里面的數字比起來(lái),簡(jiǎn)直是小巫見(jiàn)大巫了。 現在的趨勢是,什么公司什么業(yè)務(wù)都想搞個(gè)iOS客戶(hù)端開(kāi)發(fā),并且這種趨勢在2012年看似依然火爆。所以我想起來(lái)寫(xiě)這篇博文,我想說(shuō)一下開(kāi)發(fā)一個(gè)iOS應用會(huì )碰到的各種細節問(wèn)題和橫生的變數,借此解釋為什么iOS應用開(kāi)發(fā)成本這么貴。如果你在考慮搞一個(gè)iOS應用,而你本身是搞業(yè)務(wù)而不是做技術(shù)的,如果你目前正在招標或者僅僅是想了解一下,那我這篇博會(huì )對你有幫助。當然,我說(shuō)的東西并不局限于iOS應用開(kāi)發(fā),對Android、Windows Phone或者是Blackberry(如果RIM還能活的話(huà))等移動(dòng)應用平臺基本上也是適用的。 開(kāi)發(fā)一個(gè)iOS應用沒(méi)有那么容易 開(kāi)發(fā)之前需要仔細考慮的 別做拍腦瓜的決策,在開(kāi)工之前你需要考慮的比你想象的要多。我通常會(huì )幫助或者指導客戶(hù)把以下幾個(gè)要素都過(guò)一遍: 一:和客戶(hù)談他們的移動(dòng)app開(kāi)發(fā),最讓我吃驚的是他們從來(lái)沒(méi)有想過(guò)支撐一個(gè)iPhone應用運行,背后需要涉及到的方方面面。他們想象中的iPhone是獨立存在于這個(gè)宇宙的,是如此的簡(jiǎn)單,以至于他們要我很快就給出一個(gè)項目預算報價(jià),而不用討論諸多細節。我問(wèn)他們:“你們是否考慮過(guò)后臺服務(wù)器的事情?你們的應用需要和后端服務(wù)器做數據通訊?” 什么,聽(tīng)不懂?好吧,我用地球人的語(yǔ)言再把這個(gè)問(wèn)題講 一遍:“你們的應用不是需要用戶(hù)注冊嘛,你們考慮過(guò)把用戶(hù)的數據存放在哪里了嗎?我們需要一個(gè)地方去保存這些以后會(huì )用到的數據?!?第一次碰到這樣的客戶(hù)時(shí),哥簡(jiǎn)直就怒了。后來(lái)我發(fā)現這不是客戶(hù)的錯:我是搞編程的,CS架構對我來(lái)說(shuō)就像吃飯睡覺(jué)一樣是不假思索的東西,而我的客戶(hù)盡是些高富帥,他們懂個(gè)毛CS架構! 所以,如果你不大懂技術(shù),那請仔細聽(tīng)我說(shuō):如果你想做的移動(dòng)應用需要用戶(hù)注冊和登錄,或者你想隨時(shí)控制移動(dòng)應用的一些輸出,甚至是你僅僅是需要一個(gè)用戶(hù)反饋意見(jiàn)調查表這么簡(jiǎn)單的功能,那么,你得搞一臺后端服務(wù)器。 二:好了,現在你知道你需要一臺后端服務(wù)器。同時(shí)你還需要想辦法讓你的iOS應用和你的服務(wù)器能夠對話(huà),就是相互間接收數據什么的。不,這個(gè)問(wèn)題不是簡(jiǎn)答靠什么標準的即插即用的東東就能解決的,不是你們想象的那樣!所有的東西都需要定制化開(kāi)發(fā),這就好比發(fā)明一門(mén)語(yǔ)言:你希望你的服務(wù)器和你的應用之間能夠通過(guò)一種語(yǔ)言溝通,但是你不希望其他人聽(tīng)得懂這門(mén)語(yǔ)言。 用行話(huà)說(shuō)這就是制定服務(wù)器端API接口,或簡(jiǎn)稱(chēng)API。這些API應該在開(kāi)發(fā)iPhone客戶(hù)端之前就到位了。為什么?因為你必須先規定好一門(mén)語(yǔ)言的單詞和語(yǔ)法,然后才能用這門(mén)語(yǔ)言說(shuō)話(huà)吧???好了,這就帶出了第三點(diǎn)—如何開(kāi)發(fā)這些API。 三:APP定制是項目成功的一半(反之亦然),所以千萬(wàn)不要掉以輕心。你要考慮你的業(yè)務(wù)數據模型、業(yè)務(wù)流程、調用業(yè)務(wù)需要提供的參數、特定事件發(fā)生時(shí)數據間該如何互動(dòng)等等。簡(jiǎn)單來(lái)說(shuō),我們要做的就是開(kāi)發(fā)一個(gè)網(wǎng)站,上門(mén)跑著(zhù)你的業(yè)務(wù)流程,只不過(guò)這個(gè)網(wǎng)站的所有運行結果都不是通過(guò)網(wǎng)頁(yè)形式展現出來(lái),而是呈現在一行行的文本和數字中。舉個(gè)例子:一個(gè)登錄成功的反饋?lái)?yè)面僅僅包含YES一個(gè)單詞。 iPhone應用需要訪(fǎng)問(wèn)這些預先定義好的接口,并且按預定義格式提供必要的輸入(比如用戶(hù)名和密碼),然后要對服務(wù)器端的反饋(YES或者NO)做出解析處理。所以,沒(méi)有什么移動(dòng)應用能夠自動(dòng)的含有用戶(hù)注冊和登錄功能。 服務(wù)器端開(kāi)發(fā)需要考慮的問(wèn)題太多了:選擇服務(wù)器,選擇用什么語(yǔ)言開(kāi)發(fā),主機放在哪里才能增加訪(fǎng)問(wèn)速度,等等,這里我就不展開(kāi)了。如果這一切對你來(lái)說(shuō)很陌生,那么你最好去問(wèn)問(wèn)團隊里的技術(shù)負責人,或者干脆讓開(kāi)發(fā)人員做決策。 四: 所以,關(guān)于服務(wù)器端API,你或者讓自己的技術(shù)團隊把它開(kāi)發(fā)好,再將完善的API文檔交給iPhone應用開(kāi)發(fā)人員;或者你支付iPhone應用開(kāi)發(fā)人員額外的報酬來(lái)搞定這些。你找的iPhone應用開(kāi)發(fā)人員可能會(huì )服務(wù)器端開(kāi)發(fā)也可能不會(huì )。如果他會(huì )的話(huà),我建議最好讓他也同時(shí)負責服務(wù)器端開(kāi)發(fā),因為他最清楚iPhone應用中需要哪些服務(wù)器端API。 如果你的服務(wù)器端API已經(jīng)存在了,那么除了向iPhone應用開(kāi)發(fā)人員提供相關(guān)文檔之外,你還要考慮讓他能夠便捷的同服務(wù)器開(kāi)發(fā)團隊溝通,因為大多數情況下,iPhone應用需要在已有API基礎上增加一些新的接口。 現在我們來(lái)看看iPhone應用開(kāi)發(fā)本身 扯了大半天,我們終于開(kāi)始談iPhone應用開(kāi)發(fā)本身了。一般來(lái)說(shuō),iOS平臺上做所有事情都不能隨心所欲。你最好在開(kāi)發(fā)人員寫(xiě)代碼之前把所有的需求都確認好好。這和開(kāi)發(fā)網(wǎng)站不一樣,按照實(shí)現簽訂的合同開(kāi)發(fā)iOS應用,開(kāi)發(fā)過(guò)程中對需求變更的容納度可能很低: 用戶(hù)界面:無(wú)論你打算采用iOS標準界面還是自定義元素,在開(kāi)發(fā)開(kāi)始前一定要確認清楚,因為應用的程序架構是根據界面和用戶(hù)使用流程來(lái)設計的。一個(gè)很好的例子就是在界面底部使用了iOS標準的標簽欄(Tab Bar),此后如果你想讓標簽欄里面的圖標變成彩色的,這個(gè)代碼改動(dòng)量可沒(méi)你想象的那么??! 代碼之間的耦合:如果是開(kāi)發(fā)網(wǎng)站,你可以隨意的添加一個(gè)頁(yè)面或者一處鏈接。做iOS應用開(kāi)發(fā)就沒(méi)有那么簡(jiǎn)單了,很多東西一開(kāi)始都要設計好,后期的一處改動(dòng)會(huì )牽連很多東西,具體原因是你無(wú)法理解的。iOS應用的代碼寫(xiě)好之后,再改動(dòng)行不行?行!但必須小心。 這就像設計電路板一樣, 如果你不小心把那根線(xiàn)搭錯了,整塊電路板就會(huì )不工作。有人說(shuō)架構優(yōu)良的程序可以有很高的延展性,那純屬紙上談兵。在A(yíng)bout屏幕上添加一個(gè)電子郵件按鈕可能只需要幾行代碼的工作量,而添加一個(gè)轉發(fā)到新浪微薄的按鈕(譯者注:原文是添加一個(gè)Facebook Like)就完全不是那么簡(jiǎn)單的事兒了! 讓一個(gè)iPhone應用同時(shí)也支持iPad:如果要評選最坑爹“需求變更”,那么這個(gè)絕對是當之無(wú)愧的。理由很簡(jiǎn)單:支持iPad根本不是TMD什么附加功能!iPad應用基本上都比iPhone應用來(lái)得要復雜,界面設計和用戶(hù)體驗也大不一樣。我問(wèn)你,制造一輛電動(dòng)自行車(chē),然后把它改裝成一部燒汽油的摩托車(chē),這能是一回事兒?jiǎn)幔??電?dòng)自行車(chē)跟摩托車(chē)看起來(lái)是很像,但是制造它們完全是兩碼事。 拿廣受歡迎的Facebook官方應用來(lái)說(shuō),它的iPhone和iPad版本看似相似,實(shí)際用戶(hù)操作流程完全不同。不僅僅是界面上的不同會(huì )帶來(lái)額外的工作,對后臺服務(wù)器API的需求也可能不一樣。拿我熟悉的一個(gè)應用Denso來(lái)說(shuō)(我熟悉它因為這是我開(kāi)發(fā)的),它的iPad版本比iPhone多了幾個(gè)功能,這些都需要額外的服務(wù)器端API來(lái)支持。記住,iPhone和iPad應用的用戶(hù)體驗需求是完全不一樣的。 準備好開(kāi)始了嗎? 希望此文能夠幫助你和你的團隊了解移動(dòng)應用開(kāi)發(fā)幕后的方方面面。除非你們要做一個(gè)像計算器那么簡(jiǎn)單的單機應用,否則你們很難用極低的成本搞定。綜上所述,如果你覺(jué)得外包成本太高,那你只好招人自己開(kāi)發(fā)。 當然,如果你決定了要外包移動(dòng)應用開(kāi)發(fā),那么我還要提醒一點(diǎn):公司政治。如果你是在一家大公司或者有著(zhù)嚴格制度的機構里面干活,那么幫助合同開(kāi)發(fā)者搞定那些個(gè)規章制度上的繁文縟節,對你來(lái)說(shuō)是非常重要的一項工作,必要的時(shí)候甚至可以做一些政策上的變通。 我同幾個(gè)大型企業(yè)客戶(hù)接觸過(guò),當我要求看他們的服務(wù)器端數據接口的時(shí)候,他們流露出很不安的表情。我想這或許是因為他們受制于公司規定而不能透露信息,這無(wú)可厚非;或者他們還沒(méi)有想好這種情況下該如何操作;或者他們的品牌制度蛋疼到需要在移動(dòng)應用的每個(gè)屏幕上都擺著(zhù)公司logo!最終我沒(méi)有和這樣的企業(yè)客戶(hù)合作,因為我無(wú)法想象如果有一天我需要增加一些服務(wù)器端API接口的話(huà),和他們的規章和流程折騰,那將會(huì )是多么悲劇的事情。嘉興app定制公司 m.fj256.com