Π£ΠΌΠ½ΠΎΠ΅ iOS ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°Π·Π±ΠΈΠ²ΠΊΠΈ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π΄Π»Ρ Mi Band ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΌΠ°ΡΡ-ΡΡΡΡΠΎΠΉΡΡΠ²
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
| π Π£ΠΌΠ½Π°Ρ ΡΠ°Π·Π±ΠΈΠ²ΠΊΠ° ΡΠ΅ΠΊΡΡΠ° | ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΠ°ΡΡΠΈ Π΄ΠΎ 240 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² |
| π ΠΠΈΠ±ΠΊΠΈΠ΅ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ | ΠΡΠΏΡΠ°Π²ΠΊΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π°ΠΌΠΈ |
| π ΠΡΡΠΎΡΠΈΡ ΠΎΡΠΏΡΠ°Π²ΠΎΠΊ | Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ² |
| π Π¨Π°Π±Π»ΠΎΠ½Ρ ΡΠ΅ΠΊΡΡΠΎΠ² | Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ |
| βοΈ ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ | ΠΠΈΠ±ΠΊΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠ΅ΠΉ, ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠ² ΠΈ Π·Π²ΡΠΊΠ° |
| πΎ ΠΠΊΡΠΏΠΎΡΡ/ΠΠΌΠΏΠΎΡΡ | Π Π΅Π·Π΅ΡΠ²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ |
| π¨ Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ | Π€ΠΈΠΎΠ»Π΅ΡΠΎΠ²ΡΠΉ Π°ΠΊΡΠ΅Π½ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΡΡΠΌΠ½ΠΎΠΉ ΡΠ΅ΠΌΡ |
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² iOS ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ:
graph TD
A[SwiftUI Views] --> B[TextToBandViewModel]
B --> C[Models]
B --> D[Services]
C --> E[HistoryItem]
C --> F[TextTemplate]
C --> G[NotificationItem]
D --> H[NotificationManager]
D --> I[BackupManager]
- UI Framework: SwiftUI Ρ MVVM Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ
- Notifications: UNUserNotificationCenter Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ
- Storage: UserDefaults + JSON Π΄Π»Ρ ΠΏΠ΅ΡΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΡ
- Settings: Settings Bundle Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ
- Testing: XCTest Π΄Π»Ρ Unit ΠΈ UI ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
TextToBand/
βββ π± Views/ # SwiftUI ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
β βββ ContentView.swift # ΠΠ»Π°Π²Π½ΡΠΉ ΡΠΊΡΠ°Π½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
β βββ HistoryView.swift # ΠΠΊΡΠ°Π½ ΠΈΡΡΠΎΡΠΈΠΈ ΠΎΡΠΏΡΠ°Π²ΠΎΠΊ
β βββ TemplatesView.swift # Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ
β βββ SettingsView.swift # ΠΠΊΡΠ°Π½ Π½Π°ΡΡΡΠΎΠ΅ΠΊ
βββ π§ ViewModels/ # ΠΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ° MVVM
β βββ TextToBandViewModel.swift
βββ π Models/ # ΠΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ
β βββ HistoryItem.swift # ΠΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΡΡΠΎΡΠΈΠΈ
β βββ TextTemplate.swift # Π¨Π°Π±Π»ΠΎΠ½ ΡΠ΅ΠΊΡΡΠ°
β βββ NotificationItem.swift # ΠΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ
β βββ AppSettings.swift # ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
βββ π§ Services/ # ΠΠ½Π΅ΡΠ½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ
β βββ NotificationManager.swift # Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡΠΌΠΈ
β βββ BackupManager.swift # ΠΠΊΡΠΏΠΎΡΡ/ΠΈΠΌΠΏΠΎΡΡ Π΄Π°Π½Π½ΡΡ
βββ π§© Components/ # ΠΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ
β βββ NotificationCard.swift
βββ π§ͺ Tests/ # Π’Π΅ΡΡΡ
βββ TextToBandTests/ # Unit ΡΠ΅ΡΡΡ
βββ TextToBandUITests/ # UI ΡΠ΅ΡΡΡ
ΠΡΠΎΠ΅ΠΊΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΡΠ΅ΡΡΠ°ΠΌΠΈ:
- β
TextToBandViewModelTests- ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ° - β
HistoryItemTests- ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π΄Π°Π½Π½ΡΡ - β
TextTemplateTests- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ - β
NotificationManagerTests- ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ - β
BackupManagerTests- Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠΊΡΠΏΠΎΡΡ/ΠΈΠΌΠΏΠΎΡΡ - β
BasicTests- ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
- β
TextToBandUITests- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
- macOS: 14.0+ (Sonoma)
- Xcode: 16.0+
- iOS: 18.5+
- Swift: 5.9+
- Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈΠ· Releases
- Π‘Π»Π΅Π΄ΡΠΉΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ Π² ΡΠ°ΠΉΠ»Π΅
BUILD_IPA.mdΠ΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ IPA - Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ IPA ΡΠ΅ΡΠ΅Π· iTunes, Xcode ΠΈΠ»ΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ (AltStore, Sideloadly)
- ΠΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ Π² ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ β ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ β VPN ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ
-
ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ
git clone https://github.com/OrDinaD/TextToBand.git cd TextToBand -
ΠΡΠΊΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
open TextToBand.xcodeproj
-
Π‘Π±ΠΎΡΠΊΠ° ΠΈ Π·Π°ΠΏΡΡΠΊ
- ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠΈΠΌΡΠ»ΡΡΠΎΡ iPhone
- ΠΠ°ΠΆΠΌΠΈΡΠ΅
Cmd + RΠΈΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡβΆοΈ Play
# Π‘Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
xcodebuild -scheme TextToBand -destination 'platform=iOS Simulator,name=iPhone 16' build
# ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΎΠ²
xcodebuild -scheme TextToBand -destination 'platform=iOS Simulator,name=iPhone 16' test
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π² ΡΠΈΠΌΡΠ»ΡΡΠΎΡ
xcodebuild -scheme TextToBand -destination 'platform=iOS Simulator,name=iPhone 16' install-
π¬ ΠΠ²ΠΎΠ΄ ΡΠ΅ΠΊΡΡΠ°
- ΠΠ²Π΅Π΄ΠΈΡΠ΅ Π΄Π»ΠΈΠ½Π½ΡΠΉ ΡΠ΅ΠΊΡΡ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅
- ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ Π±ΡΠ΄ΡΡΠΈΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ
-
βοΈ Π Π°Π·Π±ΠΈΠ²ΠΊΠ°
- ΠΠ°ΠΆΠΌΠΈΡΠ΅ "Π Π°Π·Π±ΠΈΡΡ ΡΠ΅ΠΊΡΡ" Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ ΠΏΠΎ 240 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
- Π’Π΅ΠΊΡΡ ΡΠΌΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ
-
π€ ΠΡΠΏΡΠ°Π²ΠΊΠ°
- "ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠ΅ΠΉΡΠ°Ρ" - Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Π°Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π°ΠΌΠΈ
- "ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠ΅ΡΠ΅Π·" - Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ
-
βοΈ ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ
- Π Π°Π·ΠΌΠ΅Ρ ΡΠ°ΡΡΠΈ ΡΠ΅ΠΊΡΡΠ° (50-300 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²)
- ΠΠ½ΡΠ΅ΡΠ²Π°Π» ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡΠΌΠΈ (1-60 ΡΠ΅ΠΊΡΠ½Π΄)
- ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅/Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π²ΡΠΊΠ°
-
π Π¨Π°Π±Π»ΠΎΠ½Ρ
- Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²
- ΠΡΡΡΡΠ°Ρ Π²ΡΡΠ°Π²ΠΊΠ° ΠΎΠ΄Π½ΠΈΠΌ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ
-
π ΠΡΡΠΎΡΠΈΡ
- ΠΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΠΉΡΠ΅ Π²ΡΠ΅ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΠ΅ΠΊΡΡΡ
- ΠΠΎΠ²ΡΠΎΡΠ½Π°Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Ρ ΠΎΠ΄Π½ΠΈΠΌ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ
- Π‘ΡΠ°ΡΡΡΡ: Π§Π΅ΡΠ½ΠΎΠ²ΠΈΠΊ β Π ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ β ΠΡΠΏΡΠ°Π²ΠΊΠ° β ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ
-
πΎ Π Π΅Π·Π΅ΡΠ²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
- ΠΠΊΡΠΏΠΎΡΡ Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ Π² JSON ΡΠ°ΠΉΠ»
- ΠΠΌΠΏΠΎΡΡ Π΄Π»Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π½Π° Π½ΠΎΠ²ΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅
ΠΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT. Π‘ΠΌ. ΡΠ°ΠΉΠ» LICENSE Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ.
β ΠΠΎΡΡΠ°Π²ΡΡΠ΅ Π·Π²Π΅Π·Π΄Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π±ΡΠ» ΠΏΠΎΠ»Π΅Π·Π΅Π½!

