iOS最佳實踐
對其他平臺感興趣?看看我們的 Android 開發最佳實踐 和 Windows App 開發最佳實踐吧。
為什么閱讀本文檔
跳進了 iOS 的坑真是麻煩。無論是 Swift 還是 Objective-C, 都沒有在其他地方廣泛使用,而且這個平臺對每個東西都幾乎有它自己的命名方式,并且連要在真機上調試都充滿了坎坷。無論你是剛剛入門 Cocoa 還是想糾正自己開發習慣的開發者,都能從本文檔獲益。不過下面寫的僅僅是建議,所以如果你有一個更好的方案,那就試試吧!
入門
Xcode
Xcode 是大多數 iOS 開發者的選擇,并且是 Apple 唯一官方支持的IDE。有一些其他的選擇,比如 AppCode 是最有名的,但是除非你是經驗豐富的開發者,否則就使用 Xcode 吧。不要管它的一些小缺點啦,它現在已經蠻好用咯。
要安裝 Xcode,只需要下載 Mac App Store 中的 Xcode 。它會同時下載最新的 SDK 和模擬器,同時你可以從 Preferences > Downloads 下載更多的內容。
項目初始化
開始iOS開發的時候,一個常見的問題是用代碼寫所有的 view 還是使用 Interface Builder(Storyboards 或者 XIB )。兩種方案都久經考量。但是,有下面幾個考慮:
為什么使用代碼?
- Storyboard 因為它的復雜的 XML 結構容易帶來版本沖突,這讓代碼合并變得困難。
- 容易用代碼結構化以及復用 view,讓你的代碼變得 DRY。
- 所有的信息匯集一處。在 Interface Builder 里面你需要點擊所有的檢查器來尋找你要找的東西。 </ul>
- 為了更少的技術要求,Storyboard 使用了一個很好的直接貢獻于項目的方法,比如,通過調整顏色或者布局的 constraints。然而,它要求一個項目已經做好配置,并且開發者有一些時間掌握基礎
- 當你不用構建項目也能看到變化的時候,集成更快了
- 在 Xcode6 里面,自定義的文字和 UI 元素在 storyboard 里面都可以可視化表示,比你在代碼里面修改好多了
- 從iOS8開始,Size Classes 允許你設計不同類型設備的屏幕,不用重復一些工作 </ul>
為什么用 Storyboard?
忽略文件
當把項目放入版本控制系統的時候,首先應該有一個好的.gitignore文件。這樣,不必要的文件(用戶設置,臨時文件這些)都不會放進你的倉庫里面。幸運的是,Github 已經給了我們 Objective-C 和 Swift 語言的模板
CocoaPods
如果你計劃增加外部依賴(比如,第三方庫)在你的項目中,CocoaPods 提供了一個快捷的途徑,就像這樣:
sudo gem install cocoapods
要開始使用,僅僅需要在你的 iOS 項目目錄下運行:
pod init
它會創建一個 Podfile, 會管理你所有的依賴,在 Podfile 中加入你的依賴后,允許
pod install
來安裝第三方庫并且將它們作為 workspace 的一部分,你的 workspace 也會包含你自己的項目。 一般推薦提交你自己的項目的依賴,而不是每個開發者在一個 checkout之后運行pod install。
注意在之后,你需要打開.xcworkspace而不是.xcproject,否則你的代碼就不能被編譯了,命令:
pod update
會升級所有的 pod 到最新版本,你可以用大量 符號 來定義你期望的版本需求。
項目結構
為了組織目錄里面的上百個源代碼文件,最好根據你的架構來設置一些文件結構。比如,你可以用這樣的:
├─ Models ├─ Views ├─ Controllers ├─ Stores ├─ Helpers
首先,將他們創建為 Group(黃色的目錄),用 Xcode 的項目導航里面的你的項目中。然后對每個項目里的文件,將它么連接到真實的文件目錄 —— 通過打開它右邊的文件檢查器,點擊小小的目錄圖標,在你的項目目錄下創建一個和 group 同名的子目錄。
本地化
一開始就應該把所有的顯示給用戶的字符串放進本地化文件。這樣不僅僅為了翻譯方便,同時也便于查找用戶看見的文本。你可以在 build Scheme 中加入一個啟動參數來指定特定的語言
-AppleLanguages (Finnish)
對于更復雜的翻譯問題,比如復數(比如 "1 person" 和 "3 people"),你應該使用 .stringsdictformat 而不是一個普通的localizable.strings文件。在有了這個強大的工具來處理比如 "one", some", "few" 和 "many" 的情況。 當處理俄羅斯語和阿拉伯語的時候,你就不用急得抓耳撓腮了。
關于本地化的更多信息,看 2012年 2月的 Helsink iOS 會議的 幻燈片,大部分內容對現在也是適用的。
其它內容:https://github.com/oa414/ios-good-practices/blob/master/TRANSLATION-CN.md