A WeChat alternative. Written in Swift 5.

Overview

TSWeChat

TSWeChat - A WeChat alternative, updated to Swift 5.       中文说明

Requirements

  • Cocoapods 1.2.0 +
  • iOS 10.0+ / Mac OS X 10.9+
  • Xcode 10.0+

Features

  • Send your rich text, expression, image and voice.
  • The cell image in TSChatImageCell is drawn by using Mask Layer . The chat background can be changed freely so that UI will look perfect.
  • Custom expression keyboard, custom tool keyboard.
  • Audio wav files can be automatically converted into amr files which facilite file transfer to Android devices. Both of the two type files have been doing cache.
  • When you tap the TSChatVoiceCell. It will automatically check the cache and download it by Alamofire.
  • When you send the image, it will be stored locally by using the caching mechanism of Kingfisher. After successfully uploaded, it will be automatically modified to image link's MD5 value file name.
  • The data are loaded from the JSON file. All the Models are created via ObjectMapper which is easy to convert model objects (classes and structs) from JSON.

Preview

Run pod install in the Terminal and then run TSWeChat.xcworkspace to see all the views.

Directory

Directory name Introduction
Classes To deposit different folders like ViewController, View. Sub directories are divided based on business logic, Such as Message,Address Book,Tabbar,Me,Login and etc, divided according to their functions.
Classes/CoreModule To deposit encapsulation of business logic of basic classes, like HttpManager, Models, ApplicationManager and etc.
General To deposit reused View and Class related with business logic, such as color extension.
Helpers Non-business logic extension, such as: UIView+Extension.swift, UIImage+Resize.swift and etc.
Macro To deposit macros and constant definitions used in the whole application, such as Notifications name , and the third party librarie's keys.
Resources Resources. Such as Assets.xcassets, Media.xcassets, JSON files, media files, plist files and etc.
Vendor To deposit the third party liabraries that cannot be installed by Cocoapods.
Supporting Files To deposit the original files
Scripts APNs script, export IPA file script and etc.
Sketch To deposit the original Sketch files. All the recourses in the project are come from the WeChat IPA folder, but some images I can't find. So I decided to do it myself. Yeah, I love design, sometimes coder become a designer is feeling good. XD

Vendor

See more details

License

TSWeChat is released under the MIT license. See LICENSE for details.

To Do

  • The custom photo album
  • WeChat custom ActionSheet
  • Long press the chat cell
  • The image viewer
  • Address book
  • GIF image cell in TSChatViewController
  • QRCodeViewController
  • ShakeViewController
  • Send my address
  • Video cell in TSChatViewController
  • TimelineViewController
  • Multilanguage support
  • And so on...

Contributing

  • All kinds of contributions (enhancements, new features, documentation & code improvements, issues & bugs reporting & todo task) are welcome. Let's make it better. XD
