iOS架构文档

引言##

  • 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统一管理

F27B85ED-F0EB-43DC-97C7-E480DB3A8A91.png

框架目录结构##

F1BD6630-E349-4BA4-BCF0-811E93B77D5F.png

工具箱(YNCUtils)##

6D73F628-9399-4A07-8E40-EE5574DC8A8B.png

工具箱:开发中用到的常用工具,让开发者的开发更加简易(结合BFKit使用)
工具箱包含内容:

  • YNCMacro:宏定义字段和方法、公用枚举
  • YNCTool(工具类):loading框、浏览器、轮播图、扫码、自定义视图控件、常用方法工具类、定位、获取相册图片及拍照图片、弹出菜单、第三方分享二次封装
  • YNCFoundation:Foundation类别
  • YNCUIKit:YNCUIKit类别

基类(YNCBase)##


基类继承关系图#####
0D664D65-95FA-483A-BDAA-20265DCAFC9B.png
项目基类列表#####
  • 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进行回调,返回成功、请求异常、请求失败。

开放方法结构图
7D096CCD-6834-4E4D-B4F2-58F36B65075D.png
使用工具
  • 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);
}];

项目开发模块目录##

A140C002-3D58-4C93-9345-E9C86D458778.png
业务模块开发:
  • 首页
  • 订单
  • 云键
  • 搜索
  • 个人中心
  • 购物车
  • 商品
  • 支付
非业务模块开发:
  • app启动:AppDelegate,城市选择,启动广告,引导页,更新
  • 登录注册
  • 根视图控制器
  • 扫码

开发模块设计模式###

mvvm框架
  • model:数据模型
  • view:视图显示
  • viewModel:数据处理
  • viewcontroller:视图控制器
基本流程:

viewModel请求并接收数据,并对数据进行处理,将处理后的模型数据传递给viewcontroller,viewcontroller拿到数据后控制view的显示。
MVVM的设计模式,显示层更加细节化、可定制化,数据管理清晰化,业务和数据层松解耦。

A7407A1C-CB22-4EFC-9059-31493280F3AC.png

界面布局##

使用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.

模块功能细分##

D948C780-53B5-4889-B587-013E86546CD8.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容