作者:Nlkant and
翻譯:Mr_龍0615
原文:7 Thins you must absolutely do before writing an iOS app
我已經開發(fā)高質量的iOS程序產品已經兩年了憾筏。我知道絕大多數開發(fā)者有一種傾向整慎,就是直接進入程序的核心邏輯的編碼稠通,這就是樂趣的所在。按流程進行很無聊俄精。
我最近學到的是,如果你在前期花一些時間正確設置你的項目榕堰,你將會在以后節(jié)省大把時間竖慧。如果你是個人開發(fā)者,你可能還沒有意識到我以下提到的步驟的重要性逆屡。大多數好的應用程序都是團隊開發(fā)的圾旨,而以下步驟絕對會減少你和團隊的挫折(障礙)并提高應用程序的質量。
1.為你的項目建立編碼風格規(guī)范
編碼風格規(guī)范是指在使用某種特定編程語言前參考的風格和約定魏蔗。它包括諸如應該用tab鍵還是空格砍的,如何給變量命名,或者一種語言的一些慣例(如在Swift中應該使用類還結構體) 編碼風格沒有對錯莺治。你可以在開始你的項目之前決定你自己的風格廓鞠,但是要記住整個團隊都需要遵守這個規(guī)范帚稠。這些規(guī)范將幫你們使用你們的代碼更統(tǒng)一并方便閱讀。
一些公司已經開源了他們關于Swift和objective-C的編碼規(guī)范
raywenderlich/swift-style-guide
github/swift-style-guide
NYTimes/objective-c-style-guide
2.開始編碼前確定程序的結構
在開始寫代碼之前確定程序的結構是非常重要的床佳。良好的結構會使得你的程序經得起考驗滋早,容易理解,降低維護成本夕土。你可以遵循傳統(tǒng)的MVC(Model-View-Controller)結構馆衔,或者嘗試更優(yōu)秀的MVVM或VIPER結構。網絡上現(xiàn)在有超多的資料介紹這些結構怨绣。
iOS Architecture Patterns --中文版
Modern application architectures (Reactive programming, MVVM beyond)
3.規(guī)范程序目錄結構
為了保證你大量的源代碼在同一個目錄中存儲角溃,根據你的結構決定你可以設定對應的目錄結構。例如篮撑,你可以這樣:
|-- Models
|-- Views
|-- Controllers(or ViewModels, if your architecture is MVV)
|-- Stores
|-- Helpers
首先减细,在Xcode的項目導航欄創(chuàng)建以上分組(小的黃色的"文件夾")。然后赢笨,把每組與項目路徑中實際的目錄對應未蝌,通過右側的文件檢查器,點擊小的灰色的文件夾圖標創(chuàng)建與你工程目錄中名字相同的子文件夾茧妒。
這好像是個次要的事萧吠,但是絕對會讓你的應用程序更加結構化而且更容易理解。
想了解更多桐筏,查看這個資源纸型。
4.依賴庫管理
在你程序中,你肯定會用到某些第三方庫梅忌。以下是三種重要的管理項目中依賴庫的方式狰腌。
CocoaPods
CocoaPods是針對Swift和Objective-C語言cocoa項目的依賴庫管理工具。它大概有上萬個庫可以幫助你使你的項目更優(yōu)秀牧氮。它是管理依賴庫最有效的方式琼腔,在過程上和Ruby Gems相似。
Github Submodules
你也可以使用git子模塊來組織你程序中的依賴庫踱葛。相比于CocoaPods丹莲,子模塊的優(yōu)勢在于子模塊就是子倉庫——不僅意味著git和git的GUI都可以隱式識別它們,和越來越多的支持使它們更方便使用尸诽,也意味著你的項目依賴的庫與它們的倉庫圾笨,保持著關聯(lián),CocoaPods并不逊谋,它保留在你的項目中擂达。
使用git子模塊的問題在于:你的項目并不包含你依賴的源代碼,它只是引用了子模塊的倉庫。而且大多數時候你甚至不能控制那個倉庫板鬓。
[注]倉庫指的程序托管的代碼庫悲敷。
Carthage
Carthage的初衷是成為向Cocoa程序添加框架最簡單的方式。Carthage使用xcodebuild創(chuàng)建框架俭令,但是把整合的責任交給了用戶后德。CocoaPods的使用方法更簡單,而Carthage的方式則更靈活抄腔。
不幸的是瓢湃,Carthage有一個大的缺點——就是只支持iOS8以后的版本
以上就是最常用的三種管理依賴庫的方式,而我個人最喜歡的是CocoaPods赫蛇,因為它設置超級方便而且可以獲取到成千上萬的第三方庫绵患。
5.為你的程序設置恰當的Schemes
Schemes告訴Xcode當你點擊"執(zhí)行"、"設置"悟耘、"配置"落蝙、"分析"或者"打包"的時候,應該干什么暂幼》だ眨基本上,Schemes標明了這些操作對應的目標和編譯配置旺嬉。你也可以通過傳入啟動參數管行,如程序應該運行的語言(手動測試本地化!)或者設置一些調度診斷標志邪媳。
以下是MyApp(<Language>)[Environment]的Schemes命名規(guī)范:
MyApp (Enligsh) [Development]
MyApp (Germen) [Development]
MyApp [Testing]
MyApp [Staging]
MyApp [App Store]
你可以用不同的目標(Targets)像下面描述的那樣捐顷,為你的程序生成不同的產品(Production),測試(Test)和開發(fā)(Development)版本。
How to Use Xcode Targets to Manage Development and Production Builds
6.為你的程序設置恰當的證書及配置文件
這一步是測試和發(fā)布iOS程序最痛苦也是最重要的步驟之一悲酷。代碼簽名需要證書套菜,這樣你的程序才能在真機上運行亲善。
證書有兩種:
- 開發(fā)證書:每個開發(fā)者所在團隊都有他們自己的開發(fā)證書设易,它是基于請求生成的。Xcode可以為你做蛹头,但是最好不要點擊 神奇的"修復"按鈕顿肺,并且不要去理解到底實際發(fā)生了什么。這種證書在部署開發(fā)版程序到設備上的時候才需要渣蜗。
- 生產證書:生產證書可以有多個屠尊,但是最好是保證一個公司只有一個,然后通過內部渠道共享它的關聯(lián)的密鑰耕拷。在上傳到App Store或者你的公司內部的"企業(yè)app store"的時候需要這種證書讼昆。
配置文件——可能是這個系統(tǒng)中最令人疑惑的文件了。一個配置文件表示應用程序對于哪些設備是簽名正確的骚烧。如果你訪問開發(fā)者網站首頁浸赫,你會注意到你可以創(chuàng)建兩種(也叫開發(fā)配置文件和生產配置文件)配置文件闰围。配置文件作用是使用這個標識(Identifier)的應用程序是用證書(Certificate)的私有密鑰(Key)簽名的,可以在這類設備上運行既峡。
參考What are the differences between certificates provisioning profiles and identifiers
你可以在下面的鏈接中了解更多:
Maintaining Your Signing Identifiers and Certificates
What is a Provisioning Profile> (Pt. 2) by Jay Graves of Double Encore
7.設置持續(xù)集成和交付進度
設置持續(xù)集成和交付進度在今天看來有點挑剔了羡榴,但是它可以幫助你在開發(fā)周期中早點發(fā)現(xiàn)問題(bugs)并且節(jié)省大量開發(fā)時間。
持續(xù)集成(CI)是一種開發(fā)實踐需要開發(fā)者們每天集成代碼到共享庫幾次运敢。每次先檢查校仑,然后通過自動編譯驗證,可以使團隊早點發(fā)現(xiàn)問題传惠。
現(xiàn)在有很多工具可以幫助你持續(xù)集成iOS程序可以使用迄沫,像Xcode Server, Jenkins 和 Travis CI。
About Continuous Integration in Xcode
Travis CI - Test and Deploy Your Code with Confidence
iOS CI with Jenkins | Pivotal P.O.V
持續(xù)交付(Continuous Delivery(CD))是軟件工程方法涉枫,這種方法要求開發(fā)團隊短期編譯生成軟件邢滑,用來確保軟件可以隨時發(fā)布的可靠性。1愿汰。它的目標是在于使軟件編譯困后、測試和發(fā)布更快和更頻繁。
為什么要使用持續(xù)交付衬廷?
節(jié)省準備提交摇予、上傳截圖和發(fā)布程序的幾天時間。
同事在度假而一個緊急問題修復(bugfix)需要發(fā)布吗跋?不要指望一個人發(fā)布升級侧戴。
更頻繁和更小體積的發(fā)布可以提升軟件質量和反應時間。
盡管有許多持續(xù)交付的工具可以使用跌宛,但是我個人最喜歡的還是Fastlane. 它的設置真的是超級方便酗宋,而且功能非常強大。這可以實現(xiàn)整個編譯和發(fā)布流程自動化疆拘。
fastlane - iOS and Android Automation for Continuous Delivery
如果你喜歡這篇文章蜕猫,建議你分享出去,可以讓其他人也能看到并喜歡它哎迄。訂閱我的網站獲取更多文章回右。
關鍵字: iOS
持續(xù)集成
Swift
寫在后面:
由于譯者的翻譯水平有限,如有不足之處漱挚,希望大家指出翔烁。
關于譯者:
微博:Mr_龍0615
GitHub:Anar