引言##
- APP采用object-c純代碼開(kāi)發(fā),末使用故事面板(storyboard),個(gè)別view采用xib(自定義cell可以是xib)。原因是:<a >傳送門(mén)</a>。
- 布局我們采用Masonry布局。Masonry是一個(gè)輕量級(jí)的布局框架 擁有自己的描述語(yǔ)法 采用更優(yōu)雅的鏈?zhǔn)秸Z(yǔ)法封裝自動(dòng)布局 簡(jiǎn)潔明了 并具有高可讀性 。非常簡(jiǎn)單的使用純代碼實(shí)現(xiàn)autoLayout布局,是目前非常流行的手工布局框架。<a >傳送門(mén)</a>。
- 使用MVVM的設(shè)計(jì)模式,顯示層更加細(xì)節(jié)化、可定制化,數(shù)據(jù)管理清晰化,業(yè)務(wù)和數(shù)據(jù)層松解耦。
- 使用AFNetworking為網(wǎng)絡(luò)請(qǐng)求引擎,目前被95%以上的app所采用。<a >傳送門(mén)</a>。
- 使用cocoapods進(jìn)行庫(kù)的統(tǒng)一管理,使用方便,清晰明了。<a >傳送門(mén)</a>
- 使用JSPath作為熱補(bǔ)丁技術(shù)。不用等待審核,動(dòng)態(tài)修改程序。根據(jù)業(yè)務(wù)需要?jiǎng)討B(tài)增加或者更改需求。動(dòng)態(tài)修改程序bug。<a >傳送門(mén)</a>
項(xiàng)目版本管理##
使用git管理代碼,團(tuán)隊(duì)開(kāi)發(fā),目前放到coding網(wǎng)站上
開(kāi)發(fā)環(huán)境##
操作系統(tǒng):mac os
開(kāi)發(fā)軟件:Xcode7.3
安全策略##
在涉及個(gè)人帳戶信息有關(guān)網(wǎng)絡(luò)請(qǐng)求,采用https方式,通過(guò)非對(duì)稱密鑰對(duì)請(qǐng)求串加解密,加密方式(MD5、RSA)。
第三方庫(kù)導(dǎo)入方式##
cocoapods統(tǒng)一管理

框架目錄結(jié)構(gòu)##

工具箱(YNCUtils)##

工具箱:開(kāi)發(fā)中用到的常用工具,讓開(kāi)發(fā)者的開(kāi)發(fā)更加簡(jiǎn)易(結(jié)合BFKit使用)
工具箱包含內(nèi)容:
- YNCMacro:宏定義字段和方法、公用枚舉
- YNCTool(工具類):loading框、瀏覽器、輪播圖、掃碼、自定義視圖控件、常用方法工具類、定位、獲取相冊(cè)圖片及拍照?qǐng)D片、彈出菜單、第三方分享二次封裝
- YNCFoundation:Foundation類別
- YNCUIKit:YNCUIKit類別
基類(YNCBase)##
基類繼承關(guān)系圖#####

項(xiàng)目基類列表#####
- ViewControllers
- BaseViewController:所有控制器基類
- BaseTabBarController:分欄控制器基類
- ListViewController:下拉刷新,上拉加載基類
- BasePageViewController:滑動(dòng)選項(xiàng)卡基類
- SDCNavViewController:導(dǎo)航控制器基類
- SearchViewController:搜索基類
- ViewModels:
- BaseViewModel:所有viewmodel的基類
- Views:
- BaseView:所有view的基類
- MJSweetCornHeader:下拉刷新玉米動(dòng)畫(huà)
- TZCustomCell:自定義輸入框顯示框cell
項(xiàng)目基類開(kāi)放的屬性和方法#####
BaseViewController
-屬性:
-控制器推出類型
-自定義導(dǎo)航條
-導(dǎo)航條左側(cè)按鈕
-導(dǎo)航條右側(cè)按鈕
-導(dǎo)航條左側(cè)按鈕樣式
-方法:
-顯示重新加載視圖
-隱藏重新加載視圖
-沒(méi)有網(wǎng)時(shí),點(diǎn)擊重新加載按鈕(重新方法)
-有網(wǎng)時(shí)的處理(重新方法)
-無(wú)網(wǎng)絡(luò)時(shí)的處理(重新方法)
-創(chuàng)建沒(méi)有數(shù)據(jù)時(shí)的視圖
-隱藏沒(méi)有數(shù)據(jù)時(shí)的視圖
-設(shè)置導(dǎo)航條背景顏色
-設(shè)置導(dǎo)航標(biāo)題
-導(dǎo)航條左側(cè)按鈕點(diǎn)擊事件(重寫(xiě)方法)
-導(dǎo)航條右側(cè)按鈕點(diǎn)擊事件(重寫(xiě)方法)
-推出模態(tài)視圖
-返回模態(tài)視圖
-推出導(dǎo)航視圖
-返回導(dǎo)航視圖
-返回到導(dǎo)航根視圖ListViewController
-屬性:
-tableView
-數(shù)據(jù)源
-當(dāng)前頁(yè)數(shù)
-刷新類型
-方法:
-添加下拉刷新,上拉加載
-添加上拉加載
-載入新數(shù)據(jù)(重新方法)
-載入更多數(shù)據(jù)(重新方法)
-列表刷新設(shè)置
-列表刷新設(shè)置BaseTabBarController
-方法:
-創(chuàng)建分欄控制器
-添加自定義中心分欄按鈕BasePageViewController
-屬性:
-子控制器數(shù)組
-子控制器標(biāo)題名
-方法:
-設(shè)置布局BaseViewModel:
-屬性:
-ReturnValueBlock
-ErrorCodeBlock
-FailureBlock
-方法:
-傳入交互block塊
網(wǎng)絡(luò)請(qǐng)求(YNCNetwork)##
采用AFNetworking,目前被95%以上的app所采用,并進(jìn)行了二次封裝,加入了緩存策略。采用block進(jìn)行回調(diào),返回成功、請(qǐng)求異常、請(qǐng)求失敗。
開(kāi)放方法結(jié)構(gòu)圖

