引言##
- APP采用object-c纯代码开发,末使用故事面板(storyboard),个别view采用xib(自定义cell可以是xib)。原因是:<a href="http://blog.devtang.com/2015/03/22/ios-dev-controversy-2/">传送门</a>。
- 布局我们采用Masonry布局。Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 。非常简单的使用纯代码实现autoLayout布局,是目前非常流行的手工布局框架。<a href="https://github.com/Masonry/Masonry">传送门</a>。
- 使用MVVM的设计模式,显示层更加细节化、可定制化,数据管理清晰化,业务和数据层松解耦。
- 使用AFNetworking为网络请求引擎,目前被95%以上的app所采用。<a href="https://github.com/AFNetworking">传送门</a>。
- 使用cocoapods进行库的统一管理,使用方便,清晰明了。<a href="https://cocoapods.org">传送门</a>
- 使用JSPath作为热补丁技术。不用等待审核,动态修改程序。根据业务需要动态增加或者更改需求。动态修改程序bug。<a href="http://www.jspatch.com">传送门</a>
项目版本管理##
使用git管理代码,团队开发,目前放到coding网站上
开发环境##
操作系统:mac os
开发软件:Xcode7.3
安全策略##
在涉及个人帐户信息有关网络请求,采用https方式,通过非对称密钥对请求串加解密,加密方式(MD5、RSA)。
第三方库导入方式##
cocoapods统一管理
框架目录结构##
工具箱(YNCUtils)##
工具箱:开发中用到的常用工具,让开发者的开发更加简易(结合BFKit使用)
工具箱包含内容:
- YNCMacro:宏定义字段和方法、公用枚举
- YNCTool(工具类):loading框、浏览器、轮播图、扫码、自定义视图控件、常用方法工具类、定位、获取相册图片及拍照图片、弹出菜单、第三方分享二次封装
- YNCFoundation:Foundation类别
- YNCUIKit:YNCUIKit类别
基类(YNCBase)##
基类继承关系图#####
项目基类列表#####
- ViewControllers
- BaseViewController:所有控制器基类
- BaseTabBarController:分栏控制器基类
- ListViewController:下拉刷新,上拉加载基类
- BasePageViewController:滑动选项卡基类
- SDCNavViewController:导航控制器基类
- SearchViewController:搜索基类
- ViewModels:
- BaseViewModel:所有viewmodel的基类
- Views:
- BaseView:所有view的基类
- MJSweetCornHeader:下拉刷新玉米动画
- TZCustomCell:自定义输入框显示框cell
项目基类开放的属性和方法#####
BaseViewController
-属性:
-控制器推出类型
-自定义导航条
-导航条左侧按钮
-导航条右侧按钮
-导航条左侧按钮样式
-方法:
-显示重新加载视图
-隐藏重新加载视图
-没有网时,点击重新加载按钮(重新方法)
-有网时的处理(重新方法)
-无网络时的处理(重新方法)
-创建没有数据时的视图
-隐藏没有数据时的视图
-设置导航条背景颜色
-设置导航标题
-导航条左侧按钮点击事件(重写方法)
-导航条右侧按钮点击事件(重写方法)
-推出模态视图
-返回模态视图
-推出导航视图
-返回导航视图
-返回到导航根视图ListViewController
-属性:
-tableView
-数据源
-当前页数
-刷新类型
-方法:
-添加下拉刷新,上拉加载
-添加上拉加载
-载入新数据(重新方法)
-载入更多数据(重新方法)
-列表刷新设置
-列表刷新设置BaseTabBarController
-方法:
-创建分栏控制器
-添加自定义中心分栏按钮BasePageViewController
-属性:
-子控制器数组
-子控制器标题名
-方法:
-设置布局BaseViewModel:
-属性:
-ReturnValueBlock
-ErrorCodeBlock
-FailureBlock
-方法:
-传入交互block块
网络请求(YNCNetwork)##
采用AFNetworking,目前被95%以上的app所采用,并进行了二次封装,加入了缓存策略。采用block进行回调,返回成功、请求异常、请求失败。
开放方法结构图
使用工具
- AFnetworking网络框架
- SQLite数据库
- FMDB数据库操作工具
使用方法
@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);
}];
项目开发模块目录##
业务模块开发:
- 首页
- 订单
- 云键
- 搜索
- 个人中心
- 购物车
- 商品
- 支付
非业务模块开发:
- app启动:AppDelegate,城市选择,启动广告,引导页,更新
- 登录注册
- 根视图控制器
- 扫码
开发模块设计模式###
mvvm框架
- model:数据模型
- view:视图显示
- viewModel:数据处理
- viewcontroller:视图控制器
基本流程:
viewModel请求并接收数据,并对数据进行处理,将处理后的模型数据传递给viewcontroller,viewcontroller拿到数据后控制view的显示。
MVVM的设计模式,显示层更加细节化、可定制化,数据管理清晰化,业务和数据层松解耦。
界面布局##
使用Masnory工具,对Autolayerout和Size Classes的布局方式进行了封装,简单实用,节省了大量代码。
数据存储方式##
根据产品需要,数据从服务器下载和本地存储,本地数据分缓存和内存保留,经常读取的写入缓存,内存数据按大小,小的写入plist文件,大的写入数据库,用FMDB
地址信息:
plist文件写入。路径:(沙盒/Library/Caches)
用户数据本地化:
NSUserdefuat 本地存储。路径:(沙盒/Library/Preferences)
本地文件路径使用规范
1.Documents:
只有用户生成的文件、其他数据及其他程序不能重新创建的文件,应该保存在<Application_Home>/Documents 目录下面,并将通过iCloud自动备份。
2.Library:
可以重新下载或者重新生成的数据应该保存在 <Application_Home>/Library/Caches 目录下面。举个例子,比如杂志、新闻、地图应用使用的数据库缓存文件和可下载内容应该保存到这个文件夹。
3.tmp:
只是临时使用的数据应该保存到 <Application_Home>/tmp 文件夹。尽管 iCloud 不会备份这些文件,但在应用在使用完这些数据之后要注意随时删除,避免占用用户设备的空间
事件处理##
有kvo,通知,代理和block(使用理最多)
模型定义##
使用MJExtension对请求数据进行model转化,是一套字典和模型之间互相转换的超轻量级框架,能对不同数据类型和不同数据结构进行处理。
网络图片加载##
采用SDWebImage库进行处理,可以对图片进行异步加载并缓存。
热补丁##
jspath
支付功能##
对农行,支付宝,微信等支付功能进行了封装
分享功能##
对shareSDK二次封装,包含自定义和非自定义两种样式。
定位##
高德地图
代码规范##
按照先前小组定制的代码开发规范进行开发,规范文档已上传svn
统计##
集成了友盟统计
推送##
采用极光推送
项目打包##
通过fir快速打包,可提供给测试下载url.