01
Nov
三年磨一劍的Xcode 5
Facebook

不同於年年更新的iOS SDK,Xcode 更像是王家衛拍一代宗師般,十年磨一劍。每隔幾年Xcode 才會改朝換代,推出大幅度的更新版本。今年秋天甫上架的Xcode 5,即是繼三年前推出的Xcode 4 後,最大幅度的更新。全新的Xcode,擁有數不盡的新功能,新特色。身為App 創作者的我們,愈能儘快掌握它, 愈能即刻展開未來 一帆風順的開發旅程,以對手望塵莫及的速度,創作出品質更棒的App。

撰文:彼得潘

 

強大的圖片管理工具:Asset Catalog 

以往為了應付各式各樣不同尺寸,不同解析度的iPhone 和iPad,開發App 時我們必須注意以下事項: 

 

1. Retina 圖片檔名以@2x 結尾,例如test@2x.png。

2. 若同時支援iPhone 和iPad,則需於圖片檔名加入device 名稱做區別。比方針對iPad 裝置需以~iPad 結尾,例如test@2x~iPad.png。

3. 若想於4 吋和3.5 吋iPhone 顯示不同圖片,必須額外從程式判斷螢幕尺寸,進而設定不同的圖片。

現在,有了Asset Catalog 的幫忙,一切麻煩事都煙消雲散,迎刃而解了! 每個從Xcode 5 全新建立的專案,預設皆有個Images.xcassets 資料夾。Images.xcassets 即是Asset Catalog 的化身,如其名稱Images 所暗示,所有關於圖片管理的麻煩事,交給它就對了! 

假設我們希望做一個顯示亞洲最帥男人圖片的App。為了公平起見,我們在不同的解析度顯示不同的圖片,於Retina 上顯示劉德華,非Retina 上顯示梁朝偉。但又希望在App 程式裡我們可以採用同樣的一行程式碼來設定圖片,不用費心地命名圖片或是寫程式判斷。

透過Images.xcassets,統一採用self.imageView.image = [UIImage imageNamed:@"handsome"] 設定圖片,實現這個願望不過是三秒鐘的小事罷了。

1. 點選Images.xcassets,顯示Images.xcassets 的管理編輯頁面。 

2. 將劉德華的帥氣照片加到Images.xcassets 的左半邊區塊。

只要將圖片以拖曳的方式放到Images.xcassets 編輯頁面的左半邊區塊,即可加入圖片。此時可以點擊圖片名稱幫圖片改名。到時候程式裡將以此處設定的名稱找尋對應的圖片。在此我們將圖片命名為handsome。

更進化的版本管理

身為App 的開發者,熟悉版本管理是十分重要的。不只可以打破起手無回大丈夫的準則,隨時反悔回到過去某個時間點正確無誤的程式碼版本。在和別人一同開發合作時,還可掌握每個人修改的部分,於App 出問題時盡快地於第一時間找出製造bug 的凶手,將他就地正法,立馬趕出公司。哦,開玩笑的啦,應該是請他修正bug,一同努力做出更棒的App。

在Xcode 5,Apple 感應到了我們對於版本管理的迫切需求,進行大幅度的改進,方便我們更容易地使用版本管理功能。如圖所示,版本管理如今已非昔日的吳下阿蒙,於上方的menu 列現在擁有獨立的Source Control 區塊,方便我們隨時進行版本管理的相關操作,比方切換branch,顯示目前所在branch,將目前於local 端所做的修改整個狠心砍掉等。

對於程式碼的任何一行,現在只要有一丁點的猜測懷疑,皆可立馬按下滑鼠右鍵,從右鍵選單裡點選“Show Blame for Line",即刻看到此行程式碼的始作俑者和修改時間。

效能檢視工具Debug Gauges 

iPhone 效能的好是大家都知道的,我們開發的App 能夠在iPhone 上運行其實很幸福,不需要高深的技術,也不需要智商180,我們即可做出順暢運行的App。但是好還要更好,雖然我們已經比android 順暢許多了,但我們的對手是其它一同在iPhone 上競爭的同類App。為了要比他們表現更好,若是能夠將App 調教到最佳的效能,我們也將擁有更多一分的勝算。

過往為了檢視App 的效能,我們必須千辛萬苦地另外啟動效能檢視 大神Instruments。也因為麻煩,因此很多人就懶得進行效能的調教了。

如今全新的Xcode 5 提供了內建的Debug Gauges,每當我們執行App 時,即可於左半邊Navigator 區塊,切換至Debug Navigator,即時地掌控CPU 和記憶體的使用狀況。 

 

更方便的帳號管理和App 包裝材料管理

從前開發App 叫人煩心的事情很多。除了程式碼之外,如何將App 安裝到實機測試或是包裝出夠格上架的App,都是讓初學者一個頭兩個大的煩心事。現在Xcode 5 提供了開發帳號管理功能,如今我們只要打開Xcode 的Preferences 視窗, 切換 至Accounts 頁面,即可於其中設定App 的開發帳號,下載安裝關於App 開發包裝所需的各種珍貴材料,例如certicate 和prole。 

