在寫一個iOS應(yīng)用之前必須做的7件事(附相關(guān)資源)
這兩年,我一直在編寫并發(fā)布有質(zhì)量的iOS 應(yīng)用。我發(fā)現(xiàn)大多數(shù)的開發(fā)人員有直接跳進編碼應(yīng)用程序的核心邏輯的傾向,因為這是樂趣所在。遵循流程開發(fā)是很無聊的。
我了解到最有效的方式是,如果你提前花些時間正確設(shè)置項目,你將會為將來節(jié)省大量的時間。如果你是一位獨立開發(fā)者,你可能意識不到下面提到的這些步驟的重要性。大多數(shù)優(yōu)秀的應(yīng)用程序都由團隊開發(fā),如果遵循以下步驟,肯定能幫你減少挫敗感并提升應(yīng)用質(zhì)量。
1.為工程設(shè)置編碼風(fēng)格規(guī)范
編碼風(fēng)格規(guī)范指的是在使用特定語言寫代碼之前要明確遵守的風(fēng)格和慣例,它包括類似于該使用tab鍵還是空格鍵,如何命名變量以及特定語言本身的約定俗成(像swift語言中是否該使用Classes還是Structs)。
編碼規(guī)范本身沒有孰對孰錯。在項目開始前,你可以設(shè)置自己的編碼風(fēng)格,但是必須保證同組的人遵守相同的規(guī)范。編碼規(guī)范能夠保證代碼更加統(tǒng)一和更易于閱讀。
一些公司已經(jīng)開源了Objective-C和Swift語言的編碼規(guī)范。
2.在寫代碼之前確定應(yīng)用的架構(gòu)
在寫代碼之前,確定應(yīng)用架構(gòu)是非常重要的。一個好的架構(gòu)可以提升應(yīng)用的可測試性,更加易于理解并且能降低維護成本。你可以使用傳統(tǒng)的MVC架構(gòu),或者使用更加流行的MVVM或VIPER架構(gòu),這里提供了大量的資源來介紹這些架構(gòu)。
Modern application architectures (Reactive programming, MVVM and beyond)
3.設(shè)定應(yīng)用的目錄結(jié)構(gòu)
為了使數(shù)以百計的源代碼文件至始至終保存在相同的目錄中,最好是根據(jù)項目的架構(gòu)制定目錄結(jié)構(gòu),例如,你可以使用以下的目錄結(jié)構(gòu):
首先,在Xcode的Project Navigator中工程名稱分組下面,以group的形式創(chuàng)建它們(小黃色的文件夾),然后,通過打開Xcode右邊的File Inspector,為每個創(chuàng)建的group鏈接到真實的項目路徑下對應(yīng)的目錄,點擊File Inspector中小的灰色的文件夾icon,在工程目錄下創(chuàng)建對應(yīng)group名稱的子目錄。
這個看起來是件小的事情,卻可以使你的項目更加有條理且易于理解。
了解更多目錄結(jié)構(gòu)可以參考以下資源:
4.項目依賴管理
你當然會在項目中使用第三方庫,在項目中,你可以有三種方式可以管理項目依賴。
CocoaPods是適用于Swift和Objective-C Cocoa項目的依賴管理庫,它有將近10000個開源庫,可以優(yōu)雅地幫你管理項目的規(guī)模。它是最有效的方式做依賴管理,就像Ruby中的Gems。
Youtube上有一個google開發(fā)者創(chuàng)建的滑稽的視頻(地址,需翻墻)來解釋為什么必須在項目中使用CocoaPods。
-
Github Submodules
你也可以使用Github Submodules管理你的項目依賴作為子庫,相比CocoaPods,Github Submodules的優(yōu)點在于它是sub-repos- 這不僅意味著git和git GUIs能夠隱式識別他們,并且也可以獲得更多支持,同時意味著你的工程依賴能夠更加緊密的聯(lián)系到他們的git倉庫,而Cocoapods則不能。
submodules的問題是:你的工程不擁有你依賴庫的源代碼,僅僅是擁有一個引用到submodule的倉庫。大多數(shù)情況你控制不了這些代碼倉庫。
Carthage被認為是往Cocoa應(yīng)用中添加框架的最簡單的方法。Carthage使用xcodebuild編譯framework二進制,但是把集成的任務(wù)留給了用戶。CocoaPods的目的是對用戶簡單,但是Carthage對用戶來說是靈活的、不干涉的。
不幸的是,Carthage的最大的缺點是----只支持iOS8及以后版本。
這三個當中,我最常用并且我個人最喜歡的是CocoaPods,因為它設(shè)置超級簡單,并且提供了數(shù)以千計的第三方庫供你訪問。
5.為應(yīng)用設(shè)置合適的Scheme
當你點擊了Run、Test、Profile、Analyze或者Archive 操作后,Schemes告訴Xcode什么會發(fā)生。通常,每個操作對應(yīng)一個target和一個編譯配置。你也可以傳遞啟動參數(shù),比如應(yīng)用運行的語言(測試本地化很有用)或者debug時設(shè)置一些判斷的標識位。
建議Scheme的命名規(guī)則采用MyApp () [Environment]:
你也可以使用Target制作不同的發(fā)布、測試以及開發(fā)來編譯程序,如以下描述:
6.設(shè)置合適的Certificates和Provisioning Profiles
在測試和發(fā)布應(yīng)用過程中,這個是開發(fā)者最頭疼且重要的步驟。證書對代碼簽名來說是必須的,你可以在真機上運行應(yīng)用程序。
有兩種類型的證書:
-
開發(fā)證書:每個團隊的開發(fā)者都有自己的證書,需要請求生成。Xcode會為你做這些,但是最好不要點擊“Fix issue”按鈕,并且能夠理解點擊這個按鈕會真正執(zhí)行什么。開發(fā)證書是發(fā)布應(yīng)用的開發(fā)版本到設(shè)備上。
-
發(fā)布證書:可以有多個,但是最好保持一個公司一個發(fā)布證
書,通過內(nèi)部渠道分享相關(guān)的秘鑰。發(fā)布應(yīng)用到App Store時需要這個證書,或者是公司內(nèi)部的企業(yè)級應(yīng)用分發(fā)。
-
Provisioning Profiles
Provisioning Profiles 可能是系統(tǒng)中最容易引起混淆的部分了,如果你訪問蘋果開發(fā)者網(wǎng)站,你會注意到你可以創(chuàng)建兩種類型的Provisioning Profiles(開發(fā)和發(fā)布)。Provisioning Profiles是“以這個證書的私鑰作為簽名的應(yīng)用可以在這些設(shè)備上正常運行: https://www.quora.com/What-are-the-differences-between-certificates-provisioning-profiles-and-identifiers
你可以閱讀更多相關(guān)資源:
7.設(shè)置應(yīng)用持續(xù)集成和交付過程
建立一個持續(xù)集成和交付過程已成為關(guān)鍵,因為現(xiàn)在它可以幫助您在開發(fā)早期發(fā)現(xiàn)bug和節(jié)省大量的開發(fā)人員的時間。
持續(xù)集成 (CI) 是一種開發(fā)實踐,要求開發(fā)人員一天將代碼同步到共享存儲庫幾次。每次提交都會用自動腳本進行驗證,可以使團隊盡早的發(fā)現(xiàn)問題。
很多工具可以幫你做iOS應(yīng)用程序的持續(xù)集成,比如 Xcode Server、Jenkins和Travis CI。
持續(xù)交付 (CD) 是一個軟件工程的方式,可以使團隊在短周期內(nèi)開發(fā)軟件,確保軟件可以在任何時間可靠地發(fā)布。它旨在更快、更頻繁地構(gòu)建、測試和發(fā)布的軟件。
為什么使用持續(xù)交付?
-
可以在準備應(yīng)用提交、上傳截圖以及發(fā)布應(yīng)用上節(jié)省數(shù)天時間。
-
如果在同事休假期間,但你發(fā)現(xiàn)一個嚴重問題需要修復(fù)并發(fā)布怎么辦?在發(fā)布更新版本時不需要依賴某一個人。
-
通過更頻繁和小版本的更新,提高軟件質(zhì)量和反應(yīng)時間。
雖然有大量的工具供持續(xù)交付,我個人最喜歡的是Fastlane。它非常容易安裝,并提供了一些強大的功能,可以使你整個的編譯和發(fā)布過程自動化。
如果你喜歡這篇文章,歡迎推薦,以便其他人也可以看到。