Chapter 1 App Design Basic
Chapter 1 App
Design Basic
如果你是一個設計app的新手,你可能正懷疑該從何處開始著手,在籌劃你的app的初步的想法後,你需要把想法轉變成行動的計劃去實現你的app.從設計的觀點,你需要對於實現想法的過程做一些高階的決定.你也需要設定你的初步的Xcode project以使得發展的過程能更易於進行.
Doing Your Initial Design
有很多方式去設計一個app,而且許多最佳的方式不會牽涉到寫code.一個棒的app由一個棒的想法開始,接著,你把它擴大成更多具有完整特徵的產品描述.在設計的初期階段,這可以幫助你了解你想要你的app去做什麼事.為了實現你的想法,寫下高階特徵的描述將是需要的.根據你對於使用者需求的判斷,對那些特徵定下優先順序.對iOS做一點研究以了解它的能力,以及你可能如何利用這些來達到你的目標.而且,在紙上描繪出一些粗略的介面設計以把你的app視覺化.
你初始的目標是去回答關於你的app的一些非常重要的問題.設定好的特徵組合及粗略的介面設計能幫你思考那些東西是在開始寫code後需要的.在某些時候,你需要把app要顯示的資訊翻譯成一組資料object.同樣地,你的app的外觀對於你如何決定實現你的UI
code時有壓倒性的影響.在紙上(相對於電腦上)做初步的設計,讓你可自由地產生不受限制的答案.
當然,在你開始初步的設計之前,去讀”iOS Human interface Guidelines”是你要做的最重要的事.那本書描述了幾個供你初步設計用的策略.關於如何產生能在iOS運作的好app,它也提供了技巧和指引.你也可讀”iOS Technology Overview”以了解iOS的能力及你如何能使用那些功能去達到你的設計目標.
Learning the Fundamental iOS Design Patterns and
Techniques
不論你在創作那種類型的app,在你開始寫code前,你必須知道一些基本的design pattern和技術.在iOS中,系統的framework提供你的app關鍵的基礎建設,以及唯一用來存取底層硬體的方式(在大部份的狀況下).換言之,framework使用許多特定的design pattern並且假設你熟悉它們.因此,想要知道系統如何能幫你發展的你的app,重要的第一步是去了解這些design
pattern.
以下是你必須知道的一些最重要的design pattern:
l
Model-View-Controller: 這個design pattern控制你的app的整個結構
l
Delegation: 這個design pattern使得在object間傳遞資訊和資料更容易
l
Target-action: 這個design pattern把使用者的互動轉譯成可以在你的app中被執行的button和control
l
Block object: 你使用block去實現callback和非同步的code
精確的及有效率的記憶體管理對iOS
app是重要的.因為和桌上型電腦比較起來,iOS app通常有比較少的記憶體可用,app的首要工作是積極地去刪減不用的object並消極地去建立新的object.使用compiler的一個特性Automatic Reference
Counting(ARC) 的app已有一個非常有效率的管理記憶體的方法,那類似garbage collection但是不會降低太多的效能.如果你不使用ARC,你必須自己藉由retain and release object管理記憶體.
在你的code中,你或許偶而會看到其他的design pattern被使用或你自己去用它們.要對這些你的app將會使用的design pattern和技術有個完整的概觀,參照Cocoa Fundamentals Guide.
Translating Your Initial Design into an Action Plan
iOS假設所有的app是以Model-View-Controller打造出來的.因此,要朝你的目標前進的第一步是為你的app在data及view的部份選擇一個方法.
l
為你的data model選擇一個基本的途徑
n
現有的data model: 若你已經有一個以C語言寫好的data model,你可以直接把那段code整合進你的app中.因為iOS app是以Objective-C寫出的,它可以和其他的C語言寫成的code運作的很好.當然,替非Object-C的code寫一個wrapper也是有好處的.
n
客製一個object data model: 一個客製的object通常混合了一些data(字串,數字,日期,URL,等等)及需要用來管理那些data以確保他們一致性的商業邏輯.
客製的object可儲存一個混合了純量及指向其他物件的pointer.
n
結構化的data model: 若你的data是高度地被結構化的,也就是說,利用了database來儲存,使用Core Data(或SQLite)來儲存data. Core Data提供了一個簡易的物件導向的模型來管理你的結構化的資料.對於一些先進的功能,例如undo及iCloud,它也提供了內建的支援.(SQLite的file不能用來和iCloud聯結)
l
決定你是否要支援document
一份document的任務是去管理你的app在記憶體中的data
model object及協調那些資料對應到硬碟上檔案的儲存.通常document意味著使用者產生的file,但是app也能使用document去管理使用者看不到的file.一個使用document的大優點是,UIDocument class使得與iCloud及本身的檔案系統的互動更容易.對於那些使用Core
data去儲存內容的app, UIManagedDocument
class提供了類似的支援.
l
為你的user interface選擇一個基本的途徑:
n
建造block的途徑: 一個用來建造你的user
interface的最容易的方式是去使用現有的view
object來組合它.View代表視覺化的元素,例如:table, button, text field等等.你可以使用很多view的本來的樣子,但是當需要時,你也能客制化這些標準的view的外觀和行為.你也能使用客製化的view實作新的視覺化元件並且在你的interface中自由地混合那些view及標準的view. View的優點是提供使用者一致的操作經驗並且讓你能很快地使用相當少的code去定義複雜的interface.
n
OpenGL ES的途徑: 若你的app需要常常對螢幕的畫面更新或複雜的呈現畫面,你或許需要直接使用OpenGL
ES來畫出內容.OpenGL
ES主要被使用於遊戲或極度地使用複雜圖形的app中,因此盡可能地需要達到最佳的效能.
Starting the App Creation Process
在制定你的行動計劃之後,是開始寫code的時候了.若你是剛開始寫iOS app,花些時間去探索一下Xcode提供的發展模板(template)是有好處的.這些模板大量地簡化你必須做的工作,使得幾分鐘內便可能完成一個app並執行它.這些模板也允許你客製化你的初始計劃以更精確地支援你的特別需要.為此,當建立一個Xcode計劃時,你在心理應該對以下的問題有了答案:
l
你的app的基本的interface風格是什麼? 不同類型的app需要不同的view及view controller的組合.在知道你如何組織你的user interface後,你能選擇一個最符合你需要的初步的計劃模板.你總是可以在那之後去改變你的user
interface,但是第一步就選了一個最適合的模板使你的計劃更容易開始進行.
l
你想要創作一個通用的app或是一個特別針對iPad或iPhone的app? 創作一個通用的app需要替iPad和iPhone指定不同的view及view controller的組合並且在執行時動態地選擇適當的組合. 通用的app是被建議的,因為那可以支援許多的iOS裝置,但是需要你對不同的裝置分解你的code.要了解通用的app如何影響你想寫的code,參照”Creating a Universal App”.
l
你想要你的app使用storyboard? 在你的user interface中, Storyboard藉由顯示view及view controller及兩著間的轉移來簡化設計的過程. Storyboard在iOS 5及之後的版本被支援,並且在新產品中是被內定成啟用的.若你的app必須被早期的iOS執行,你無法使用storyboard並且應該繼續使用nib檔.
l
你想要在你的data model中使用core data? 某些類型的app自然地使用本身的結構化的data model, 這使他們成為使用Core Data的理想後選人. 要了解Core data及它提供的優點,參照”Core data Programming Guide”.
透過這些問題,你能使用Xcode建立你的初始的project檔並開始寫code.
1.
若你尚未安裝Xcode,去安裝它並架構你的發展團隊.有關設定你的發展團隊及準備Xcode環境的詳細資訊,參照”App Development Overview”.
2.
建立你的初始的Xcode project.
3.
在寫任何的code之前,產生並執行你的新的Xcode project.把你的app的目的地設為iOS simulator以使你能看它執行.
每一個新的Xcode project讓你從一個全功能的(僅管無特色)app開始.app自己本身應該可以執行且顯示內定的view(在storyboard或nib檔),這樣的app可能不是那麼引人注意.這樣的app能執行是因為UIKit提供給你的基礎架構.這個基礎架構初始化你的app,載入初步的interface檔,並且向系統登記你的app以使得app能開始處理event.有關這個基礎架構及它能提供的功能的更多資訊,參照”The Core Objects of Your App”及”The App Launch Cycle”.
4.
開始寫app的主要code
對於新的app,一開始,你或許想要產生和你的app的data model相關的class.這些class通常和你的app的其他部份沒有依附的關係,是你開始就能用的東西.關於建造你的data model的方式,參照”The User Interface”
你或許也想從你的user interface的設計開始玩起,藉由在你的主要的storyboard或nib檔中加入view.從這些view中,你也可以開始確認在你的code的那些地方要對相關的interface改變反應.要對user interface做個概觀及他們要如何適當地在你的code中,參照”User Interface”.
若你的app支援iCloud,你應該在初期就在你的class中併入iClode的支援. 關於在你的app中加入iCloud的支援,參照”iCloud Storage”
5.
加入對app狀態改變的支援
在iOS中,app的狀態了它在什麼時候時可以被允許做什麼事.app的狀態是被你app中的高階object管理著,但也可能影響其他的object.所以,你須要考慮目前app的狀態如何影響你的data model及view code,並且適當地更新那些view code.有關app的狀態及app如何在foreground及background中執行,參照”App States and Multitasking”.
6.
產生需要支援你的app的resource
被提交到App Sore的app被期望有特定的resource(例如icon和開始執行的圖片)去使得整體的user
interface更好.被分解的很好的app也大量地使用resource檔以避免把code和code操作的data放在一起.如此方式的分解使得你容易地去把app區域化和調整它的外觀,以及其他的任務而不需要改寫code.關於在iOS中可找到的resource類型及如何使用他們的資訊,參照”The App
Bundle”及”App-Related
Resource”.
7.
若需要的話,為你的app實作任何特殊的行為.
有很多方法可修改你的app啟動或和系統互動的方式.有關最常用的客製化類型,參照”Advanced App Tricks”.
8.
加入進階的特殊功能使你的app獨特
iOS包括了許多其他的framework來管理:多媒體,高階的畫面呈現,地圖及許多其他的特殊功能.要對這些你可以在app中引入的framework和特殊功能做一個概觀,參照”iOS Technology Overview”.
9.
對你的app做一些基本的效能調整.
所有的iOS app應該被盡可能地調整到最佳的效能.調整過的app執行的更快但也使用系統的resource.關於集中在調校過程的領域,叁照”Performance Tuning”.
10.
重覆
發展app是一個重覆的過程.隨著你加入新的功能,你可能需要去重新檢視某些或所有前面的步驟以對你目前的code做些調整.
留言