Comments
  • ios9.3 code7.3 真机调试 编译不过,libopencore 非bitcode

    ios9.3 code7.3 真机调试 编译不过,libopencore 非bitcode

    `Ld /Users/joseph/Desktop/data/projects/react-native-project/PtApp/ios/Build/Products/Debug-iphoneos/TSVoiceConverter/TSVoiceConverter.framework/TSVoiceConverter normal arm64 cd /Users/joseph/Desktop/data/projects/react-native-project/PtApp/ios/Pods export IPHONEOS_DEPLOYMENT_TARGET=8.0 export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch arm64 -dynamiclib -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk -L/Users/joseph/Desktop/data/projects/react-native-project/PtApp/ios/Build/Products/Debug-iphoneos/TSVoiceConverter -L/Users/joseph/Desktop/data/projects/react-native-project/PtApp/ios/Pods/TSVoiceConverter/Sources/lib -F/Users/joseph/Desktop/data/projects/react-native-project/PtApp/ios/Build/Products/Debug-iphoneos/TSVoiceConverter -filelist /Users/joseph/Desktop/data/projects/react-native-project/PtApp/ios/Build/Intermediates/Pods.build/Debug-iphoneos/TSVoiceConverter.build/Objects-normal/arm64/TSVoiceConverter.LinkFileList -install_name @rpath/TSVoiceConverter.framework/TSVoiceConverter -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -miphoneos-version-min=8.0 -dead_strip -Xlinker -no_deduplicate -fembed-bitcode-marker -lopencore-amrnb -lopencore-amrwb -stdlib=libc++ -fobjc-arc -fobjc-link-runtime -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos -Xlinker -add_ast_path -Xlinker /Users/joseph/Desktop/data/projects/react-native-project/PtApp/ios/Build/Intermediates/Pods.build/Debug-iphoneos/TSVoiceConverter.build/Objects-normal/arm64/TSVoiceConverter.swiftmodule -framework Foundation -single_module -compatibility_version 1 -current_version 1 -Xlinker -dependency_info -Xlinker /Users/joseph/Desktop/data/projects/react-native-project/PtApp/ios/Build/Intermediates/Pods.build/Debug-iphoneos/TSVoiceConverter.build/Objects-normal/arm64/TSVoiceConverter_dependency_info.dat -o /Users/joseph/Desktop/data/projects/react-native-project/PtApp/ios/Build/Products/Debug-iphoneos/TSVoiceConverter/TSVoiceConverter.framework/TSVoiceConverter

    ld: '/Users/joseph/Desktop/data/projects/react-native-project/PtApp/ios/Pods/TSVoiceConverter/Sources/lib/libopencore-amrnb.a(wrapper.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)`

    help wanted 
    opened by ptphp 17
  • error: unknown argument: '-suppress-warnings'

    error: unknown argument: '-suppress-warnings'

    您好!我是新手,编译时发现两个错误,都是一样的错误,发生在编译BSGridCollectionViewLayout 和Alamofire的时候。请问博主知道是什么原因吗?谢谢! :0: error: unknown argument: '-suppress-warnings' Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1

    duplicate help wanted 
    opened by quhongjun 6
  • Xcode 10.3无法编译通过

    Xcode 10.3无法编译通过

    macOS Mojave 10.14.6 Xcode 10.3

    执行pod install后显示以下信息,这个步骤应该没有问题,版本看上去都是对的 Analyzing dependencies Downloading dependencies Using Alamofire (4.8.2) Using BSGridCollectionViewLayout (1.2.3) Using BSImagePicker (2.10.0) Using BSImageView (1.0.3) Using Dollar (9.0.0) Using INTULocationManager (4.3.2) Using KeychainAccess (3.2.0) Using Kingfisher (5.7.0) Using ObjcExceptionBridging (1.0.1) Using ObjectMapper (3.5.1) Using Reveal-SDK (4) Using RxBlocking (5.0.0) Using RxCocoa (5.0.0) Using RxRelay (5.0.0) Using RxSwift (5.0.0) Using SVProgressHUD (2.0.4) Using SnapKit (5.0.0) Using SwiftyJSON (4.3.0) Using TSVoiceConverter (0.1.6) Using TimedSilver (1.2.0) Using UIColor_Hex_Swift (5.1.0) Using XCGLogger (7.0.0) Using XLActionController (5.0.0) Using YYText (1.0.7) Generating Pods project Integrating client project Sending stats Pod installation complete! There are 20 dependencies from the Podfile and 24 total pods installed.

    打开TSWeChat.xcworkspace,编译RxSwift的时候会报一些错误,导致后面无法编译通过,相关报错信息如下:

    /Users/yanjiahua/LearningIOS/TSWeChat/Pods/RxSwift/RxSwift/Observables/Delay.swift:114:58: Value of type 'RxTimeInterval' (aka 'DispatchTimeInterval') has no member 'reduceWithSpanBetween'

    /Users/yanjiahua/LearningIOS/TSWeChat/Pods/RxSwift/RxSwift/Observables/Throttle.swift:74:53: Value of type 'RxTimeInterval' (aka 'DispatchTimeInterval') has no member 'reduceWithSpanBetween'

    /Users/yanjiahua/LearningIOS/TSWeChat/Pods/RxSwift/RxSwift/Observables/Throttle.swift:80:16: Value of type 'RxTimeInterval' (aka 'DispatchTimeInterval') has no member 'isNow'

    /Users/yanjiahua/LearningIOS/TSWeChat/Pods/RxSwift/RxSwift/Schedulers/VirtualTimeScheduler.swift:79:25: Value of type 'RxTime' (aka 'Date') has no member 'addingDispatchInterval'

    在网上查了有人碰到类似问题,删除Xcode缓存文件重启后解决问题,这边试了几次,还是无法解决,不知是否是Xcode新版本的问题

    duplicate 
    opened by yanjiahua 5
  • pod两次了失败

    pod两次了失败

    [!] Error installing YYText [!] /usr/local/bin/git clone https://github.com/ibireme/YYText.git /var/folders/4z/dctdgmh94j73gysppdm9lf5h0000gp/T/d20170223-2742-8sv9po --template= --single-branch --depth 1 --branch 1.0.7

    Cloning into '/var/folders/4z/dctdgmh94j73gysppdm9lf5h0000gp/T/d20170223-2742-8sv9po'... error: RPC failed; result=56, HTTP code = 200 fatal: The remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed

    opened by jj89757hhb 2
  • bug in extension TSChatViewController

    bug in extension TSChatViewController

            guard textView.text.componentsSeparatedByString(" ").count < textView.text.length else {
                TSProgressHUD.ts_showWarningWithStatus("不能发送空白消息")
                return
            }
    

    can't input a character

    opened by 1322579329 2
  • 音频录音下载出错

    音频录音下载出错

    ‼️‼️‼️ 2018-06-06 13:56:19.760 [Error] [main] [AudioPlayManager.swift:176] downloadAudio > Failed with error: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.inputFileReadFailed(file:///private/var/mobile/Containers/Data/Application/E7830B0F-4BD0-44C0-AC2C-B6B45B4F667C/tmp/CFNetworkDownload_m5q8qZ.tmp)) ‼️‼️‼️

    opened by dalehqb 1
  • Error in running! How to solve this one?

    Error in running! How to solve this one?

    /Users/macbookpro/Music/TSWeChat-master/Pods/RxSwift/RxSwift/Schedulers/VirtualTimeScheduler.swift:79:25: Value of type 'RxTime' (aka 'Date') has no member 'addingDispatchInterval'

    /Users/macbookpro/Music/TSWeChat-master/Pods/RxSwift/RxSwift/Observables/Delay.swift:114:58: Value of type 'RxTimeInterval' (aka 'DispatchTimeInterval') has no member 'reduceWithSpanBetween'

    /Users/macbookpro/Music/TSWeChat-master/Pods/RxSwift/RxSwift/Observables/Throttle.swift:74:53: Value of type 'RxTimeInterval' (aka 'DispatchTimeInterval') has no member 'reduceWithSpanBetween'

    /Users/macbookpro/Music/TSWeChat-master/Pods/RxSwift/RxSwift/Observables/Throttle.swift:80:16: Value of type 'RxTimeInterval' (aka 'DispatchTimeInterval') has no member 'isNow'

    opened by Puie 1
  • 录音过短时没有readyStopRecord

    录音过短时没有readyStopRecord

    录音过短时没有stop recorder, 录音一直在录制,当超过60s时会回调stopRecord if self.audioTimeInterval.int32Value > 60 { self.stopRecord() } 导致还会录音成功。

    虽然在stopRecord里面调用了 self.operationQueue.cancelAllOperations() 如果录音时长小于0.5s时,但是子线程的while循环一直在跑,因为recorder.isRecording 是true cancelAllOperations() 的文档是这样描述: For operations that are already executing, the operation object itself must check for cancellation and stop what it is doing so that it can move to the finished state.

    opened by Beyond-Chao 3
Releases(1.0.0)
Owner
Hilen Lai
Add a bio
Hilen Lai
Messenger Clone - Real-time iOS Chat with Firebase Firestore written in Swift

Real time Swift iOS Chat with Firebase - Messenger Clone This is an extremely simple chat app source code of an iOS Swift Chat app. It leverages Messa

Instamobile 587 Nov 22, 2022
Real time chat app written in Swift 5 using Firebase

Quick Chat for iOS Quick Chat for iOS is a real time chat app written in Swift 5 using Firebase. Quick Chat allows to send and receive text messages,

Henry Aslanyan 1.8k Nov 25, 2022
Swift-Chat-Application - Swift Chat Application Using Firebase , messagekit

Swift-Chat-Application Using Firebase , messagekit

Metin ATALAY 7 Oct 9, 2022
Legacy mobile Rocket.Chat client in Swift for iOS

IMPORTANT: PLEASE READ THIS FIRST Rocket.Chat mobile is moving to React Native. Development on this repository by Rocket.Chat has now ceased. If your

Rocket.Chat 1k Nov 12, 2022
Integrate third party libraries by using Cocoapods and Swift Package Manager, store data in the cloud using Firebase Firestore.

Integrate third party libraries by using Cocoapods and Swift Package Manager, store data in the cloud using Firebase Firestore. Exercising query and s

WEI 0 Dec 19, 2021
Real time chat application in Swift 5 using Firebase

Real time chat application in Swift 5 using Firebase

null 1 May 13, 2022
A Swift client for Supabase Realtime server.

realtime-swift Listens to changes in a PostgreSQL Database and via websockets. A Swift client for Supabase Realtime server. Usage Creating a Socket co

Supabase Community 32 Oct 23, 2022
Fully Functional iOS14 Swift Chat app Using Firebase as backend.

Social Chat Messenger App This iOS14 Chat App is built with Swift in Xcode12 and Using Firebase as backend to authenticate users. Features Light and D

null 0 Nov 25, 2021
Create a real time chat application in Swift 5 using Firebase

Messenger Real Time Chat App Project to create a real time chat application in Swift 5 using Firebase. Features Facebook Log In Google Sign In Email/P

null 2 May 29, 2022
Chat-App - GV Chat App is an iOS app built with Swift

GV Chat App - iOS Explore the docs » Report Bug · Request Feature About The Proj

Cyrus Dumbwani 0 Jan 25, 2022
Jake Brown Tech Messenger With Swift

Open the FalconMessenger.xcworkspace in Xcode. Change the Bundle Identifier to m

Jake Brown 3 Feb 20, 2022
WeChat-like Moments App implemented using Swift 5.5 and SwiftUI

Moments SwiftUI This is a re-implementation of Moments App using Swift 5.5 and SwiftUI. Features: Aysnc/Await Actor AysncImage MVVM BFF Screenshot Als

Jake Lin 45 Oct 26, 2022
WCDB is a cross-platform database framework developed by WeChat.

WCDB 中文版本请参看这里 WCDB is an efficient, complete, easy-to-use mobile database framework used in the WeChat application. It's currently available on iOS,

Tencent 9.5k Nov 17, 2022
An efficient, small mobile key-value storage framework developed by WeChat. Works on Android, iOS, macOS, Windows, and POSIX.

中文版本请参看这里 MMKV is an efficient, small, easy-to-use mobile key-value storage framework used in the WeChat application. It's currently available on Andr

Tencent 15.3k Nov 23, 2022
macOS WeChat.app header files version history (automatic updated)

macos-wechat-app-tracker macOS WeChat.app header files version history (automatic updated) Troubleshooting $ class-dump -H /Applications/WeChat.app 20

Wechaty 3 Feb 10, 2022
🇨🇳 Learn how to make WeChat with SwiftUI. 微信 7.0 🟢

Overview Features Screenshots TODO Requirements License 中文 Overview I will continue to follow the development of technology, the goal is to bring Swif

Gesen 926 Nov 16, 2022
An elegant alternative to the UIStepper written in Swift

An elegant alternative to the UIStepper in Swift with a thumb slider addition to control the value update with more flexibility. Usage let stepper = S

Yannick Loriot 426 Sep 22, 2022
An alternative gym workouts tracker written in SwiftUI.

Gymspot Gymspot is an alternative workout tracker written in SwiftUI. I decided to start working on it because: I need an easy-to-use tracker for my w

Alessio Moiso 2 Jul 1, 2022
Schedule timing task in Swift using a fluent API. (A friendly alternative to Timer)

Schedule(简体中文) Schedule is a timing tasks scheduler written in Swift. It allows you run timing tasks with elegant and intuitive syntax. Features Elega

Luo Xiu 1.8k Nov 16, 2022
Schedule timing task in Swift using a fluent API. (A friendly alternative to Timer)

Schedule(简体中文) Schedule is a timing tasks scheduler written in Swift. It allows you run timing tasks with elegant and intuitive syntax. Features Elega

Luo Xiu 1.8k Nov 20, 2022