**说明文档** - 代码的最后使用环境是:Xcode10.0, 最低支持版本iOS8.0 - 三方库说明,本项目部分三方库使用cocoapods管理,所使用三方库:[cocoapods安装教程](https://www.jianshu.com/p/1bb0ad42cb2e) 1. AFNetworking(一个轻量级的网络请求库) 2. SDWebImage(具有缓存支持的异步映像下载程序) 3. FMDB(围绕SQLite的Objective-C封装) 4. Masonry(一个轻量级的布局框架) 5. IQKeyboardManager(无代码插入式通用库防止键盘滑动问题) 6. CocoaAsyncSocket(异步套接字库) 7. 友盟统计 8. 百度统计 9. MJRefresh 10. 腾讯防水校验 **注意事项** 1. 为个人开发者账号真机测试,项目去掉了推送,如有需要请自行添加。 2. 项目中集成的百度和友盟统计,如有需要请自己申请相关资料。 **结构简介** - resource 图片资源文件 - Thirdpart 封装的类 - Remote 网络请求封装 - Common 常用分类 - Controllers 业务控制器目录 **数据通讯socket** 工程中socket通讯都由socket类同一管理 服务订阅方法: - `- (void)sendMsgWithLength:(int)length withsequenceId:(long)sequenceId withcmd:(short)cmd withVersion:(int)Version withRequestId:(int)RequestId withbody:(NSDictionary*)jsonDict;` 此方法是订阅所有socket链接的方法,以下是参数含义: - length 消息头固定字节长度 - sequenceId token - cmd 订阅服务类型 - RequestId - jsonDict 扩展json对象 - 注意:订阅socket推送的参数都是与服务端协商好的,如果有变动需要与服务端协商沟通 订阅消息回调代理方法: - `- (void)delegateSocket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag;` - 所有的订阅服务回调都会执行此代理方法,需要对回调的data数据响应头做处理,如有订阅服务必须实现此代理方法 ``` - (void)delegateSocket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag { NSData *endData = [data subdataWithRange:NSMakeRange(SOCKETRESPONSE_LENGTH, data.length -SOCKETRESPONSE_LENGTH)]; NSString *endStr= [[NSString alloc] initWithData:endData encoding:NSUTF8StringEncoding]; NSData *cmdData = [data subdataWithRange:NSMakeRange(12,2)]; uint16_t cmd=[SocketUtils uint16FromBytes:cmdData]; //cmd便是响应的服务类型,以此来处理相应的业务 } ``` **常见问题** 证书报错: - 选择工程->Capabilities->Push Notifications 关闭此选项 - 选择工程->Capabilities->Background Modes 关闭此选项 路径报错: - 选择工程->Build settings->Prefix Header 把工程中PrefixHeader.pch拖入此处即可