那些在學習iOS開發前就應該知道的事(part 2)

1.jpg

英文原文:Things I wish I had known before starting iOS development—Part 2 html

若是你還沒讀這篇文章的第一部分,請先讀完了再來看第二部分。 ios

1.gif

在第一部分中,我討論了學習iOS開發的一些基本問題。第二部分將更多地討論一些實際問題,這些問題都是你在開發iOS應用時會遇到的。 github

Debugging web

毋庸置疑,你在開發應用的過程當中必定會遇到不少錯誤和異常。好比,你會遇到NSInvalidArgumentException,遇到NSInternalInconsistencyException,還會遇到「0xfaded322」這種錯誤代碼。有時候你能夠在Stack Overflow或Quora上找到答案,但大部分時候你得自力更生。 sql

Xcode具備斷點、視圖調試和日誌的功能,是debug的不二之選。但畢竟孤掌難鳴,你仍需爲它找些得力的幫手。 數據庫

1.Pony Debugger xcode

blob.png

square/PonyDebuggerPonyDebugger - 使用Chrome Developer Tools,爲你的native iOS應用進行遠程網絡和數據調試。 瀏覽器

square開發了這個強大的開源工具。它是一個遠程調試工具,相似於客戶端庫和網關服務器的結合體。它在web瀏覽器上使用Chrome Developer Tools,對應用的網絡流量和數據存儲進行調試。做爲一個強大的網絡調試器,PonyDebugger容許用戶實時查看應用的網絡請求。它還有另外一個酷酷的功能,就是能夠遠程調試iOS應用的核心數據棧。 服務器

2.Cocoa Lumberjack

blob.png

CocoaLumberjackCocoaLumberjack - 快速、簡單,強大、靈活。它就是CocoaLumberjack, 一款好用的Mac和iOS日誌框架。

CocoaLumberjack,它快速、簡單,強大、靈活,是一款好用的Mac和iOS日誌框架。若是你想找一款強大的日誌工具,但願它具備自定義格式化這樣的炫酷功能,那CocoaLumberjack就是你的菜。

3.Reveal App

blob.png

RevealReveal - iOS應用的runtime視圖調試。

雖然視圖調試已經被引入iOS,但Reveal無疑在調試的細節方面更增強大。它是收費應用,但絕對物有所值。它有一些很是好用的功能,如Auto Layout Inspection。

4.OHHTTPStubs

blob.png

AliSoftware/OHHTTPStubsOHHTTPStubs - 輕鬆stub你的網絡請求。以虛擬網絡數據測試你的應用,可自定義響應時間……

OHHTTPStubs庫能夠輕鬆stub你的網絡請求。它能夠幫助你:

  • 使用僞造的網絡數據(stubbed from file)測試你的應用,並模擬慢速網絡以檢查應用在網絡不良狀況下的表現。

  • 從設備中得到僞造的網絡數據,用於寫單元測試

blob.png

數據存儲

可能大多數應用都須要將各類任務的數據存儲在本地。數據存儲是一個複雜的話題。它有不少選擇,每一個選擇都對應一種狀況。但我很喜歡Stack Overflow上的一種法則,用它來選擇數據存儲方式就很不錯。

  • 若數據徹底匹配內存且相對非結構化,則使用plist

  • 若數據徹底匹配內存且具備樹狀結構,則使用XML

  • 若數據與內存不匹配且具備圖形結構,同時應用不須要額外的查詢能力,則使用Core Data

  • 若是數據與內存不匹配且具備複雜結構,或應用須要關係數據庫提供的強查詢能力,則使用sqlite

  • 若是數據必須保密(例如密碼),則使用keychain

下面列了一些數據存儲方面的庫,或許對你們有幫助。

FMDB

blob.png

ccgus/fmdbfmdb - 圍繞SQLite創建的Cocoa / Objective-C的wrapper

若是你在項目中使用SQLite,此wrapper庫會使你的工做變簡單。

SSFKeychain


blob.png

soffes/sskeychainsskeychain - 簡單的Objective-C wrapper,Mac和iOS上的keychain可使用

要在應用中存儲敏感數據,你必須時刻使用keychain。這個庫能夠簡化使用keychain數據存儲的過程。

Magical Record

blob.png

MagicalRecord - 輕鬆管理Core Data

Core data很是難於管理。而這個庫可讓你舒爽地管理Core Data。

網絡

要想讓應用更有趣,你免不了要接入一些API。雖然iOS在對網絡的支持方面表現良好,譬如它擁有NSURLSession、NSURLConnection和NSJSONSerialization,但我仍是推薦你使用下面的庫。

AFNetworking

