GithubHelp home page GithubHelp logo

codermikehe / wechat Goto Github PK

View Code? Open in Web Editor NEW
1.2K 24.0 252.0 28.63 MB

🔥 iOS 利用MVVM + RAC + ViewModel-Based Navigation来搭建微信(WeChat 7.0.0+)的整体基本架构,以及实现微信朋友圈、通讯录、下拉小程序、搜索等主要功能,代码规范惊为天人、注释详解令人发指、细节处理精益求精、核心功能配备文档、接近98%还原度的原生App视觉体验,代码不多,注释多。(持续更新,敬请期待,欢迎Star和Fork…)

Home Page: https://github.com/CoderMikeHe/WeChat

License: MIT License

Ruby 0.40% Objective-C 99.31% C 0.29%
mvvm mvvm-architecture mvvm-framework wechat reactivecocoa reactivecocoa-mvvm mvvm-rac-viewmodel ios-mvvm moments contacts

wechat's Introduction

iOS 微信开发

👏 更新

  • 202010:增加 我下拉视频动态 模块。
  • 202007:增加 微信下拉小程序 模块。
  • 202006:增加 微信/通讯录搜索 模块。
  • 202005:增加 通讯录 模块。

🚄 下载


⭐️ 概述

  • 本工程主要是利用MVVM + RAC + ViewModel-Based Navigation的方式来搭建微信(WeChat 7.0.0+)的整体架构,希望能够以点带面,为MVVM + RAC + ViewModel-Based Navigation的这种设计架构提供多一种的实践参考,也为大家在学习MVVM提供一个学习的 Demo。

  • 本工程完全采用Objective-C语言编写,采用MasonryXib的两种控件布局方式;利用cocoapods管理第三方库,当然有些涉及到需要调整第三方库的 UI 时,采用的手动导入的方式;素材资源后期会慢慢和微信一样,完全采用.svg格式的图片资源来代替先前的.png资源,减少包体积。

  • 笔者希望初学者通过学习和实践这个项目,能够打开学习ReactiveCocoa的大门。当然同时也是抛砖引玉,取长补短,希望能够提供一点思路,少走一些弯路,填补一些细坑,在帮助他人的过程中,收获分享技术的乐趣。

  • 后期 UI 设计将完全参照最新的微信(7.0.0+)来开发,但是由于笔者时间有限,该项目的部分 UI,还是微信(7.0.0-)的 UI,大家切勿慌张,先请StarFork,谢谢。

  • 大家若想回顾微信(7.0.0-)前的版本,还请拉取 Tag:v1.0.0分支的代码即可,笔者帮你们找找回忆,但希望大家尽量拉取master最新的代码,毕竟往者不可谏,来者犹可追

  • 本项目之前主要是用于团队内部交流使用,讲述利用MVVM + RAC + ViewModel-Based Navigation的方式来开发一款应用,介绍了其中使用技巧和实用技术,以及一些细节处理,实用为主,功能为辅。

  • 由于2019年初--至今,笔者为求生计,被迫转学Vue开发,老将不死,只会逐渐凋零,以致于渐渐冷落了这个Repo(PS:可能没 Star,没动力,哈哈....),后面会将微信的主要功能补全,尽最大努力还原真实微信。

🚀 模块

  • ✅ 登陆/注册/登出 (ps: UI 尚未适配,逻辑正常)

  • ✅ 我

    • ✅ 个人信息
    • ✅ 设置
  • ✅ 发现

    • ✅ 朋友圈
  • ✅ 通讯录

  • ✅ 搜索

  • 微信首页(TODO...)

    • ✅ 下拉小程序

