在過去七年時間裏,咱們的團隊建立了無數iOS應用。在這個過程當中咱們不斷改善咱們的開發流程。把最佳實踐應用到咱們發佈的新應用中。html
咱們已經準備好了兩張覈對清單。一個是關於如何開始一個iOS項目,一個是關於如何將應用提交到AppStore。ios
這些清單的流程使咱們團隊更高效,構建更好的解決方案,減小開發時間和提交到AppStore的風險。git
我但願這些清單對大家一樣有用。github
####開始一個iOS項目數據庫
Repo/Github服務器
1 在Github上建立一個倉庫,把 iOS gitignore 文件添加進去。網絡
2 嚴格按照git-flow workflow流程進行開發,master分支用於你的產品發佈,dev分支用於保持最新的代碼,feature分支用於當前工做進度。app
Xcode框架
1 確保團隊中的每一個人使用同一個版本的Xcode。ide
2 在Xcode target的」Build Settings」裏打開」Analyze during build」和 「Treat Warnings as Errors」選項。
3 關閉tabs並開啓空格鍵: XCode > Preferences > Text Editing > Indentation > Prefer Indent using Spaces, Tab width 2, Indent width 2
Jenkins/OSX Server/TestFlight
設置 CI/CD(持續集成/持續部署) 確保每次推送到dev分支的全部測試用例都會執行一遍,同時會構建一個Ad Hoc版本並以郵件形式發送到團隊的每一個成員(郵件內容是commit的log信息)。若是構建或者測試失敗,一封構建失敗的郵件也會發給團隊成員。在Originate,大部分iOS項目都使用OSX Server集成TestFlight功能。
編碼風格/規範
1 遵循蘋果官方的建議 iOS coding style guide
2 此外,遵循這裏的建議:http://qualitycoding.org/preprocessor/
3 保持你的.h文件簡潔。只暴露必要的接口給外界,把其餘屬性、方法、聲明等放到.m文件
4 根據當前顯示的頁面給ViewController命名。(e.g. LoginViewController)
5 使用分組(Group)組織你的項目。好的分組應該是這樣的:DataModels,Views,Controllers,App Delegate,Supporting Files,Tools等,混亂的項目結構是不能容忍的。
6 在提交pull request以前,首先過一遍effective code review。
框架
1 MVC(Model View Controller)有時候在iOS開發中會被戲稱爲Massive View Controller。對於初學者而言,把全部事情都交給massive controllers是一個很常見的錯誤。根據需求,咱們應該把tableview相關的delegates/data sources從view controller中抽離成獨立的類。把view(尤爲是須要複用的)也抽離成單獨的類。把controller中用到的工具性方法放到單獨的helper類中去。此外,viewController不該該直接進行網路請求的操做,而應該交給Model或者Manager類去處理。
2 一些好的code/tutorials/patterns: Lighter View Controllers, Viper andBrowseOverflow (from the iOS TDD book).
Views/Nibs/Storyboards
1 確保在視圖中使用constraints/autolayout來適配不一樣的屏幕。不然只能手動爲每一個view設置frame sizes/positions來確保不一樣屏幕都正常顯示。PureLayout和FLKAutoLayout已經在咱們的一些項目裏使用了。
2 考慮要不要使用Nib文件。Originatge建議不要使用,但決定權應該交給Tech Lead。不建議使用Storyboard是由於對於多人開發很不友好,使Xcode變得遲緩,給寫代碼增長了沒必要要的複雜度。
3 若是須要的話,使用FrameAccessor來修改frame,這將很容易設置UIView的大小和起始座標。
字體和顏色
對整個app進行字體和顏色標準化,這樣就很容易維護和修改它們,而且可使代碼看起來更整潔。
文字顯示
1 全部顯示到界面的字符串都要放到一個本地化文件(localization file)中。
2 避免使用包含文本的image assets,使用UILabel替換之。
分析
http://replay.io/ 是咱們在Originate使用的分析平臺
崩潰報告
儘管蘋果官方的iTunes Connect已經提供了相關功能,可是最好仍是使用第三方的工具好比Crashlytics。它們很高效而且有一個更友好的界面。
若是須要,增長 AOP的支持(e.g. for logging)。
第三方代碼依賴
Cocoapods是個不錯的選擇。
服務器通訊
1 在應用的設置中增長toggle between server environments (e.g. QA, dev, staging, etc.)
2 若是須要,實現一個app更新通知系統,這樣服務器能夠通知app有一個新的可用版本,app能夠給用戶展現相關更新提醒。
3 在向服務器請求數據的時候,確保使用一個等待提示控件。咱們在開發的時候用到了MRProgress。
4 在網絡請求中應該使用AFNetworking或者RestKit(if Core Data is needed)。網絡優化/配置請看這篇博客:AFNetworking cache
5 調試工程中,確保全部服務器信息都打印到控制檯
注意:使用 DLog 來打印全部的請求和響應(in debug mode)
#ifdef DEBUG #define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); #else #define DLog(...); #endif
完善細節
細節的調整對於app來講是相當重要的。好比增長一些用戶特別期待的特性好比:下拉刷新,點擊狀態欄滑到開頭,請求數據的時候顯示等待提示框等使你的app更友好。你的設計團隊和產品團隊應該有一個很高的水準。iOS Human Interface Guidelines是一個不錯的參考。
最後,在開始以前,確保建立必須的帳號(e.g. iTunes Connect, Urban Airship, Analytics Accounts, etc.)
####提交app到AppStore
發佈app到AppStore不容忽視。咱們必須按照蘋果官方的指南一步一步進行以確保你的app可以順利發佈到AppStore。咱們須要花費4~8個小時來執行這些步驟。
當你的app已經準備好了,按照下面步驟:
Apple Guidelines
1 爲了高標準,蘋果官方在App Distribution Guide提出了與App testing, Ad Hoc distribution, and App Store release相關的方方面面的要求。咱們應該仔細閱讀。
2 固然,更重要的是這些文檔咱們應該熟記於心App Store Review Guidelines Common App Rejections
注意:咱們發現開發者們常常忘記添加content flaging到那些建立用戶生成數據的app中。蘋果會拒絕這樣的app,直到你把content flaging添加進去。
若是你的app中使用了CoreData,當你提交一個更新版本時,你必須確保寫了一個遷移腳原本完成你的數據庫升級。若是沒有這樣作,你的app在升級以後極可能會崩潰,用戶只能刪掉以後從新安裝。請參考Core Data Model Versioning and Data Migration
當你想讓你的應用程序被用戶評論,UAAppReviewManager能夠確保使你的app在合適的時間被用戶評論。
在Xcode的」Edit Scheme」選項,「Archive」應該設置成「Release」。這樣能夠隱藏log輸出並關掉全部在開發階段的測試用例
注意:因爲編譯器的優化設置,發佈構建有時候與調試構建會有所不一樣。因此最好在發佈到AppStore前幾天就開始測試發佈構建來捕獲一些潛在的問題。
請將你的發佈版本構建在生產服務器上
確保使用正確的Bundle Identifier, Apple ID, certificates (e.g. Push Certificates)等做爲發佈的候選配置和AppStore構建。
檢查Release版的候選配置
1 確保你的app與正確的生產服務器進行通訊。
2 確保全部的測試窗口是隱藏的
3 確保沒有敏感數據打印到控制檯
4 確保第三方分析工具好比Analytics工做在正確的生產帳號上。
5 確保第三方服務好比Urban Airship工做在正確的生產帳號上。
推送到主分支
1 在app的plist文件更新你的bundle version number。這個數字能夠跟你在appStore裏設置的版本號不一致,但最好仍是設成同樣的。
2 推送你的代碼到主分支並打上tag。
在iTunes Connect上設置你的app
1 在iTunes Connect建立一個新的app,若是是升級的話,選「Add Version」
2 確保填滿全部信息並上傳全部必要的圖片(或者視頻)
注意:只有「Description」 和 「What’s New In This Version」能夠修改一旦你的app審覈經過。其餘的選項好比圖片是不能修改的。
使用Xcode來構建你的最終版本就上傳到iTunes Connect。