在五月份,我花了大概三個星期的時間做了一款簡單的iOS應用。現在將整個開發過程分享給大家,希望對在入門開發應用的同學有些幫助。
需求分析
在這里是站著技術人員角度去做需求分析,比專業產品需求分析是要簡單很多的。我需要做的是一款日記應用,觸發動機是我找不到我想要的日記應用。我用過很多工具來寫日記。比如有有道云筆記,印象筆記,QQ郵箱的記事本,Day One等,也體驗過其它用戶比較多的日記應用,依然滿足不了我的需求。
從自身需求出發去做應用,這對于大眾產品設計來說,是非常不適合的,不過我要做的就是一款給我這樣需求的用戶的小眾應用,所以首先滿足我的需求,也不為過,至少做出來自己用的好呀。
我自身是有寫日記的習慣的,我的需求是這樣的
- 要快,打開應用可以馬上記錄發生的事情
- 時間線,我需要記錄一天發生的多次事件
- 需要記錄圖片,圖片方便裁剪
- 隱私安全,這點特別重要,我不希望數據保存在別人的服務器上面
- 數據安全,數據可以以通用格式導出,方便打印成冊,畢竟對于日記是要存在幾十年的,而很多互聯網公司熬不過5年,特別是多數的移動互聯網公司兩年就死掉了。
- 按日歷查找數據
對于隱私安全
和數據安全
,這兩個是特別重要的,這不僅是我自己的要求,參考了多個應用的App Store的評論,和知乎上面關于日記的討論得出來的,所以這兩個是最重要的。
另外出于收益考慮,對于一些功能需要購買開通使用,也是重要需求。
技術評估
針對上面的需求,探求實現的可能性和初步的技術方案。大部分的需求的實現都是比較簡單,特別需要處理的是隱私安全
和數據安全
這兩個需求。
隱私安全
數據不能保存到應用服務器,防止別人服務器被hack是一個原因,最重要的是防止數據被開發者利用(當然也是在說我自己),畢竟日記數據是非常隱私的。所以多方面考慮下,數據保存到蘋果的iCloud是較好的做法。數據放在大廠上面,對短期數據保存是比較放心的,安全度較高,蘋果也是一家把用戶隱私放在首位不惜和FBI懟上的這么一個公司,數據放在iCloud上面,也避免了應用提供商存儲用戶數據導致數據被非法利用的問題。
數據安全
數據保存到iCloud是相對安全的了,但是依然不夠,數據能夠導出交給自己才是最放心的。對于導出的數據格式選擇是一個難題,目前包含文本和圖片的富文本格式方案不多。如下列表
-
RTF
也稱富文本格式(Rich Text Format, 一般簡稱為RTF)。雖然表面上說是非常流行的文檔格式,但國內就沒怎么見人用過,國外情況不知曉,也就不考慮了。 -
Doc/Docx
這個是微軟Word文檔格式,是通用的格式,是富文本方案比較好的選擇。不過要導出這個格式不容易,Word文檔格式極為復雜,iOS下面沒有好的庫可以用,自己實現比較繁瑣,因此方案待定 -
PDF
Portable Document Format的簡稱,意為“便攜式文檔格式”。這也是一個比較流行的文檔格式,格式也比較復雜,不過蘋果內置PDF生成接口,因此比Word文件更為可行 -
MarkDown
這是一種純文本格式,不過可以引用外部圖片路徑,所以也可以作為導出的格式選項。不過MarkDown的排版單一,對于需要打印成冊這個需求不友好,也作為待定考慮
綜合多個格式,目前優先先去PDF這個格式。
原型設計
將需求落實到原型上面。原型設計是很重要的一步,在這一步需要多花點時間,好的原型可以加快后面所有的步驟。另外按照多年的經驗,也不可能設計出周全不需要后續修改的原型,因此后續稍作優化也是必然的事情。原型工具我使用的是MockPlus,它內置了很多基本控件,通過簡單拖拉就可以完成了設計,非常方便。如下圖是其中一個原型
UI設計
UI設計這個環節是大多程序員的痛,如果資金充足,或者項目比較重要,找一個UI設計師來設計,是強烈推薦的,千萬不要干自己吃力不討好的事情。在大多數領域里面,顏值都是關鍵的一個環節。由于我的項目,功能簡單,第一個版本先自己完成設計。
我使用的設計工具是Sketch,比起PS,這個工具更廉價,并且對于移動UI設計,它更簡單,高效。
設計對于程序員來講,真的是很難的,如果沒有一定的研究,那就需要找一些相關書籍來補充一些基本知識,這對于以后和設計進行良好的溝通也打下堅實的基礎。我覺得《寫給大家看的設計書》的設計書值得看,里面會教會大家基本的配色,對齊,字體等,這些內容非常重要,它會使的之前一團糟(當然如果自身沒有基本的美學概念,也不覺得一團糟)的設計,變得基本美觀。
在有了基本的設計指導之后,想要設計出像樣一點的東西,也是很難的,這時候就要參考大量主流的UI設計案例,它們會增強你對潮流的感知能力,也會給你帶來一些靈感。我常去的網站有:
- http://dribbble.com 這里有非常多優秀的設計案例
- http://collectui.com 這是一個專門收集UI設計的網站,包含了大量移動端設計的案例,而且是每日更新,強烈推薦
- http://huaban.com 這是國內著名的花瓣網站,里面也收集很多案例,特別適合國情。雖然很過國外的設計看起來很漂亮,但是不符合國內審美的,國內大眾喜歡界面熱鬧一點,國外的喜歡設計簡潔一點。
另外UI設計過程中需要很多設計資源,特別是圖標資源。圖標資源我找到了一個比較好的網站http://www.iconfont.cn 。這是阿里巴巴的阿里媽媽UED出品的一個圖標資源網站,非常好用。
需要特別聲明的一點是,國內的版權意識慢慢好了起來,因此使用第三方網站素材的時候,要注意版權問題。
在UI設計的時候碰到一個難點就是數據導出PDF的一個板式的問題。板式設計在平面設計系統中是非常重要的一項。為了習得板式的一些皮毛,立馬購買了兩本和板式設計有關的數據,分別是
書是挺不錯的,但是也不可能一看書就能獲得真髓,只是輔助一下不至于設計跑偏那么厲害。
代碼實現
來到了自己流程最在行的一個環節了。由于這不是一篇側重技術的文章,所以不再這里闡述過多的技術問題,主要是把開發的重要環節拿出來分享一下。
建立代碼倉庫
我使用的是https://coding.net 的Git倉庫,覺得還不錯,不用Github主要是因為在國內它慢。我是偏向工具流,而不是命令流,我用的Git客戶端工具是SourceTree,免費好用。
建立工程
工程文件組織結構貼下
Pod用到的庫如下
pod 'Aspects'
pod 'AVOSCloud', '~> 3.10'
pod 'LeanCloudSocial', '1.0.0-beta3'
pod 'AFNetworking', '~> 3.0'
pod 'Bugly'
pod 'SDWebImage', '~> 4.0'
pod 'ReactiveCocoa', '~> 2.5'
pod 'DateTools'
pod 'NYXImagesKit'
pod 'M13OrderedDictionary'
pod 'Mantle'
pod 'MBProgressHUD'
pod 'CocoaLumberjack'
pod 'EAIntroView'
pod 'Realm'
pod 'FSCalendar'
pod 'TOCropViewController'
pod 'NYTPhotoViewer'
項目的后端是使用LeanCloud的服務,服務接口是運行在LeanCloud的云引擎上面的,我使用的是Node.js版本的云引擎。我覺得云引擎是很好的一個東西,它讓我只關注我的業務實現,我只需要寫一些業務代碼就行了。我本地存儲使用的是Realm,為啥選擇它?因為對我來講,它是目前使用最簡單的。
技術難點
這個項目雖然功能簡單,但也是有些難點的。
iCloud備份
之前的iOS開發中并沒有使用過iCloud,所以對iCloud基本不了解。如何快速學習一個新的技能,這本身就是一個非常重要的技能。我是這么辦的,首先搜索iCloud相關的教程,有一個基本了解,然后搜索iCloud相關的坑(多年經驗告訴我,誰家的技術都是充滿了坑的,知道他好,更好知道他的丑),最后查看官方詳細文檔,全面了解他的細節。
數據備份到iCloud和iCloud數據同步到應用流程還是略微復雜的,面對流程復雜的問題,請記得一定要作圖。要知道其實人腦是非常不善于處理這些邏輯復雜的問題的,所以只能借助工具幫助我們完成復雜的問題。我使用的是 https://www.processon.com 的在線作圖。在這里我特別提一下,客戶端大部分的流程都是和用戶操作混在一起的,所以我作圖使用的是一種事件驅動方式作圖,只包含事件和處理兩種元素,非常簡單易懂。下面是iCloud備份環節的一小塊流程圖截圖
方框的是處理,箭頭代表事件。其中看到的有布爾事件,用戶操作事件等。如果有更好的圖示方式,請告訴我。
導出PDF
iOS有接口生成PDF,這個是降低了導出PDF的難度。現在面臨的問題就是,如何按照板式靈活排版。我采用的一個方法是,建立板塊和板式管理器。板塊負責他的內容繪制,決定他的字體,顏色,板塊內布局,板式管理器負責板塊布局,文檔分頁等。這樣將日記數據傳入板式管理器,就可以自行生成PDF了。
測試
很多程序員不喜歡測試,但是這個一個極壞的做法。自己的程序必須全面自測,這可以加快整個項目的進度,也可以建立測試部對開發部的信心,和個人威信。把功能做出來沒啥了不起的,關鍵指標是可用性和性能問題。
對于我的應用,一般采用如下測試流程
功能測試
自己使用幾天,使用所有的功能,你會發現各種各樣的問題,一邊修復一邊測試。特別有個現象要說明一下,bug最喜歡出現在上線第一天,如果不想經常干緊急修復這樣自己都不好意思的事情,請認真對待測試。
性能測試
在用了幾天沒啥問題后,需要進入性能測試。粗略評估用戶每個月產生的數據15M左右,對此我進行了如下測試
- 測試超過1G的數據,在不同的設備上面測試iCloud的寫入和讀取性能
- 單日1000條事件測試,查看UI顯示性能
- 多月多年數據測試,測試數據讀取和顯示是否正常
小規模內測
發布到fir.im,要求親朋好友使用,獲取反饋。這個很重要,通常有些bug不會在自己這里產生,但是一到別人手里,馬上就暴露,這是因為每個人的使用習慣不一樣,因此少量用戶內測也是比較有必要的。
發布
發布這里問題不大。主要是iTunes Connect的宣傳圖麻煩一點,不過我找到一個可以制作漂亮宣傳圖的網站 https://theapplaunchpad.com 。缺點是國外的網站付費都比較貴,算了一下自己制作的成本后,咬咬牙購買了他們的Pro功能。
總結
應用已經在幾天前上線。自己開發完整的一個app實屬不容易,更不容易的現在app市場趨于飽和了。幾年前移動互聯網市場還是無限暢想的,現在發現不是這樣的,你會發現手機上面的軟件就是那么幾個,都是大廠壟斷了,現在app store上面分類下面的app連新品展示的地方都不給了。那些想去做獨立開發者的同學,如果你不能做出令蘋果眼前一亮的產品,那么在app store上面是等于扔進了垃圾堆。現在做app要解決的都是啥問題?推廣和運營!現在app用戶獲取成本高的直接讓你虧損。為啥?因為現在用戶都是別人的,如同人家老婆,要去撩人家老婆,那可是很大代價的哦。
最后大家覺得我的分享對你有用,希望體驗一下我的應用,可以點擊去下載 簡日記。