blob.png

AFNetworkingAFNetworking - 使人拍案叫絕的iOS和OS X網絡框架。

我認爲這是有史以來最好的iOS庫之一,它的功能何止炫酷二字。但這些功能中最重要的或許是開發者社區,他們天天都在使用這個庫,併爲AFNetworking作出貢獻。一些iPhone、iPad和Mac上最火的應用都是由AFNetworking提供的支持。

Restkit

blob.png

RestKit/RestKitRestKit是在iOS和OS X上使用和構建RESTful web資源的框架。

Restkit具備精心設計的API,訪問和構建RESTful資源的過程如沐春風。若是你用core data進行數據存儲、用rest service進行數據讀取,那你的最佳選擇就是它——與Core Data完美集成的Restkit。

Alamofire

blob.png

Alamofire/AlamofireAlamofire - Swift下精緻的HTTP Networking。

喲喲切克鬧,Swift粉們不要鬧,煎餅果子來一套。下面就是爲大家準備的東西了。Alamofire是一個精緻的網絡庫,它具備一些Swift專享的強大功能。

你也能夠在這裏找到不少其餘的庫。

vsouza/awesome-ios

blob.png

awesome-ios——精選的優質iOS生態系統,包括Objective-C和Swift項目。

依賴管理

我在前面的文章中提到過依賴管理,但重要的問題要說兩遍!在這裏我還要給它細細講一發。在項目中,你主要有三種管理依賴的方式。

CocoaPods

CocoaPods.orgiOS和Mac項目的依賴管理器。

CocoaPods是Swift和Objective-C Cocoa項目的依賴管理器。它擁有將近一萬個庫,能夠幫助你輕鬆擴大項目規模。要想管理Ruby Gems這種依賴,實踐中最有效的方法就是它了。

谷歌開發者作了一個YouTube視頻,解釋了爲何要在你的項目中使用CocoaPods。當心笑尿。

點此觀看視頻:Route 85: An Introduction to CocoaPods

Github Submodules

你還可使用git submodules,在項目中以sub repos形式管理依賴。子模塊相對於Cocoapods的優點在於子模塊也是sub-repos——這不只是指git和git GUIs逐漸承認並更加支持它們,也意味着你的依賴能夠將git repos和廣闊的世界鏈接起來,而CocoaPods卻不能。

但git submodules也有本身的問題:項目中沒有那些你所依賴的代碼的來源。它只是指向了子模塊庫。而大多數時間你根本不會去管這個庫。

Carthage

blob.png

Carthage/CarthageCarthage - 簡單、去中心化的Cocoa依賴管理器。

Carthage旨在爲Cocoa應用提供最簡單的框架添加方式。Carthage使用xcodebuild創建framework binaries,把整合工做留給了用戶。CocoaPods的方法更簡單易用,而Carthage的方法更靈活溫和。

不幸的是,Carthage也有一個巨大缺陷——僅支持iOS 8及以上版本

blob.png

測試

大多數人一提到應用測試就會呵欠連連。但若是沒有測試的話,說不巧哪天你的應用就忽然崩潰了。發佈應用時,你必定得先進行深度測試,保證用戶獲得最佳體驗。

這裏有不少測試框架,它們能夠簡化測試工做。

XCTest

XCTest是一個單元測試框架,包含在Xcode中。它支持把單元測試做爲項目編譯過程的一部分。XCTest與XCode高度整合,所以提供了持續整合支持和覆蓋率測試這樣的功能。

KIF

blob.png

kif-framework/KIFKIF - Keep It Functional - iOS功能測試框架

KIF是Keep It Functional的縮寫。它由Square開源,是一款iOS一體化測試框架。它利用其可訪問性——即系統讓訪問不能顯示的應用成爲可能,輕鬆實現了iOS應用的自動化。

Kiwi

blob.png

kiwi-bdd/KiwiKiwi - BDD for iOS

Kiwi是iOS開發的Behavior Driven Development庫。其目標是提供一個安裝和使用都很是簡單的BDD庫。

Quick

blob.png

Quick/QuickQuick - Swift (以及Objective-C)的測試框架。

Quick是Swift和Objective-C的一款行爲驅動的開發框架。它由RSpecSpectaGinkgo開發。與Quick並肩戰鬥的是Nimble——一款爲測試服務的匹配框架。

我嘗試在本文中講儘可能多的技術問題。跳入iOS開發的大坑以後,你就能用獲得上我說的這些東西了。關於iOS開發須要說的實在太多,因此在這兒我沒有談到營銷之類的話題。若是你想看的話,那就等個人下一篇文章吧!

相關文章
相關標籤/搜索