[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-6936":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},6936,"TSWeChat","hilen\u002FTSWeChat","hilen","A WeChat alternative. Written in Swift 5.","",null,"Swift",3751,773,145,17,0,1,30.67,"MIT License",false,"master",true,[24,25,26,27,28,29,30,31,32,33],"alamofire","audio","json","keyboard","project","rxswift","snapkit","swift-3","ui","wechat","2026-06-12 02:01:32","\u003Cimg src=\".\u002Fimages\u002Flogo.png\" alt=\"TSWeChat\" title=\"TSWeChat\"\u002F>\n\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhilen\u002FTSWeChat\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Ftravis\u002Frust-lang\u002Frust.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fswift.org\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSwift-compatible-orange.svg\">\u003C\u002Fa>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-iOS%208.0%2B-ff69b4.svg\">\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhilen\u002FTSWeChat\u002Fblob\u002Fmaster\u002FLICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-green.svg?style=flat\">\u003C\u002Fa>\n\u003Ca href=\"http:\u002F\u002Ftwitter.com\u002Fhilenlai\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Ftwitter-@hilenlai-blue.svg?style=flat\">\u003C\u002Fa>\n\nTSWeChat - A [WeChat](https:\u002F\u002Fitunes.apple.com\u002Fcn\u002Fapp\u002Fwei\u002Fid414478124) alternative, updated to Swift 5. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[中文说明](Chinese_README.md)\n\n## Requirements\n- [Cocoapods](https:\u002F\u002Fgithub.com\u002FCocoaPods\u002FCocoaPods) 1.2.0 +\n- iOS 10.0+ \u002F Mac OS X 10.9+\n- Xcode 10.0+\n\n\n## Features\n- Send your rich text, expression, image and voice.\n- The cell image in `TSChatImageCell` is drawn by using `Mask Layer` . The chat background can be changed freely so that UI will look perfect.\n- Custom expression keyboard, custom tool keyboard.\n- 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.\n- When you tap the `TSChatVoiceCell`. It will automatically check the cache and download it by [Alamofire](https:\u002F\u002Fgithub.com\u002FAlamofire\u002FAlamofire). \n- When you send the image, it will be stored locally by using the caching mechanism of [Kingfisher](https:\u002F\u002Fgithub.com\u002Fonevcat\u002FKingfisher). After successfully uploaded, it will be automatically modified to image link's `MD5` value file name.\n- The data are loaded from the JSON file. All the `Models` are created via [ObjectMapper](https:\u002F\u002Fgithub.com\u002FHearst-DD\u002FObjectMapper) which is easy to convert model objects (classes and structs) from JSON.\n\n\n\n## Preview\nRun `pod install` in the `Terminal` and then run `TSWeChat.xcworkspace` to see all the views.\u003Cbr>\u003Cbr>\n![](images\u002Fpreview1.gif)\n\n![](images\u002Fpreview2.gif)\n\n![](images\u002Fpreview3.gif)\n\n## Directory\n\nDirectory name|Introduction\n---|---\nClasses| 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. \nClasses\u002FCoreModule| To deposit encapsulation of business logic of basic classes, like HttpManager, Models, ApplicationManager and etc.\nGeneral|To deposit reused `View and Class` related with business logic, such as color extension.\nHelpers|Non-business logic extension, such as: `UIView+Extension.swift`, `UIImage+Resize.swift` and etc.\nMacro|To deposit macros and constant definitions used in the whole application, such as ` Notifications ` name , and  the third party librarie's keys.\nResources| Resources. Such as `Assets.xcassets`, `Media.xcassets`, `JSON files`, `media files`, `plist files` and etc.\nVendor| To deposit the third party liabraries that cannot be installed by `Cocoapods`.\nSupporting Files| To deposit the original files\nScripts| APNs script, export IPA file script and etc.\nSketch| 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\n\n\n## Vendor\n[See more details](https:\u002F\u002Fgithub.com\u002Fhilen\u002FTSWeChat\u002Fblob\u002Fmaster\u002FPodfile)\n\n## License\nTSWeChat is released under the MIT license. See [LICENSE](https:\u002F\u002Fgithub.com\u002Fhilen\u002FTSWeChat\u002Fblob\u002Fmaster\u002FLICENSE) for details.\n\n## To Do\n- The custom photo album\n- WeChat custom ActionSheet\n- Long press the chat cell\n- The image viewer\n- Address book\n- GIF image cell in TSChatViewController\n- QRCodeViewController\n- ShakeViewController\n- Send my address\n- Video cell in TSChatViewController\n- TimelineViewController\n- Multilanguage support\n- And so on...\n\n## Contributing\n- All kinds of contributions (enhancements, new features, documentation & code improvements, issues & bugs reporting & todo task) are welcome. Let's make it better. XD\n\n\n\n\n","TSWeChat 是一个使用 Swift 5 编写的微信替代应用。该项目支持发送富文本、表情、图片和语音消息，采用了 Mask Layer 绘制聊天界面中的图片，允许用户自由更换聊天背景以达到完美的UI效果。此外，它还提供了自定义表情键盘和工具键盘，并能够自动将音频文件从 wav 格式转换为 amr 格式以便于跨平台传输。项目利用 Alamofire 进行网络请求，Kingfisher 管理图片缓存，ObjectMapper 处理JSON数据与模型对象之间的转换。适用于需要快速构建类似微信功能的iOS应用开发场景，要求iOS 10.0以上版本及Xcode 10.0以上环境。",2,"2026-06-11 03:09:37","top_language"]