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