使用工具
- AFnetworking網(wǎng)絡(luò)框架
- SQLite數(shù)據(jù)庫(kù)
- FMDB數(shù)據(jù)庫(kù)操作工具
使用方法
@weakify(self);
[HttpRequest post:AppURLHomeShoplist params:dict cachePolicy:YNCHttpReturnCacheDataThenLoad ReturnValeuBlock:^(id returnValue) {
@strongify(self);
HomePageModel *model = [HomePageModel mj_objectWithKeyValues:returnValue];
self.returnBlock(model);
} ErrorCodeBlock:^(int errorCode, NSString *errMsg) {
@strongify(self);
self.errorBlock(errorCode,errMsg);
} FailureBlock:^(id error) {
@strongify(self);
self.failureBlock(error);
}];
項(xiàng)目開(kāi)發(fā)模塊目錄##

業(yè)務(wù)模塊開(kāi)發(fā):
- 首頁(yè)
- 訂單
- 云鍵
- 搜索
- 個(gè)人中心
- 購(gòu)物車
- 商品
- 支付
非業(yè)務(wù)模塊開(kāi)發(fā):
- app啟動(dòng):AppDelegate,城市選擇,啟動(dòng)廣告,引導(dǎo)頁(yè),更新
- 登錄注冊(cè)
- 根視圖控制器
- 掃碼
開(kāi)發(fā)模塊設(shè)計(jì)模式###
mvvm框架
- model:數(shù)據(jù)模型
- view:視圖顯示
- viewModel:數(shù)據(jù)處理
- viewcontroller:視圖控制器
基本流程:
viewModel請(qǐng)求并接收數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行處理,將處理后的模型數(shù)據(jù)傳遞給viewcontroller,viewcontroller拿到數(shù)據(jù)后控制view的顯示。
MVVM的設(shè)計(jì)模式,顯示層更加細(xì)節(jié)化、可定制化,數(shù)據(jù)管理清晰化,業(yè)務(wù)和數(shù)據(jù)層松解耦。

界面布局##
使用Masnory工具,對(duì)Autolayerout和Size Classes的布局方式進(jìn)行了封裝,簡(jiǎn)單實(shí)用,節(jié)省了大量代碼。
數(shù)據(jù)存儲(chǔ)方式##
根據(jù)產(chǎn)品需要,數(shù)據(jù)從服務(wù)器下載和本地存儲(chǔ),本地?cái)?shù)據(jù)分緩存和內(nèi)存保留,經(jīng)常讀取的寫(xiě)入緩存,內(nèi)存數(shù)據(jù)按大小,小的寫(xiě)入plist文件,大的寫(xiě)入數(shù)據(jù)庫(kù),用FMDB
地址信息:
plist文件寫(xiě)入。路徑:(沙盒/Library/Caches)
用戶數(shù)據(jù)本地化:
NSUserdefuat 本地存儲(chǔ)。路徑:(沙盒/Library/Preferences)
本地文件路徑使用規(guī)范
1.Documents:
只有用戶生成的文件、其他數(shù)據(jù)及其他程序不能重新創(chuàng)建的文件,應(yīng)該保存在<Application_Home>/Documents 目錄下面,并將通過(guò)iCloud自動(dòng)備份。
2.Library:
可以重新下載或者重新生成的數(shù)據(jù)應(yīng)該保存在 <Application_Home>/Library/Caches 目錄下面。舉個(gè)例子,比如雜志、新聞、地圖應(yīng)用使用的數(shù)據(jù)庫(kù)緩存文件和可下載內(nèi)容應(yīng)該保存到這個(gè)文件夾。
3.tmp:
只是臨時(shí)使用的數(shù)據(jù)應(yīng)該保存到 <Application_Home>/tmp 文件夾。盡管 iCloud 不會(huì)備份這些文件,但在應(yīng)用在使用完這些數(shù)據(jù)之后要注意隨時(shí)刪除,避免占用用戶設(shè)備的空間
事件處理##
有kvo,通知,代理和block(使用理最多)
模型定義##
使用MJExtension對(duì)請(qǐng)求數(shù)據(jù)進(jìn)行model轉(zhuǎn)化,是一套字典和模型之間互相轉(zhuǎn)換的超輕量級(jí)框架,能對(duì)不同數(shù)據(jù)類型和不同數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理。
網(wǎng)絡(luò)圖片加載##
采用SDWebImage庫(kù)進(jìn)行處理,可以對(duì)圖片進(jìn)行異步加載并緩存。
熱補(bǔ)丁##
jspath
支付功能##
對(duì)農(nóng)行,支付寶,微信等支付功能進(jìn)行了封裝
分享功能##
對(duì)shareSDK二次封裝,包含自定義和非自定義兩種樣式。
定位##
高德地圖
代碼規(guī)范##
按照先前小組定制的代碼開(kāi)發(fā)規(guī)范進(jìn)行開(kāi)發(fā),規(guī)范文檔已上傳svn
統(tǒng)計(jì)##
集成了友盟統(tǒng)計(jì)
推送##
采用極光推送
項(xiàng)目打包##
通過(guò)fir快速打包,可提供給測(cè)試下載url.
模塊功能細(xì)分##