❗️ 使用

  • Cocoapods 安装教程

  • Demo利用Cocoapods管理第三方框架,若第一次使用本项目,请使用终端cdPodfile所在的文件夹中,如下图所示,然后执行下面两条命令即可,(PS:若你已经更新了本地仓库了,那么pod repo update不用执行,直接pod install即可)。

    Usage.png

    1. pod repo update 或 pod repo update --verbose : 更新本地仓库
    2. pod install : 下载新的库
    
  • 如果你升级了 Mac 的系统时,并且当你的 Mac 系统升级为high sierra的时候,别忘记更新cocoapods。执行命令为:

    $ sudo gem update --system
    $ sudo gem install cocoapods -n/usr/local/bin
    
  • 本项目登录或注册,只支持QQ账号手机号的登录或注册,必须保证QQ手机号的有效性。密码或者验证码可以随便输入,但必须是:密码长度需要保证在8~16位,手机验证码必须保证是6位有效数字

  • 分支策略

    master: 各个功能完整,且稳定,出现Bug优先处理
    dev: 笔者的开发分支,意识流且不稳定,但知识或技术会超前 master 分支,还请按需加载。
    

♥️ 期待

  • 如果在使用过程中遇到 BUG,希望你能 Issues 我,谢谢(或者尝试下载最新的代码看看 BUG 修复没有)。
  • 如果在使用过程中有任何地方不理解,希望你能 Issues 我,我非常乐意促使项目的理解和使用,谢谢。
  • 如果通过该工程的使用和说明文档的阅读,对您在开发中有一点帮助,码字不易,还请点击右上角star按钮,谢谢;
  • 简书地址:http://www.jianshu.com/u/126498da7523

☎️ 主页

GitHub 掘金 简书 CSDN 知乎
点击进入 点击进入 点击进入 点击进入 点击进入

💰 拓展


📖 文档


🌈 预览

🏳️‍🌈 微信模块
虚位以待 虚位以待 虚位以待
🏳️‍🌈 通讯录模块
虚位以待 虚位以待
🏳️‍🌈 搜索模块
🏳️‍🌈 发现模块
虚位以待 虚位以待 虚位以待
🏳️‍🌈 朋友圈模块
虚位以待 虚位以待
🏳️‍🌈 我模块
虚位以待 虚位以待 虚位以待

wechat's People

Contributors

codermikehe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wechat's Issues

缺失文件

为什么我clone下来的项目中 没有Pods文件夹

header view高度方法走两次的问题楼主解决了吗?

/// 设置高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    MHMomentItemViewModel *itemViewModel = self.viewModel.dataSource[section];
    /// 这里每次刷新都会走两次!!! Why???
    return itemViewModel.height;
}

在按照demo导入后,使用不了viewModel中的services

自己新建了一个测试工程,把类都导入进来后报错,使用services中的方法self.viewModel.services dismissViewModelAnimated:YES 报错:method for selector 'popViewModelAnimated:',很奇怪会出现这个问题,services中的client也使用不了,但是下载下来的Wechat demo是没有问题的,想知道是什么问题

heightForHeaderInSection 执行两次的问题

推测是 estimatedSectionHeaderHeight 有关
设置为 0 之后, 一个调用是负责重绘, 一个调用是负责 reload 之后 content offset 保持不变, 所以会调用两次

如果不设置 estimatedSectionHeaderHeight 为 0 , 则只会 reload 时 调用一次,content offset 则是 系统对 header 高度动态预估, 会导致 tableview 的 contetnoffset 异常

以上理论是我推测的
复现方法 , 修改 estimatedSectionHeaderHeight 的值, 滚动几次 点击全文, 再滚动

昨天反馈你的图片不显示的问题我找到了 是iOS14以后的系统

原因YYAnimatedImageView不显示图片
在YYAnimatedImageView类里加入

  • (void)load {
    // 获取系统的对象方法
    Method displayLayerMethod = class_getInstanceMethod(self, @selector(displayLayer:));

    // 获取自己定义的对象方法
    Method displayLayerNewMethod = class_getInstanceMethod(self, @selector(displayLayerNew:));

    // 方法交换
    method_exchangeImplementations(displayLayerMethod, displayLayerNewMethod);
    }

  • (void)displayLayerNew:(CALayer *)layer {

    Ivar imgIvar = class_getInstanceVariable([self class], "_curFrame");
    UIImage *img = object_getIvar(self, imgIvar);
    if (img) {
    layer.contents = (__bridge id)img.CGImage;
    } else {
    if (@available(iOS 14.0, *)) {
    [super displayLayer:layer];
    }
    }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.