add files
This commit is contained in:
parent
30fe5fd5e1
commit
d829c62c64
40 changed files with 2869 additions and 0 deletions
223
DEVELOPER_MANUAL.md
Normal file
223
DEVELOPER_MANUAL.md
Normal file
|
|
@ -0,0 +1,223 @@
|
|||
# MeteorShowers App Developer Manual
|
||||
|
||||
## Table of Contents
|
||||
1. [Architecture Overview](#architecture-overview)
|
||||
2. [Core Components](#core-components)
|
||||
3. [Dependencies](#dependencies)
|
||||
4. [File Structure](#file-structure)
|
||||
5. [Key Features](#key-features)
|
||||
6. [Notifications System](#notifications-system)
|
||||
7. [Location Services](#location-services)
|
||||
8. [UI Components](#ui-components)
|
||||
|
||||
## Architecture Overview
|
||||
|
||||
MeteorShowers is an iOS application built using UIKit that helps users track meteor showers and provides relevant astronomical data. The app follows a traditional MVC (Model-View-Controller) architecture pattern.
|
||||
|
||||
### Design Patterns Used
|
||||
- Singleton (LocationManager, RemindersManager)
|
||||
- Delegate Pattern (LocationManagerDelegate)
|
||||
- Observer Pattern (NotificationCenter for updates)
|
||||
|
||||
## Core Components
|
||||
|
||||
### Models
|
||||
1. **MeteorShower**
|
||||
- Properties: name, datePeak, ZHR (Zenithal Hourly Rate)
|
||||
- Used to represent individual meteor shower events
|
||||
|
||||
2. **LocationManager**
|
||||
- Singleton class managing device location
|
||||
- Handles location permissions and updates
|
||||
- Provides location data to TopView for calculations
|
||||
|
||||
3. **RemindersManager**
|
||||
- Manages local notifications for meteor shower reminders
|
||||
- Handles persistence of reminder settings
|
||||
- Methods:
|
||||
- `saveReminder(for:)`
|
||||
- `removeReminder(for:)`
|
||||
- `hasReminder(for:)`
|
||||
- `restoreAllReminders()`
|
||||
|
||||
4. **AstronomicalCalculations**
|
||||
- Contains moon phase calculation logic
|
||||
- Enum `MoonPhase` for different moon phases
|
||||
- Struct `MoonPhaseCalculation` for calculations
|
||||
|
||||
### ViewControllers
|
||||
|
||||
1. **MainViewController**
|
||||
- Root view controller
|
||||
- Displays list of meteor showers
|
||||
- Background color: .darkMidnight
|
||||
|
||||
2. **ShowerDetailViewController**
|
||||
- Shows detailed information about selected shower
|
||||
- Manages reminder functionality
|
||||
- Key UI elements:
|
||||
- Reminder bell icon
|
||||
- Peak date
|
||||
- ZHR information
|
||||
- Moon phase details
|
||||
|
||||
### Views
|
||||
|
||||
1. **TopView**
|
||||
- Custom view showing astronomical data
|
||||
- Dependencies:
|
||||
- LocationManager
|
||||
- MoonPhaseCalculation
|
||||
- SunRiseSetCalc
|
||||
- Features:
|
||||
- Sunrise/sunset times
|
||||
- Moon phase
|
||||
- Location-based calculations
|
||||
|
||||
2. **MeteorShowerTableViewCell**
|
||||
- Custom cell for meteor shower list
|
||||
- Background: .lightMidnight
|
||||
- Corner radius: 9pt
|
||||
|
||||
## Dependencies
|
||||
|
||||
### External Libraries
|
||||
1. **Alamofire**
|
||||
- Used for network requests
|
||||
- Installation: Swift Package Manager
|
||||
|
||||
2. **SnapKit**
|
||||
- Auto-layout DSL
|
||||
- Used for programmatic constraints
|
||||
|
||||
### Frameworks
|
||||
1. **UIKit**
|
||||
- Main UI framework
|
||||
2. **CoreLocation**
|
||||
- Location services
|
||||
3. **UserNotifications**
|
||||
- Local notifications for reminders
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
MeteorShowers/
|
||||
├── App/
|
||||
│ ├── SceneDelegate.swift
|
||||
│ ├── AppDelegate.swift
|
||||
│ └── Info.plist
|
||||
├── ViewControllers/
|
||||
│ ├── MainViewController.swift
|
||||
│ └── ShowerDetailViewController.swift
|
||||
├── Views/
|
||||
│ ├── TopView.swift
|
||||
│ └── MeteorShowerTableViewCell.swift
|
||||
├── Models/
|
||||
│ ├── MeteorShower.swift
|
||||
│ ├── LocationManager.swift
|
||||
│ └── AstronomicalCalculations.swift
|
||||
├── Managers/
|
||||
│ └── RemindersManager.swift
|
||||
└── Assets.xcassets/
|
||||
```
|
||||
|
||||
## Key Features
|
||||
|
||||
### Reminder System
|
||||
- Set reminders 3 days before meteor shower peaks
|
||||
- Persistent storage using UserDefaults
|
||||
- Local notifications using UNUserNotificationCenter
|
||||
- Visual feedback with bell icon
|
||||
|
||||
### Location Services
|
||||
- Uses CoreLocation for user position
|
||||
- Permission handling: "When In Use" authorization
|
||||
- Fallback to Moscow coordinates if location unavailable
|
||||
- Used for calculating:
|
||||
- Sunrise/sunset times
|
||||
- Moon phase visibility
|
||||
|
||||
### Astronomical Calculations
|
||||
1. **Sun Calculations**
|
||||
- Sunrise/sunset times based on location
|
||||
- Uses UTC time zone to avoid conversion issues
|
||||
|
||||
2. **Moon Phase**
|
||||
- Calculates current moon phase
|
||||
- Shows illumination percentage
|
||||
- Updates based on current date
|
||||
|
||||
## UI Components
|
||||
|
||||
### Color Scheme
|
||||
- `.darkMidnight`: Main background color
|
||||
- `.lightMidnight`: Secondary background color
|
||||
- `.lightMidnight1`: Navigation title color
|
||||
|
||||
### Typography
|
||||
- Navigation title: System font, large title
|
||||
- Labels: System font, 12pt, weight: thin
|
||||
- Time labels: System font, 12pt, weight: thin
|
||||
|
||||
### Layout
|
||||
- Corner radius: 12pt for main views
|
||||
- Standard padding: 16pt
|
||||
- Icon sizes: 24x24pt
|
||||
|
||||
## Notifications System
|
||||
|
||||
### Local Notifications
|
||||
- Scheduled 3 days before peak
|
||||
- Unique identifier format: "meteorShower-[name]"
|
||||
- Permission requested on first reminder set
|
||||
- Persisted across app restarts
|
||||
|
||||
### Permission Handling
|
||||
```swift
|
||||
NSUserNotificationUsageDescription: "We'll notify you 3 days before meteor shower peaks so you don't miss the show!"
|
||||
```
|
||||
|
||||
## Location Services
|
||||
|
||||
### Permission Handling
|
||||
```swift
|
||||
NSLocationWhenInUseUsageDescription: "We need your location to calculate accurate sunrise and sunset times for your area."
|
||||
```
|
||||
|
||||
### Location Updates
|
||||
- Accuracy level: Best
|
||||
- Updates when:
|
||||
1. App launches
|
||||
2. Returns from background
|
||||
3. Location permission granted
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Memory Management**
|
||||
- Use weak self in closures
|
||||
- Proper deinitialization of observers
|
||||
- Cleanup of notification requests
|
||||
|
||||
2. **Error Handling**
|
||||
- Location fallback mechanism
|
||||
- Graceful degradation of features
|
||||
- User feedback for failures
|
||||
|
||||
3. **Performance**
|
||||
- Reusable cells for list
|
||||
- Efficient astronomical calculations
|
||||
- Proper threading for UI updates
|
||||
|
||||
4. **Code Organization**
|
||||
- Clear separation of concerns
|
||||
- Protocol-oriented design
|
||||
- Extension-based organization
|
||||
|
||||
## Contributing
|
||||
|
||||
When contributing to this project:
|
||||
1. Follow the existing architecture patterns
|
||||
2. Maintain consistent code style
|
||||
3. Add appropriate documentation
|
||||
4. Test on multiple iOS versions
|
||||
5. Consider backward compatibility
|
||||
Loading…
Add table
Add a link
Reference in a new issue