|
| 1 | + |
1 | 2 | # DynamicTabKit |
2 | | -A production-ready SwiftUI project demonstrating a fully dynamic, user-customizable tab bar. Users start with 3 default tabs and can add, remove, or reorder tabs anytime from the Settings screen - all powered by a centralized TabStore using ObservableObject. |
3 | 3 |
|
4 | | -✨ Features |
| 4 | +A production-ready SwiftUI project demonstrating a fully dynamic, user-customizable Tab Bar architecture. |
5 | 5 |
|
6 | | -✅ 3 default tabs on first launch (Home, Profile, Settings) |
| 6 | +Users start with 3 default tabs and can add, remove, or reorder tabs anytime from the Settings screen — powered by a centralized state manager built with ObservableObject. |
7 | 7 |
|
8 | | -✅ Add or remove tabs dynamically from Settings |
| 8 | +--- |
9 | 9 |
|
10 | | -✅ Core tabs (Home, Profile, Settings) are protected — cannot be removed |
| 10 | +## ✨ Features |
11 | 11 |
|
12 | | -✅ Tab selection state resets safely when an active tab is removed |
| 12 | +- ✅ 3 default tabs on first launch (Home, Profile, Settings) |
| 13 | +- ✅ Add or remove tabs dynamically from Settings |
| 14 | +- ✅ Core tabs (Home, Profile, Settings) are protected — cannot be removed |
| 15 | +- ✅ Tab selection resets safely when the active tab is removed |
| 16 | +- ✅ SF Symbols support for every tab item |
| 17 | +- ✅ Centralized state via `TabBarManager` (No `@Binding` prop drilling) |
| 18 | +- ✅ Full SwiftUI Previews on all views |
| 19 | +- ✅ Clean MVVM-style architecture |
| 20 | +- ✅ CI-enabled with GitHub Actions |
13 | 21 |
|
14 | | -✅ Label with SF Symbols icon on every tab item |
| 22 | +--- |
15 | 23 |
|
16 | | -✅ Centralized state via TabStore — no @Binding prop drilling |
| 24 | +## 🏗 Architecture |
17 | 25 |
|
18 | | -✅ Full SwiftUI Previews on every view |
| 26 | +**Pattern:** MVVM |
| 27 | +**State Management:** ObservableObject-based TabStore |
| 28 | +**UI Framework:** SwiftUI |
19 | 29 |
|
20 | | -✅ Clean MVVM-style architecture, ready to extend |
| 30 | +Project Structure: |
| 31 | +DynamicTabKit/ |
| 32 | +├── Model/ |
| 33 | +├── View/ |
| 34 | +│ ├── Setting/ |
| 35 | +│ └── Tab/ |
| 36 | +├── ViewModel/ |
| 37 | +└── DynamicTabKitApp.swift |
| 38 | +--- |
21 | 39 |
|
22 | | -🚀 Setup & Installation |
| 40 | +## 🚀 Setup & Installation |
23 | 41 |
|
24 | | -Requirements |
| 42 | +### Requirements |
25 | 43 |
|
26 | | -ToolMinimum |
| 44 | +| Tool | Version | |
| 45 | +|------|----------| |
| 46 | +| Xcode | 15.0+ | |
| 47 | +| iOS Deployment Target | 17.0+ | |
| 48 | +| Swift | 5.9+ | |
| 49 | +| macOS (Development) | Ventura 13.0+ | |
27 | 50 |
|
28 | | -VersionXcode15.0+ |
| 51 | +### Run Locally |
29 | 52 |
|
30 | | -iOS Deployment Target17.0+ |
| 53 | +1. Clone the repository |
| 54 | +2. Open `DynamicTabKit.xcodeproj` |
| 55 | +3. Select the `DynamicTabKit` scheme |
| 56 | +4. Run on iOS Simulator |
31 | 57 |
|
32 | | -Swift5.9+ |
| 58 | +--- |
33 | 59 |
|
34 | | -macOS (for development)Ventura 13.0+ |
| 60 | +## 🧠 Engineering Highlights |
35 | 61 |
|
36 | | -🙋♂️ Author |
37 | | -Navin Rai |
| 62 | +- Safe state reset handling |
| 63 | +- Clean separation of concerns |
| 64 | +- Extensible tab architecture |
| 65 | +- Production-ready folder structure |
| 66 | +- No prop-drilling anti-pattern |
| 67 | +- CI pipeline enabled |
38 | 68 |
|
39 | | -GitHub: @Navin-Rai-Developer |
| 69 | +--- |
40 | 70 |
|
41 | | -LinkedIn: https://www.linkedin.com/in/navinkumarrai |
| 71 | +## 📦 CI Status |
| 72 | + |
| 73 | +GitHub Actions automatically builds the project on every push to `main`. |
| 74 | + |
| 75 | +--- |
| 76 | + |
| 77 | +## 🙋♂️ Author |
| 78 | + |
| 79 | +**Navin Rai** |
| 80 | +Senior iOS Developer |
| 81 | + |
| 82 | +- GitHub: [@Navin-Rai-Developer](https://github.com/Navin-Rai-Developer) |
| 83 | +- LinkedIn: https://www.linkedin.com/in/navinkumarrai |
| 84 | + |
| 85 | +--- |
| 86 | + |
| 87 | +⭐ If you find this useful, consider starring the repository. |
0 commit comments