Xcode上一個社交類APP專案的設計/執行流程簡述
簡介:
從學長手中接過的一個IOS端社交類APP程式框架,基於SWIFT語言編寫,本篇文章就是作為該程式的設計/執行流程的一個簡述。
1.前言:
這個專案是接手一個學長做了一些工作後面的一個專案,中間歷時較長,會有不少相關的問題,而在設計初期的需求分析與設計階段的欠缺給後面的工作帶來了不少的麻煩,加上本身個人也沒接觸過,還是知之甚少,藉此文章記錄專案工作中的點滴困難與收穫,同時也可以提供給之後上手的人一個很好的參考。
2.準備工作:
該專案接手時使用的語言標準是swift3.標準,Xode版本為8.1,
支援到 IOS10](撰寫本文前一段時間已經更新到了swift4,Xode 9版本,支援到 IOS10),學習與練習熟悉原專案的時間花費了2個月,
藉助 清華大學出版社的李發展編著的《IOS移動開發從入門到精通》以及一些幫助文件和一些網上資料,
理解原有框架後在上面進行了幾個新的業務的新增和原有業務優化的修改,為了之後在上面大動手腳做的準備。
3.框架結構:
全部檔案構成如上圖所示,前面4個.xcodeproj是第三方開發庫:
MZTimerLabel用作秒錶或者倒計時功能。
MBProgressHUD是一個開源第三方庫,實現了很多種樣式的提示框,使用上簡單、方便,並且可以對顯示的內容進行自定義。
IQKeyboardManager可以很容易地解決彈起鍵盤遮蓋輸入框的問題,並且易於整合,不需要侵入性地繼承特定的類,也不需要實現某些奇怪的協議,滿足大部分需求只需要少於5行程式碼。
Alamofire就是swift版本的AFNetworking,所以Alamofire也是進行網路訪問的框架。
chat資料夾中包含的就是專案的主體部分,包括的lib,AppDelegate,Main.story.board都是重要的部分。
lib中包含了該專案需要用到的各類庫,以及重要的anyChat的庫檔案。
這裡就要講到Anychat了:它是一套跨平臺的(*)即時通訊解決方案,基於先進的H.264視訊編碼標準、AAC音訊編碼標準與P2P技術,作為一個社交類的APP,這個SDK的使用會讓我們更少的去考慮底層的實現。
chat
chat具體組成如下:
可以看見,主要包含的是各類庫檔案和AnyChat相應功能的庫檔案。
其中,建立應用程式之後之後,預設有AppDelegate.swift檔案。
AppDelegate
AppDelegate為何物?
其為整個應用的一個代理,提供程式啟動、退出等類似監控的介面。
其可以在整個應用程式中呼叫,在其他頁面中可以使用程式碼段獲取其中的全域性變數。
AppDelegate類中預設帶有如下幾個方法,具體功能如下:
應用程式第一次執行時執行
這個方法只有在App第一次執行的時候被執行過一次,每次App從後臺啟用時都不會再執行該方法。
(注:所有一般我們都在這裡獲取使用者許可,比如本地訊息推送的許可等)
func application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
return true
}
應用程式掛起時執行
當有電話進來或者鎖屏時,應用程式便會掛起。
func applicationWillResignActive(application: UIApplication)
應用程式進入後臺時執行
func applicationDidEnterBackground(application: UIApplication)
應用程式將要重新回到前臺時執行
func applicationWillEnterForeground(application: UIApplication)
應用程式重新進入活動狀態時執行
func applicationDidBecomeActive(application: UIApplication)
應用程式將要退出時執行
這裡通常是用來儲存資料和做一些退出前的清理工作。
func applicationWillTerminate(application: UIApplication)
儲存資料到持久層
func saveContext()
storyboard
接下來是Main.storyboard,
這也是在APP專案建立後自動生成的,就是一個UI設計介面,可以在裡面建立新的檢視,拖拽元件,修改屬性,新增規約,與程式碼段建立連線等,極大的可制定性與便利性,專案的整個storyboard圖如下:
具體的設計與關聯等等操作均可以在周圍的工具欄或者右鍵選單中找到,在此不再贅述。
Assets.xcassets
在其中新增專案需要的各種圖片,會給出1x到3x不同規格圖片根據螢幕進行自適應。
4.MVC設計模式:
MVC 設計模式是指模型(Model), 檢視(View), 控制器(Controller)。
它強制將程式的輸入,處理和輸出分開,是他們互相分離,各自處理自己的任務,而控制器C的存在,則是用來協調資料模型M和使用者介面V。
它們在IOS中的通訊方式如下:
資料模型Model通過通知Notification和鍵值觀察KVO機制與控制器Controller間接通訊
控制器通過設定View的DataSource屬性,設定檢視的資料來源,如UItable
檢視View通過動作Action Target向檢視控制器ViewContoller報告事件的發生,例如使用者點選了檢視
檢視View通過Delegate委託(代理),向檢視控制器報告事件的發生。如UIAlertViewDelegate,UITextFieldDelegate
接下來就該結合檔案粗略的講解一下該專案中MVC模組的作用了。
Model模組
Model中到目前為止包含了
UserModel
關於使用者資訊的例項方法,清空方法,各類屬性。
MainModel
例項方法,Url的連結地址,anyChat的連結地址,連線埠。
MessageModel
例項方法,訊息佇列的儲存等。
VideoModel
例項方法,viedos儲存。
StudyModel
例項方法,學習圖片名稱,長度,名稱,介紹佇列佇列訊息的儲存,在本地例項學習課程的列表。
Controller模組
helloViewController
登入介面檢視,註冊介面,驗證介面,完成介面檢視控制的方法與屬性設定等。
chatController
登入後的歡迎主介面,使用者檢視,交流檢視,傳送圖片檢視控制的方法與屬性設定。
liveController
直播跳轉介面,專家直播檢視,農民直播檢視與房間中農民列表的檢視控制方法與屬性設定。
videoController
視訊列表檢視,錄製視訊檢視的控制方法與屬性設定。
studyController
學習列表檢視,模組檢視的控制方法與屬性設定。
View模組
該模組在storyboard中使用ViewController完成,比較簡單,主要是元件的拖拽等操作。
5.extension
關於擴充套件,你可以這樣理解:擴充套件是一種匿名分類;但是和匿名分類不一樣的是,擴充套件可以新增新的例項變數
在此專案中,extension類只添加了一個訊息提示窗的構造例項。
6.entities
物件檔案中包含的主要是該專案中ChatController用到的例項化物件,包括:
- user物件
- message物件
- LeftImageTableViewCell物件
- RightImageTableViewCell物件
- UerTableViewCell物件
7.clients
該檔案中的類用於設定本地的AnyChat的連線,傳輸,從後臺接收訊息/影象/視訊,初始化設定等。
UserClient
包含了以下功能方法:
- 傳送郵件/接受返回訊息
- 傳送認證/接受返回訊息
- 傳送註冊資訊/接受返回訊息
- 傳送登入資訊/接受返回訊息
- 傳送設定登陸狀態資訊/接受返回訊息
- 傳送接受使用者資訊請求/接受返回訊息
- 傳送接受視訊資訊請求/接受返回訊息
- 傳送修改視訊名稱請求/接受返回訊息
mainClient
包含了以下功能方法:
- 接受並初始化使用者列表
- 初始化訊息字典並新增值
- 接受並初始化視訊檔案
ChatClient
包含了以下功能方法:
- 傳送訊息的方法
- 傳送圖片的方法
- 圖片大小自適應的方法
- 視訊錄製的方法
AnyChatClient
包含了以下功能方法:
- 訊息觀察者方法
- 兩步登入方法一
- 兩步登入方法二
- 離線訊息傳送方法
- 拍照完成事件
- 視訊錄製完成事件
- 收到檔案傳輸事件
- 收到文字訊息事件
- 連結伺服器訊息
- 使用者登入訊息
- 使用者進入房間訊息
- 房間線上使用者訊息
- 使用者進入房間訊息
- 使用者退出房間訊息
- 網路斷開訊息
注:最後7個事件為AnyChatNotifyMessageDelegate協議下的七個事件
8.用況圖
9.類圖
10.補充
這個專案也只是開了個頭,個人來講目前也只是比較熟悉了原來的專案的大部分,在此做了一些從個人角度出發的理解,今後需要做的東西還非常多,後續會有更多的補充。