圖片來源: 

iThome

看到周遭的人不時拿起iPhone,查火車時刻表、拍照上傳至Facebook、Twitter、玩遊戲甚至算命……,開發者心中自我挑戰的心很容易被勾起,不免要思考一下,是不是該學一下iPhone開發?

會不會有一天公司需要我開發一套手機版的程式?老闆若問起時,到底iPhone還是Android好,我該如何回答?又該從何學習起?技術難度會在哪裡呢?

這些問題不免令人千頭萬緒,我們實際採訪幾位有iPhone和Android程式開發經驗的專家,發現iPhone確實有些學習門檻,畢竟熟悉Objective-C的人才本來就不多。而就Java的開發者而言,上手Android的開發並不困難,畢竟它是使用Java語言,甚至既有的Java ME版程式,可以直接部署到Android手機,不會有太大問題。

開發iPhone程式,物件導向與記憶體管理是必修課

那麼學習開發iPhone程式,需要做哪些準備呢?事實上現在開發智慧型手機應用程式已經比過去簡單很多,以Android手機Nexus One為例,它的處理器有1GHz,記憶體則有512MB,跟開發桌上型應用的感覺已經很類似。

熟悉Mac OS X

不過,開發iPhone程式的第一步,是要擁有一臺Mac電腦,因為開發工具Xcode不支援Windows平臺,所以開發者首先遇到的關卡是要熟悉Mac OS X。Unix或Mac程式設計的開發者在這部分占上風,因為Mac OS基本上就是Unix系統。

學習Objective-C

接著,才是學習程式語言Objective-C。事實上,不僅是臺灣,其他國家的Objective-C人才也都不算多。開發手機遊戲有多年經驗的創意通科技執行長黃凱偉便提到:「手機開發中,iPhone的開發成本最高。」最主要原因也是「物以稀為貴」。

語言學習方面,熟悉C語言的工程師可以省一點力,因為在Objective-C中,可以直接撰寫C程式,唯有使用者介面的部分,一定得仰賴Objective-C。而Java開發者也不需要氣餒,因為iPhone User Interface Framework的精神與Java的Swing類似。

那麼Objective-C的主要學習門檻在哪裡呢?聖藍科技技術長王建興從技術的角度分析:「熟悉物件導向觀念,對於學習iPhone的程式開發有直接的幫助。」Objective-C是C語言的物件導向版,但又和C++不同。它有一些特殊的語法和觀念,所以要運用得好,重點在於觀念。例如動態繫結(Dynamic Binding)及設計模式。至於語法上,Objective-C其實和C++、Java或微軟的C#都不像,例如foo.bar();,在Objective-C寫成[foo bar]。

記憶體管理

除了適應不同的觀念和語法,開發者還必須學習Objective-C的記憶體管理方式。使用者若在操作iPhone軟體時,出現類似當機的情況,事實上,大部分的情況並不是iPhone本身的問題,而是該軟體的記憶體管理沒做好的緣故。

酷米移動傳媒執行長許世杰便笑說:「現在很多開發者預設記憶體是無限大。」也許是受到Java和.NET都有自動化的記憶體回收(Garbage Collection)機制影響,開發者面對記憶體只有128MB或者256MB的iPhone,需要重新學習如何自行控管有限的記憶體。

此外,有些開發者小小抱怨了開發工具Xcode不好用。雖說Apple是一家強調「User Friendly」的公司,但也許還不是設計整合開發環境的專家。

關於相容性,iPhone最單純;Android已簡化Java ME的問題

開發好的程式,最不希望面對的就是,隨著系統或手機的推陳出新,而產生相容性的問題。

這部分Java ME就是最血淋淋的例子,雖然透過JCP(Java Community Process)制定了標準的規範,但各家手機廠商在實作上仍會有差異,很多時候是為了效能而做的調整,就算是同一家手機廠商的產品,不同型號也會產生個別差別。

針對這個問題,新光證券技術總監吳志宏有感而發:「一開始導入手機下單的時候,我們買了20隻手機回來測試。」黃凱偉也提到類似的經驗:「過去開發手機遊戲時,因為Java ME的規格比較紊亂,所以每一款手機都要重新測試。」

在這方面,iPhone「只此一家,別無分號」的好處就浮現了,Apple保證舊版iPhone的程式,在新一代的手機上可以正常執行。

