Coding-iOSCODING iOS 客戶端源代碼
Coding_iOS客戶端項(xiàng)目介紹
編譯環(huán)境:Xcode-Version 8.0 (8A218a)
讓項(xiàng)目跑起來先
項(xiàng)目里用到了 CocoaPods 和 Carthage,如果沒有安裝的話,需要先自行安裝。
Clone 代碼后,初次執(zhí)行前,需要雙擊運(yùn)行根目錄下的bootstrap腳本。這個(gè)過程涉及到下載依賴,可能會(huì)有點(diǎn)久,需耐心等待。
Tip:由于用到了 submodule,所以必需要把 git 倉(cāng)庫(kù) clone 到本地,而不是只點(diǎn)擊‘下載’按鈕下載 zip 文件!?。?/strong>
| 精彩項(xiàng)目 | 任務(wù)管理 | 項(xiàng)目文檔 | 代碼托管 | 趣味冒泡 |
|---|---|---|---|---|
下面介紹一下文件的大概目錄先:
.
├── Coding_iOS
│ ├── Models:數(shù)據(jù)類
│ ├── Views:視圖類
│ │ ├── CCell:所有的 CollectionViewCell 都在這里
│ │ ├── Cell:所有的 TableViewCell 都在這里
│ │ └── XXX:ListView(項(xiàng)目、動(dòng)態(tài)、任務(wù)、討論、文檔、代碼)和 InputView(用于聊天和評(píng)論的輸入框)
│ ├── Controllers:控制器,對(duì)應(yīng)app中的各個(gè)頁(yè)面
│ │ ├── Login:登錄頁(yè)面
│ │ ├── RootControllers:登錄后的根頁(yè)面
│ │ ├── MeSetting:設(shè)置信息頁(yè)面
│ │ └── XXX:其它頁(yè)面
│ ├── Images:app 中用到的所有的圖片都在這里
│ ├── Resources:資源文件
│ ├── Util:一些常用控件和 Category、Manager 之類
│ │ ├── Common
│ │ ├── Manager
│ │ ├── OC_Category
│ │ └── ObjcRuntime
│ └── Vendor:用到的一些第三方類庫(kù),一般都有改動(dòng)
│ ├── AFNetworking
│ ├── AGEmojiKeyboard
│ ├── ASProgressPopUpView
│ ├── ActionSheetPicker
│ ├── FontAwesome+iOS
│ ├── MJPhotoBrowser
│ ├── MLEmojiLabel
│ ├── NSDate+Helper
│ ├── NSStringEmojize
│ ├── PPiAwesomeButton
│ ├── QBImagePickerController
│ ├── RDVTabBarController
│ ├── SMPageControl
│ ├── SVPullToRefresh
│ ├── SWTableViewCell
│ ├── UMENG
│ ├── UMessage_Sdk_1.1.0
│ ├── XGPush
│ ├── XTSegmentControl
│ └── iCarousel
└── Pods:項(xiàng)目使用了 [CocoaPods](http://code4app.com/article/cocoapods-install-usage) 這個(gè)類庫(kù)管理工具
再說下項(xiàng)目的啟動(dòng)流程:
在 AppDelegate 的啟動(dòng)方法中,先設(shè)置了一下 Appearance 的樣式,然后根據(jù)用戶的登錄狀態(tài)選擇是去加載登錄頁(yè)面 LoginViewController,還是登錄后的 RootTabViewController 頁(yè)面。
RootTabViewController 繼承自第三方庫(kù) RDVTabBarController。在 RootTabViewController 里面依次加載了 Project_RootViewController、MyTask_RootViewController、Tweet_RootViewController、Message_RootViewController、Me_RootViewController 五個(gè) RootViewController,后續(xù)的頁(yè)面跳轉(zhuǎn)都是基于這幾個(gè) RootViewController 引過去的。
項(xiàng)目里面還有些需要注意的點(diǎn)
-
Coding_NetAPIManager:基本上 app 的所有請(qǐng)求接口都放在了這里。網(wǎng)絡(luò)請(qǐng)求使用的是 AFNetworking 庫(kù),與服務(wù)器之間的數(shù)據(jù)交互格式用的都是 json(與 Coding 使用的 api 一致)。
-
關(guān)于推送:剛開始是用的 友盟推送,后來又改用了 騰訊信鴿,因?yàn)橐骖櫯f版本 app 的推送,所以服務(wù)器是同時(shí)保留了兩套推送。但是為了確保新版本的 app 不同時(shí)收到雙份相同的推送消息,所以當(dāng)前代碼里還存留了友盟的 sdk,用于解除推送 token 與友盟 Alias 的綁定。
-
關(guān)于 ProjectViewController:這個(gè)就是進(jìn)入到某個(gè)項(xiàng)目之后的頁(yè)面,這里包含了項(xiàng)目的動(dòng)態(tài)、任務(wù)、討論、文檔、代碼、成員各類信息,而且每類信息里面還可能會(huì)有新的分類(如‘任務(wù)’里面還分有各個(gè)成員的任務(wù));這個(gè)頁(yè)面相當(dāng)?shù)挠纺[,我對(duì)它們做了拆分,都放在視圖類 Views 目錄下面。 首先是把數(shù)據(jù)列表獨(dú)立成了對(duì)應(yīng)的 XXXListView(如 ProjectTaskListView);然后如果需要標(biāo)簽切換的話,會(huì)再新建一個(gè) XXXsView(如:ProjectTasksView),在這個(gè)視圖中,上面會(huì)放一個(gè)切換欄 XTSegmentControl 顯示各個(gè)標(biāo)簽,下面放一個(gè) iCarousel 可以滑動(dòng)顯示各個(gè)標(biāo)簽的內(nèi)容;最后這些視圖都會(huì)存儲(chǔ)在 ProjectViewController 的 projectContentDict 變量里面,根據(jù)頂部導(dǎo)航欄選擇的類別,去顯示或隱藏對(duì)應(yīng)的視圖。
-
關(guān)于 UIMessageInputView:這個(gè)是私信聊天的輸入框。因?yàn)檫@個(gè)輸入框好多地方都有用到(冒泡、任務(wù)、討論的評(píng)論還有私信),所以這個(gè)輸入框就寫成了一個(gè)相對(duì)獨(dú)立的控件,并且直接顯示在了 keyWindow 里面而不是某個(gè)視圖里。這里的表情鍵盤用的是 AGEmojiKeyboard 改寫了一下。
-
關(guān)于 Emoji:這個(gè),Coding 站點(diǎn)的 emoji 都是用的圖片,而且服務(wù)器是不接受大部分 emoji 字符的,所以剛開始的時(shí)候 app 一直不能處理 emoji 表情;又因?yàn)闆]有 emoji 圖片名和 emoji code 碼的對(duì)應(yīng)關(guān)系表,所以拖了很久都沒能做好轉(zhuǎn)換。直到在 github 上面找到了 NSStringEmojize 這個(gè)項(xiàng)目;試了一下,雖然也不能全部解析,但是大部分表情都能正確顯示了,不能更感謝。
-
關(guān)于如何正確顯示冒泡的內(nèi)容:api 返回的數(shù)據(jù)里面,冒泡內(nèi)容都是 html 格式,需要做一下預(yù)處理;其實(shí)私信、討論里面的內(nèi)容也是 html。解析 html 的類名是 HtmlMediaItem,它是先用 hpple 對(duì) html 進(jìn)行了解析,然后把對(duì)應(yīng)的 media 元素和對(duì)應(yīng)的位置做一個(gè)存儲(chǔ),顯示的時(shí)候便可以根據(jù)需要來顯示了。
最后說下 CocoaPods 里面用到的第三方類庫(kù)
- SDWebImage:圖片加載
- TTTAttributedLabel:富文本的 label,可點(diǎn)擊鏈接
- RegexKitLite:正則表達(dá)式
- hpple:html 解析
- MBProgressHUD:hud 提示框
- ODRefreshControl:下拉刷新
- TPKeyboardAvoiding:有文字輸入時(shí),能根據(jù)鍵盤是否彈出來調(diào)整自身顯示內(nèi)容的位置
- JDStatusBarNotification:狀態(tài)欄提示框
- BlocksKit:block 工具包。將很多需要用 delegate 實(shí)現(xiàn)的方法整合成了 block 的形式
- ReactiveCocoa:基于響應(yīng)式編程思想的 oc 實(shí)踐(是個(gè)好東西呢)
License
Coding is available under the MIT license. See the LICENSE file for more info.
