Xcode上一个社交类APP项目的设计/运行流程简述

来源:互联网 发布:自学php找工作 编辑:程序博客网 时间:2024/06/06 07:20

    • 简介
    • 前言
    • 准备工作
    • 框架结构
      • chat
        • AppDelegate
        • storyboard
        • Assetsxcassets
    • MVC设计模式
      • Model模块
      • Controller模块
      • View模块
    • extension
    • entities
    • clients
      • UserClient
      • mainClient
      • ChatClient
      • AnyChatClient
    • 用况图
    • 类图
    • 补充

简介:

从学长手中接过的一个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具体组成如下:
lib文件
初始包含文件

可以看见,主要包含的是各类库文件和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图如下:
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.类图

类图1

类图2

10.补充

这个项目也只是开了个头,个人来讲目前也只是比较熟悉了原来的项目的大部分,在此做了一些从个人角度出发的理解,今后需要做的东西还非常多,后续会有更多的补充。

原创粉丝点击