App 能力的快速切換開關

隨著每年SDK 的推陳出新,我們擁有愈來愈多可以採用和結合的新功能。然而採用新功能往往也伴隨著相關的設定步驟,我們必須仔細研究文件,掌握技術的運用後, 才能將其置入App 裡。如今Xcode 5 也大幅度地幫助我們減輕採用特殊功能的負擔。在Target App 的相關設定頁面,多了一個Capabilities 分頁。此分頁列出各式的SDK 獨門絕技,只要將想要啟動的功能開關打開, Xcode 即會自動幫我們完成相關的設定步驟,於是乎, 我們只要專心於App 開發的本質,程式碼的撰寫即可。 

 

Quick Look 

Mac 上的Quick Look 十分方便,不用再點選App,耐心地等待App 啟動,即可完整預覽文件的內容。現在Xcode 也將Quick Look 的概念巧妙地置入其中,幫助我們更方便地開發App,找出App 的bug。如圖所示,若是想確認UIImage 物件內容為可愛的拉拉熊和iPhone 5c 的合照,而不是技安和Android 的合照,只要設定中斷點,然後將滑鼠游標移動至image 物件上,點選大大眼睛圖示的Quick Look,即可顯示image 物件的圖片預覽。除了圖片以外,像是字串、顏色、Path、網頁等,也是Quick Look 支援的物件類型。在眼睛圖示右手邊的小i 圖示,其實也不可小看。透過它我們可以動態地列印物件,不用再另外地於程式碼補上NSLog,重新啟動App 查看列印結果。

 

Interface Builder 的App 畫面Preview 

隨著iOS 裝置的多元發展,我們開發的App 可以運行的機器也愈來愈多,賺的銀子也愈疊愈高。但是,所謂賺得愈多,責任也愈大。為了確保我們的App在各個裝置, 各個iOS 版本都能運作正常,我們需要費時地在各式的環境測試,無論是透過模擬器還是實機。然而,如果只是想確認畫面的排版是否正常,於Xcode 5 現在有了更方便的方法了。

當App 畫面是透過Interface Builder 來打造時, 現在只要打開Assistant Editor 區塊,點選其上方的menu, 切換到Preview 頁面, 即可立即展示左半邊被選取controller 實際運行的樣貌,完全不用再麻煩地啟動App 檢視畫面。

透過Preview 頁面右下角的三個button,我們還可任意地切換iOS 版本,裝置方向,以及3.5 吋和4 吋的iPhone ,馬上觀察畫面的排版是否於某種case 下出了差池。

 

自動化的超強測試

測試,一直是身為開發者或老闆的我們,心知肚明極為重要,卻又無奈地沒時間也沒錢面對的大事情。測試花老闆的錢,得雇用專門的人對App 做完整仔細的測試。測試花時間,開發者需撰寫額外的程式碼驗證程式的正確性。

有鑑於此,Xcode 5 透過更方便,更自動化的測試整合, 幫助我們克服測試這個天大的難題。

1. 單元測試XCTest 

所謂單元測試,即是將App 的各項功能,細分為可以純粹驗證正確性,不受其它因素干擾的測試。比方計算機App 可以拆出加法的單元測試,驗證加法運算的正確性。在Xcode 5,透過全新的XCTest framework,我們可以更方便的撰寫測試程式。此外,在Navigator 區塊現在更為測試新增專屬的Test Navigator,方便我們管理和進行測試。

2. 凌晨三點鐘自動測試的Continuous Integration 

所謂Continuous Integration,其實不單純只包含測試。它涵蓋了關於測試,build,包裝App 等大小事。簡言之, 它的核心精神在於自動化,它將所有關於App 開發的大小事,只要可以自動化的工作皆攬在身上,幫我們代勞。身為開發者,我們只需負責不能自動化的程式碼撰寫, 其它瑣碎小事就交給Continuous Integration 幫我們處理即可。

Xcode 5 整合了強大的Continuous Integration 功能, 然而要實現Continuous Integration, 除了Xcode 外, 還必須搭配安裝OS X Mavericks Server 的Mac。實際半夜不睡覺,凌晨三點鐘幫我們自動build,包裝,測試App 的幕後藏鏡人,其實是最新版的OS X,Mavericks Server 上的Xcode Service。若是能夠結合Continuous Integration 開發App,即可如圖所示看到過去每一天測試App 的歷史紀錄,凡測過必留下痕跡 ! 打造百分百無bug 的App 終於不再是夢想了! 

 

關於彼得潘

如果我會作詞作曲,我就能成為創作歌手。

我有一絲音感嗎?沒有。

所以,很可惜,我只能當歌手的朋友。

如果給我一天一個App 的負荷,

也澆不熄我對蘋果的熱情。

一天能夠完成一個App 嗎?可以。

所以,是的,我是愛瘋一切為蘋果的彼得潘。

著有App 程式設計入門 (博客來電腦類Top 1)

facebook:http://www.facebook.com/iphone.peterpan