maks-jago/swiftui-udf
Architecture overview
<p align="center"> <img width="80%" src="Resources/udf-overview-diagram.png" alt="SwiftUI UDF Diagram"/> </p>
Add-ons
| Name | Description | |-------------|---------------------------| | GenerambaTemplates| Templates for automatic generation of UDF modules with all the stubs, storages, and some features. | | UDFWebSocketsClient| Implementation of a WebSocket client in UDF style, with ready-made solutions for easy connection and usage without extra effort. | | UDFCrashlyticsLogger| Custom Logger for logging actioons to Firebase Crashlytics, both for crash reports and regular errors, with predefined actions filtering. | UDFAnalytics| Implementation of events logging, scenarios, update user properties, and other analytics settings in UDF style. Currently supported analytics platforms include Amplitude, Firebase, Mixpanel, AppsFlyer, and Facebook. |
Apps Built on SwiftUI-UDF
<table> <tr> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/wain.png" alt="Wain" width="100" height="100"/> <br> <sub><b>Wain</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/cephalgo.png" alt="Cephalgo" width="100" height="100"/> <br> <sub><b>Cephalgo</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/wishew.png" alt="Wishew" width="100" height="100"/> <br> <sub><b>Wishew</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/NanoHabits.png" alt="NanoHabits" width="100" height="100"/> <br> <sub><b>NanoHabits</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/Kanvo.png" alt="Kanvo" width="100" height="100"/> <br> <sub><b>Kanvo</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/MetaStudio.png" alt="MetaStudio" width="100" height="100"/> <br> <sub><b>MetaStudio</b></sub> </td> </tr> <tr> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/FlatPlanet.png" alt="FlatPlanet" width="100" height="100"/> <br> <sub><b>FlatPlanet</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/Kopi.png" alt="Kopi" width="100" height="100"/> <br> <sub><b>Kopi</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/Flick.png" alt="Flick" width="100" height="100"/> <br> <sub><b>Flick</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/StupidRaisins.png" alt="StupidRaisins" width="100" height="100"/> <br> <sub><b>StupidRaisins</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/MamaTalk.png" alt="MamaTalk" width="100" height="100"/> <br> <sub><b>MamaTalk</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/ecorial.png" alt="Ecorial" width="100" height="100"/> <br> <sub><b>Ecorial</b></sub> </td> </tr> <tr> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/MeditationSchool.png" alt="MeditationSchool" width="100" height="100"/> <br> <sub><b>MeditationSchool</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/CNDAEvent.png" alt="CNDA Event" width="100" height="100"/> <br> <sub><b>CNDA Event</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/FireFly.png" alt="FireFly" width="100" height="100"/> <br> <sub><b>FireFly</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/chatsumer_vendor.png" alt="Chatsumer Business" width="100" height="100"/> <br> <sub><b>Chatsumer B</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/chatsumer.png" alt="Chatsumer" width="100" height="100"/> <br> <sub><b>Chatsumer</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/Breverie.png" alt="Breverie" width="100" height="100"/> <br> <sub><b>Breverie</b></sub> </td> </tr> <tr> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/CasualAthletes.png" alt="CasualAthletes" width="100" height="100"/> <br> <sub><b>CasualAthletes</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/CelebrityNDA.png" alt="Celebrity NDA" width="100" height="100"/> <br> <sub><b>Celebrity NDA</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/zippit.png" alt="Zippit" width="100" height="100"/> <br> <sub><b>Zippit</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/SkillApp.png" alt="SkillApp" width="100" height="100"/> <br> <sub><b>SkillApp</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/librarius.png" alt="Librarius" width="100" height="100"/> <br> <sub><b>Librarius</b></sub> </td> <td align="center"> <img src="https://github.com/Maks-Jago/Resources/blob/main/youmari.png" alt="Youmari" width="100" height="100"/> <br> <sub><b>Youmari</b></sub> </td> </tr> </table>
P.S. If your app is built using the SwiftUI-UDF architecture, please email me at mx.kuznetsov.dev@gmail.com to have your app added to this list. I would appreciate it.
Example project - [Flick](https://github.com/urlaunched-com/SwiftUI-UDF-ExampleProject/tree/main?tab=readme-ov-file)
Flick serves as a showcase of UDF principles:
- Built with dynamic state and reducer composition
- Modular structure using SPM for features, localization, design system, and API layers
- Uses
@BindableReducerfor dynamic container-based reducer management - Includes snapshot testing and production-level code hygiene
The license
The SwiftUI-UDF stays under the Apache 2.0 license and is free to use.
- That means you have to mention "Maksym Kuznietsov - Founder of urlaunched.com" as the original author and reproduce the LICENSE text inside your app;
- Including the full text of license in modified software.
If you have some questions or want to try and get all benefits of UDF architecture - write to mx.kuznetsov.dev@gmail.com
Package Metadata
Repository: maks-jago/swiftui-udf
Default branch: master
README: README.md