設計師設計出來了一個不錯的引導界面,然而當我看到設計稿的時候,咱們的app也沒幾天就要上線了。這個界面模仿了Evernote iOS app的風格。php
我以迅雷不及掩耳盜鈴之勢開始在Xcode上編程,用了page view controller和scroll view。在Stack Overflow和Google的幫助下,我用了2天把它完成了。當我把產品給一個一樣搞iOS開發的朋友看時,他跟我說,若是我用了這個開源項目的話,一個小時就能夠搞定一切。html
過去這一年我經歷了很多相似的事情,這些事情讓我成長,讓我可以成爲一個更好的iOS開發工程師。我想跟你們分享一下個人經驗,但願大家能夠再也不犯我這些錯誤,一路平坦走向成功。ios
剛開始學iOS開發的時候,我直接去學習了斯坦福大學的這門課程,很是有用。然而,雖然我從課程中學到了不少,但它並無教給我多少iOS開發語言的基礎知識——當時的iOS開發語言主要是Objective-C。開始寫本身的app之後,我發現本身在基礎知識方面欠缺不少,這致使我總是弄出來一些bug。git
若是你在面向對象編程的語言方面沒啥經驗的話,我建議你在投身進行iOS開發以前先讀一本這方面的經典書籍。我最喜歡的兩本是Big Nerd Ranch Guide for Objective-C和Swift的The Apple’s Guide。程序員
沒錯,Ray Wenderlich上的教程和Team Treehouse上的視頻課程能教給你不少,但缺乏基礎知識的程序員就像無源之水、無本之木,老是長久不了的。github
我對這個iOS開源社區絕對是真愛。Github上面有無數的優質項目,如AFNetworking, Restkit、JSQMessages,甚是碉堡。你必須學會在這個社區裏乘前人栽樹之涼。web
遇到問題時,先別一根筋急着苦思冥想或建立本身的庫,不如先去GitHub或Google找一下有沒有類似問題的解決方法。頗有可能某個開發者已經寫好了一個符合你需求的開源項目。objective-c
經過Facebook Groups或Slack chat來開始社區之旅吧!他們很樂意回答你的一切問題。你能夠瀏覽那些好的開源項目,看看大牛們是如何組織代碼的,本身也學着點。sql
這裏是GitHub上一些最優質的iOS資源。數據庫
vsouza/awesome-ios:awesome-ios——精選的優質iOS生態系統,包括Objective-C和Swift項目。
matteocrippa/awesome-swift:awesome-swift——收集了不少優質的swift資源。你也能夠來貢獻本身的力量!
cjwirth/awesome-ios-ui:awesome-ios-ui——優質iOS UI/UX庫精選。
若是你想找一些iOS的最佳實踐以供本身模仿學習,那請看下面這些。
futurice/ios-good-practices:ios-good-practices——爲iOS開發者提供靈感,做者是Futurice的開發者們。
多數iOS開發者將Xcode做爲開發的首選工具。Xcode有不少強大的特性,如Storyboards、Auto Layout,若是學會用這些的話,相信你的開發效率確定能上一個臺階。出於某些限制,不少開發者會盡力避免使用Storyboards,但我我的認爲,Storyboards是快速佈局的有力工具。
學習使用Xcode中的快捷鍵。雖然看上去使用快捷鍵沒節省幾秒鐘,但「不積小流,無以成江海「,長此以往省下的時間就多了。以上這些都是我親測有效的手段,它們在提升開發效率方面給了我很大幫助。
使用Cocoapods來進行依賴管理。你的團隊會所以輕鬆不少。
在項目早期就學會使用持續整合(continuos integration),這樣就能夠避免將來可能出現的冗餘工做。
使用Testflight來分發測試版本。在被蘋果收購以後,Testflight變得更加簡單易用了,每一個人均可以經過它來使用iTunes帳號進行測試版本的分發。
在app中整合Crashlytics,這樣當app崩潰的時候你就能夠獲取Crash報告了。
若是你不想本身弄後端服務器的話,Parse爲咱們提供了很好的服務。
前文已經介紹了一些很棒的iOS開源社區。不少優質的博客是由經驗豐富的iOS開發者撰寫的,每週都會有一些精彩的內容呈現。我最喜歡的一些包括:
Cocoa with Love:在本博客中,我將專一於使用和管理用戶界面中字符串的最佳實踐。這是一個至關…
多是最好的iOS博客。做者是Matt Galaghar。Matt作事情的方式是大師級的。
iOS Dev Weekly:訂閱本博客,輕鬆得到每週最棒的iOS開發網頁精選。由Dave Verwer精選併發布…
嚴格來講這不算個博客,但它每週都有超級超級棒的內容更新。做者是Dave Verwer。
NSHipster:Playgrounds並非Swift語言自己的特性,它們實際上是很棒的展現……
NSHipster對Objective-C和Cocoa進行拾遺的雜誌。它由Mattt Thompson每週更新。
Ray wenderlich:高質量的編程教程:iOS、Android、Mac,還有更多!
Ray Wenderlich的博客(對初學者超有用)
Custom Controls for iOS and OS X – Cocoa Controls:暫無描述
Peter Steinberger:蘋果在Xcode 6中增長了對NS_DESIGNATED_INITIALIZER 標誌的支持,同時也將其添加到了各類各樣的框架中……
Matt Gemmell:基於個人寫做項目進行簡要更新。它或許會引發一些人的興趣……
Natasha The Robot:僅僅是又一個WordPress站點
在這些博客中挑選乾貨,認真閱讀,相信你會變成一個更好的iOS開發者。
不少開發者對於iOS的設計方面談虎色變。咱們老是對設計敬而遠之,一古腦兒都扔給設計師去作。但其實,只要稍稍努力,你也能夠學會設計本身的app。
如今,設計師和開發者之間的界限日益模糊,由於好多成功的iOS獨立開發者包攬了全部app設計、開發和營銷工做。我將在下一部分談到營銷方面的事。若是你想設計本身的iOS app的話,不妨學一下Sketch這個工具。
Sketch專爲應用設計和網頁設計而生,簡單易上手。
Bohemian Coding – Sketch 3:Sketch是簡單易用的輕量級軟件,它強大、靈活而快速。最後……
你能夠在網上找到大量的Sketch資源和插件,它們能讓你有趣而簡單地工做。一旦完成了設計工做,你能夠馬上用這個神器將它們整合在一塊兒。
Free mobile & web prototyping for designers – Marvel:將草圖和設計轉化爲可交互的Web、iPhone、iPad、Android和Apple Watch原型和模板……
下一部分,我將談一談在開發本身的app時的必要方法,而且講一些iOS應用的營銷技巧。
在第一部分中,我討論了學習iOS開發的一些基本問題。第二部分將更多地討論一些實際問題,這些問題都是你在開發iOS應用時會遇到的。
毋庸置疑,你在開發應用的過程當中必定會遇到不少錯誤和異常。好比,你會遇到NSInvalidArgumentException,遇到NSInternalInconsistencyException,還會遇到「0xfaded322」這種錯誤代碼。有時候你能夠在Stack Overflow或Quora上找到答案,但大部分時候你得自力更生。
Xcode具備斷點、視圖調試和日誌的功能,是debug的不二之選。但畢竟孤掌難鳴,你仍需爲它找些得力的幫手。
square/PonyDebugger:PonyDebugger – 使用Chrome Developer Tools,爲你的native iOS應用進行遠程網絡和數據調試。
square開發了這個強大的開源工具。它是一個遠程調試工具,相似於客戶端庫和網關服務器的結合體。它在web瀏覽器上使用Chrome Developer Tools,對應用的網絡流量和數據存儲進行調試。做爲一個強大的網絡調試器,PonyDebugger容許用戶實時查看應用的網絡請求。它還有另外一個酷酷的功能,就是能夠遠程調試iOS應用的核心數據棧。
CocoaLumberjack:CocoaLumberjack – 快速、簡單,強大、靈活。它就是CocoaLumberjack, 一款好用的Mac和iOS日誌框架。
CocoaLumberjack,它快速、簡單,強大、靈活,是一款好用的Mac和iOS日誌框架。若是你想找一款強大的日誌工具,但願它具備自定義格式化這樣的炫酷功能,那CocoaLumberjack就是你的菜。
Reveal:Reveal – iOS應用的runtime視圖調試。
雖然視圖調試已經被引入iOS,但Reveal無疑在調試的細節方面更增強大。它是收費應用,但絕對物有所值。它有一些很是好用的功能,如Auto Layout Inspection。
AliSoftware/OHHTTPStubs:OHHTTPStubs – 輕鬆stub你的網絡請求。以虛擬網絡數據測試你的應用,可自定義響應時間……
OHHTTPStubs庫能夠輕鬆stub你的網絡請求。它能夠幫助你:
可能大多數應用都須要將各類任務的數據存儲在本地。數據存儲是一個複雜的話題。它有不少選擇,每一個選擇都對應一種狀況。但我很喜歡Stack Overflow上的一種法則,用它來選擇數據存儲方式就很不錯。
下面列了一些數據存儲方面的庫,或許對你們有幫助。
ccgus/fmdb:fmdb – 圍繞SQLite創建的Cocoa / Objective-C的wrapper
若是你在項目中使用SQLite,此wrapper庫會使你的工做變簡單。
soffes/sskeychain:sskeychain – 簡單的Objective-C wrapper,Mac和iOS上的keychain可使用
要在應用中存儲敏感數據,你必須時刻使用keychain。這個庫能夠簡化使用keychain數據存儲的過程。
Core data很是難於管理。而這個庫可讓你舒爽地管理Core Data。
要想讓應用更有趣,你免不了要接入一些API。雖然iOS在對網絡的支持方面表現良好,譬如它擁有NSURLSession、NSURLConnection和NSJSONSerialization,但我仍是推薦你使用下面的庫。
AFNetworking:AFNetworking – 使人拍案叫絕的iOS和OS X網絡框架。
我認爲這是有史以來最好的iOS庫之一,它的功能何止炫酷二字。但這些功能中最重要的或許是開發者社區,他們天天都在使用這個庫,併爲AFNetworking作出貢獻。一些iPhone、iPad和Mac上最火的應用都是由AFNetworking提供的支持。
RestKit/RestKit:RestKit是在iOS和OS X上使用和構建RESTful web資源的框架。
Restkit具備精心設計的API,訪問和構建RESTful資源的過程如沐春風。若是你用core data進行數據存儲、用rest service進行數據讀取,那你的最佳選擇就是它——與Core Data完美集成的Restkit。
Alamofire/Alamofire:Alamofire – Swift下精緻的HTTP Networking。
喲喲切克鬧,Swift粉們不要鬧,煎餅果子來一套。下面就是爲大家準備的東西了。Alamofire是一個精緻的網絡庫,它具備一些Swift專享的強大功能。
你也能夠在這裏找到不少其餘的庫。
awesome-ios——精選的優質iOS生態系統,包括Objective-C和Swift項目。
我在前面的文章中提到過依賴管理,但重要的問題要說兩遍!在這裏我還要給它細細講一發。在項目中,你主要有三種管理依賴的方式。
CocoaPods.org:iOS和Mac項目的依賴管理器。
CocoaPods是Swift和Objective-C Cocoa項目的依賴管理器。它擁有將近一萬個庫,能夠幫助你輕鬆擴大項目規模。要想管理Ruby Gems這種依賴,實踐中最有效的方法就是它了。
谷歌開發者作了一個YouTube視頻,解釋了爲何要在你的項目中使用CocoaPods。當心笑尿。
點此觀看視頻:Route 85: An Introduction to CocoaPods
你還可使用git submodules,在項目中以sub repos形式管理依賴。子模塊相對於Cocoapods的優點在於子模塊也是sub-repos——這不只是指git和git GUIs逐漸承認並更加支持它們,也意味着你的依賴能夠將git repos和廣闊的世界鏈接起來,而CocoaPods卻不能。
但git submodules也有本身的問題:項目中沒有那些你所依賴的代碼的來源。它只是指向了子模塊庫。而大多數時間你根本不會去管這個庫。
Carthage/Carthage:Carthage – 簡單、去中心化的Cocoa依賴管理器。
Carthage旨在爲Cocoa應用提供最簡單的框架添加方式。Carthage使用xcodebuild創建framework binaries,把整合工做留給了用戶。CocoaPods的方法更簡單易用,而Carthage的方法更靈活溫和。
不幸的是,Carthage也有一個巨大缺陷——僅支持iOS 8及以上版本。
大多數人一提到應用測試就會呵欠連連。但若是沒有測試的話,說不巧哪天你的應用就忽然崩潰了。發佈應用時,你必定得先進行深度測試,保證用戶獲得最佳體驗。
這裏有不少測試框架,它們能夠簡化測試工做。
XCTest是一個單元測試框架,包含在Xcode中。它支持把單元測試做爲項目編譯過程的一部分。XCTest與XCode高度整合,所以提供了持續整合支持和覆蓋率測試這樣的功能。
kif-framework/KIF:KIF – Keep It Functional – iOS功能測試框架
KIF是Keep It Functional的縮寫。它由Square開源,是一款iOS一體化測試框架。它利用其可訪問性——即系統讓訪問不能顯示的應用成爲可能,輕鬆實現了iOS應用的自動化。
kiwi-bdd/Kiwi:Kiwi – BDD for iOS
Kiwi是iOS開發的Behavior Driven Development庫。其目標是提供一個安裝和使用都很是簡單的BDD庫。
Quick/Quick:Quick – Swift (以及Objective-C)的測試框架。
Quick是Swift和Objective-C的一款行爲驅動的開發框架。它由RSpec、Specta和Ginkgo開發。與Quick並肩戰鬥的是Nimble——一款爲測試服務的匹配框架。
我嘗試在本文中講儘可能多的技術問題。跳入iOS開發的大坑以後,你就能用獲得上我說的這些東西了。關於iOS開發須要說的實在太多,因此在這兒我沒有談到營銷之類的話題。若是你想看的話,那就等個人下一篇文章吧!