那麼Android呢?網擎資訊產品經理廖享進表示:「可喜的是Google透過Android平臺,讓手機廠商統一硬體的規格,所以Android 1.6到2.1版的相容性很高。」事實上,開發Android應用並不是在寫Java ME程式,而是在寫Java,因為Android對系統資源的操作程度已接近桌上型電腦。

再者,廖享進認為過去昇陽對社群的支援度薄弱,而開發者取得手機的模擬器也不容易。然而現在Google提供充分的文件,也可以簡單擁有模擬器,所以開發者可以取得的支援,已不可同日而語。

雖然截至目前為止,似乎還沒有發生相容性問題。不過,也確實有開發者擔心Android是開放的作業系統,未來難保手機廠商不會因為自身的需求而有所調整,仍可能導致相容性問題重演。

Apple封閉,Google開放,各有好處

除了技術上的考量,也別忘了iPhone針對開發者或公司的身分,以及軟體的內容,必須進行審查。下載iPhone的SDK(Software Development Kit)是完全免費的,但是當開發者希望把程式實際部署到iPhone上測試,就面臨必須由Apple審核身分的問題。

然後,程式開發完成,在上架App Store上前,Apple也必須審核軟體的內容,以避免包含色情與暴力,或者有臭蟲(Bug)的軟體,影響整個市集的品質。

由於iPhone軟體的銷售與安裝,只能透過App Store這個唯一的管道,有志進入iPhone市場的開發者,也不得不買帳。相較於Apple的封閉,Android就顯得開放許多,Android Market沒有審查這回事兒,程式上傳幾個小時後,使用者就可以下載。

事實上,開發者不經由Android Market,也有其他行銷Android程式的軟體市集可以選擇,目前有Android Market、AndAppStore、SlideMe (Mobentoo)、Handango、MMarket、熊貓空間、eoemarket、Appslib、insyde Market、s市集、Camangi Market、MiKandi、aMarket……等,使用者只要在Android手機中安裝該市集的程式,就可以下載裡面的軟體。其實,就算不透過市集,以SD卡複製的方式也一樣可以安裝軟體。

封閉與開放的作法各有好處,由Apple把關且鎖定銷售管道的作法,對消費者而言,可以確保品質;而開發者也省得比較各市集之間的優劣。

而Android的開放作法,則有不設限的好處──開發者不用擔心Apple因為自身利益的考量,而駁回軟體上架的申請。消費者的選擇自由度也高出很多。

Android Market能收費及付費的國家有限,是一大致命傷

不過,就以Google官方的市集而言,現階段Android Market最大的致命傷是Google Checkout的付費機制含蓋範圍有限,目前主要支援的國家在北美和西歐,包括澳洲、法國、德國、義大利、日本、荷蘭、西班、英國及美國等地。

也就是說,因為金流的機制尚不完善,很多國家的開發者暫時無法透過Android Market販售軟體,消費者也無法付費購買軟體。這也是各地推出市集的原因,以遠傳推出S市集為例,在Google Checkout普及至臺灣之前,遠傳有機會藉此搶先透過軟體市集獲利。

而App Store的付費是運用iTunes,這套使用者用以付費下載影音的機制已久,已支援多達77個國家,在這個健全的機制下,消費者不但可以很方便地付費購買軟體,若不滿意也可以退費。

免費軟體也找得到獲利方式

雖然目前在臺灣,Android Market仍沒有Google Checkout提供使用者收/付費,但不代表開發者沒機會賺到錢。王建興分析:「獲利的方式有三種:收費、賺取廣告費、賣序號。」

無論App Store或Android Market,付費軟體可以直接與市集拆帳收到錢。在這方面最需要憂心的是盜版問題,而Apple的封閉性,另一個層面也造成了盜版的困難,且透過iTunes帳號的管制,同一套軟體只能安裝3個以內的裝置中。

而Android Market透過Gmail帳號管制,相關軟體沒有安裝次數的限制,再加上Android是開放的平臺,盜版問題相當嚴重,這些都是開發者不樂見的情況。

不過,這也衍生出其他出路。使用者不難發現,軟體市集上以免費軟體居多,除了像網路下單之類的商業應用外,針對個人開發者,在軟體中放廣告是一個不錯的獲利方式。而且已有廠商推出服務,例如AdMob即是針對手機推出廣告業務的公司,提供iPhone及Android兩種平臺的廣告,開發者只要在軟體中加入該公司的廣告元件,即可依瀏覽數及點擊率收取廣告費。

最後,也有廠商在市集中推出免費的試用軟體,經過一段時間的使用,若希望使用進階功能,或者進入後續更刺激的遊戲關卡,即需向軟體廠商購買序號。這個方法可以省掉與軟體市集拆帳,不過開發者也必須自行處理金流方面的機制。

系統的沙箱設計幫使用者堅守資訊安全

開發企業型應用時,可能會擔心這類應用程式執行上是否有安全性問題。王建興表示:「iPhone和Android都有類似沙箱的設計,一般而言,不用擔心資訊安全的問題。」

沙箱(Sandbox)的設計將限制程式之間不能互通,也不能存取其他程式的檔案路徑。

iPhone 4.0以前的版本限制一次只能執行一個程式,不能多工,這一點雖然多少引發使用者的抱怨,不過站在資訊安全的角度,這樣也就不用擔心軟體執行時,有另一隻執行於背景的程式,會竊走使用者輸入的機密資訊。

手機版Web應用,能更方便地跨平臺

上述都是關於手機應用程式的開發,而現行透過網站提供服務的公司又該怎麼做?有一種方式是提供針對iPhone、Android等手機設計專屬的Web版介面,以延伸既有的服務,網擎資訊便是這樣的例子。

採用Web的作法有一些好處,例如手機的標準不一,一般在iPhone上開發的程式,無法在Android上執行,Android的軟體當然也不可能部署到iPhone上。

更別說還有Symbian、Windows Mobile或者新一代的Windows Phone 7等平臺了。

由於Web服務的用戶形形色色,要若要針對不同手機平臺,開發相對應的程式,實在曠日費時且成本可觀,所以改變版型提供適合手機操作及閱讀的Web服務,似乎是較為可行的方案。

Web的開發難度不亞於手機程式

不過,比起寫Objective-C或Java,開發者可不要認為開發Mobile版的Web應用比較輕鬆省力。廖享進解釋:「如果要圖個方便,我寧願寫Objective-C。」例如隱藏/彈跳工具列的設計,以Objective-C實作輕而易舉,然而在瀏覽器要做出這樣的效果,網擎的工程師就研究了很久。

如果企業考量iPhone的操作習慣,想要在瀏覽器中實現類似的使用體驗,就更是吃力的工作了。廖享進坦言:「在網頁上做到本機的效果,最難!」

其他還包括網路頻寬帶來的限制,畢竟軟體存取手機的硬體,對資源的耗用是直接的。然而網站與手機之間,還隔了作業系統、瀏覽器及Framework等好幾層,如果網頁包含大量資料,為了讓使用者的體驗是順暢的,開發者需要花一些心思,例如運用Ajax階段性地下載,以避免過長的等待時間。

一旦克服了技術及硬體造成的重重障礙,Web服務就可以輕鬆跨越手機平臺造成的門檻了。

以iPhone和Android例,兩者的瀏覽器核心引擎都是Web Kit,所以Web程式的執行,基本上不會有太大的問題,一般而言,只需調整解析度即可。

 

Android與iPhone的影響力分析

 

 

 

30億次

Apple在2010年1月宣布App Store軟體下載次數已超過30億。事實上,在3個月前(2009年9月),Apple宣布下載次數突破20億大關,也就是說,不到100天的時間,增加了10億次。

 

18萬個

自2008年7月App Store推出以來,根據最新數據顯示,已累積超過18萬個軟體。

 

2萬個

根據Google內部統計,Android Market自2008年10月起截至2010年1月止,已有超過2萬個軟體可供使用者下載。

 

60家

目前全世界已有60個電信商,於49個國家,推出26款19種語言版本的Android手機。

 

把原本針對桌面瀏覽器設計的網頁資訊,調整成適合手機瀏覽器閱讀的樣式,難度不亞於開發手機應用程式。因為要在網頁上實現本機程式的操作體驗,並不容易。

 


相關報導請參考「新一代手機開發iPhone vs. Android

熱門新聞

Advertisement