Skip to content

About

A comprehensive iOS application for scoring boxing matches with real-time round tracking, fighter management, and detailed fight statistics.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

160 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Boxing Scorecard App

A comprehensive iOS and watchOS application for professional boxing match scoring with real-time round tracking, fighter management, detailed fight statistics, and seamless cross-device synchronization.

🥊 Features

Core Scoring Features

  • Real-time Round Scoring: Professional 10-point must system with knockdown and point deduction tracking
  • Fighter Management: Complete boxer profiles with fight records and corner color customization
  • Fight History: Comprehensive fight tracking with detailed statistics and round-by-round breakdowns
  • Early Fight End: Handle technical decisions, knockouts, retirements, and injury stoppages
  • Official Results: Generate official fight results with unanimous, majority, and split decisions
  • Scorecard Sharing: Export and share professional scorecard images with custom messages

Apple Watch Integration

  • Dedicated Watch App: Full scoring functionality on Apple Watch
  • Real-time Sync: Seamless data synchronization between iPhone and Apple Watch
  • Watch Connectivity: Score rounds on watch, view on phone instantly
  • Haptic Feedback: Comprehensive haptic feedback for all interactions
  • Complications: Quick access to current fight status

Data & Synchronization

  • CloudKit Integration: Automatic iCloud sync across all devices
  • Core Data: Robust local data persistence with CloudKit backup
  • Offline Support: Full functionality without internet connection
  • Conflict Resolution: Automatic handling of data conflicts
  • Real-time Updates: Instant synchronization when online

Accessibility & Usability

  • VoiceOver Support: Complete accessibility for visually impaired users
  • Dynamic Type: Full support for iOS text scaling
  • High Contrast: Optimized for high contrast mode
  • Haptic Feedback: Comprehensive tactile feedback throughout the app
  • Motor Accessibility: Large touch targets and gesture alternatives

Professional Features

  • Weight Divisions: All 17 official boxing weight classes with limits
  • Penalty Tracking: Knockdown and point deduction history
  • Fight Statistics: Comprehensive round-by-round and fight statistics
  • Professional UI: Clean, intuitive interface designed for officials
  • Splash Screen: Professional app launch experience

Screenshots

Screenshots will be added here

📱 Requirements

System Requirements

  • iOS: 15.0 or later
  • watchOS: 8.0 or later (for Apple Watch app)
  • Xcode: 14.0 or later
  • Swift: 5.7 or later

Device Compatibility

  • iPhone: All devices running iOS 15.0+
  • Apple Watch: Series 4 and later (watchOS 8.0+)
  • iPad: Full iPad support with optimized interface

CloudKit Requirements

  • iCloud Account: Required for data synchronization
  • Internet Connection: For initial setup and data sync
  • Storage: Minimal local storage, data synced to iCloud

Installation

  1. Clone the repository:

    git clone https://github.com/yourusername/BoxingScorecardApp.git
  2. Open the project in Xcode:

    cd BoxingScorecardApp
    open BoxingScorecard.xcodeproj
  3. Build and run the project on your device or simulator.

🚀 Usage

Starting a New Fight

  1. iPhone: Tap "New Fight" on the main screen
  2. Apple Watch: Use the watch app to start scoring (syncs with iPhone)
  3. Enter fighter names and select corner colors
  4. Set fight parameters (rounds, weight class, division)
  5. Begin scoring with the 10-point must system

Scoring Rounds

  • 10-Point Must System: Standard boxing scoring system
  • Round Navigation: Navigate between rounds using the round selector
  • Score Adjustment: Increase/decrease scores for each fighter
  • Penalty Tracking: Record knockdowns and point deductions
  • Round Notes: Add notes for each round if needed
  • Round Completion: Mark rounds as complete to advance

Apple Watch Scoring

  • Dedicated Interface: Full scoring functionality on your wrist
  • Real-time Sync: Scores appear instantly on iPhone
  • Haptic Feedback: Tactile feedback for all interactions
  • Quick Access: Start scoring without reaching for your phone
  • Complications: View current fight status from watch face

Ending a Fight

  • Complete All Rounds: For unanimous, majority, or split decisions
  • Early End Options: Handle knockouts, TKOs, retirements, injuries
  • Official Results: Generate professional fight results
  • Statistics: View comprehensive fight statistics

Sharing Scorecards

  • Professional Images: Generate branded scorecard images
  • Multiple Platforms: Share via Messages, Mail, social media
  • Custom Messages: Automatically generated fight summaries
  • High Quality: 400x600 pixel JPEG images optimized for sharing

📁 Project Structure

BoxingScorecardApp/
├── BoxingScorecard/                          # Main iOS app source code
│   ├── BoxingScorecardApp.swift              # App entry point and initialization
│   ├── ContentView.swift                     # Main app view and navigation
│   ├── DataModels.swift                      # Core data models and enums
│   ├── CoreDataManager.swift                 # Core Data and CloudKit management
│   ├── PhoneWatchConnectivity.swift          # Apple Watch connectivity
│   ├── AppConfiguration.swift                # App configuration management
│   ├── TestDataManager.swift                 # Test data loading utilities
│   ├── AllFightsView.swift                   # Fight history and management
│   ├── BoxerSetupView.swift                  # Fighter setup and configuration
│   ├── ScorecardView.swift                   # Main scoring interface
│   ├── ResultsView.swift                     # Fight results and statistics
│   ├── Assets.xcassets/                      # App icons, images, and colors
│   ├── BoxingScorecard.entitlements          # App capabilities and permissions
│   ├── BoxingScorecard.xcdatamodeld/         # Core Data model definitions
│   ├── Info.plist                           # App configuration and metadata
│   └── Views/                               # UI Components and subviews
│       ├── FightHeaderView.swift            # Fight information header
│       ├── RoundScoringView.swift           # Round scoring interface
│       ├── RoundNavigationView.swift        # Round navigation controls
│       ├── EarlyFightEndView.swift          # Early fight ending interface
│       ├── EndFightEarlyButton.swift        # Early fight end button
│       ├── OfficialResultView.swift         # Official fight results
│       ├── ScorecardImageView.swift         # Scorecard image generation
│       ├── ScorecardSharingService.swift    # Sharing functionality
│       └── SplashView.swift                 # App launch screen
├── BoxingScorecardWatch Watch App/          # Apple Watch app source code
│   ├── BoxingScorecardWatchApp.swift        # Watch app entry point
│   ├── ContentView.swift                    # Watch app main interface
│   ├── DataModels.swift                     # Watch-specific data models
│   ├── WatchDataManager.swift               # Watch data management
│   ├── ComplicationController.swift         # Watch complications
│   └── Assets.xcassets/                     # Watch app assets
├── BoxingScorecardTests/                    # Unit tests
│   ├── BoxingScorecardTests.swift           # Main test suite
│   ├── CoreDataManagerTests.swift           # Core Data testing
│   ├── ScoringLogicTests.swift              # Scoring logic validation
│   ├── TestConfiguration.swift              # Test configuration
│   ├── TestPlan.md                          # Comprehensive test plan
│   └── README.md                            # Testing documentation
├── BoxingScorecardUITests/                  # UI tests
│   ├── BoxingScorecardUITests.swift         # UI automation tests
│   └── BoxingScorecardUITestsLaunchTests.swift # Launch performance tests
├── BoxingScorecardWatch Watch AppTests/     # Watch app unit tests
│   └── BoxingScorecardWatch_Watch_AppTests.swift
├── BoxingScorecardWatch Watch AppUITests/   # Watch app UI tests
│   ├── BoxingScorecardWatch_Watch_AppUITests.swift
│   └── BoxingScorecardWatch_Watch_AppUITestsLaunchTests.swift
├── Documentation/                           # Project documentation
│   ├── Add_Capabilities_Guide.md            # Adding app capabilities
│   ├── Apple_Watch_Setup_Guide.md           # Apple Watch setup
│   ├── Apple_Watch_Accessibility_Guide.md   # Watch accessibility
│   ├── CloudKit_Fix_Guide.md                # CloudKit troubleshooting
│   ├── CloudKit_Implementation_Guide.md     # CloudKit implementation
│   ├── CloudKit_Status_3_Fix_Guide.md       # CloudKit status fixes
│   ├── CoreData_CloudKit_Implementation_Guide.md # Core Data + CloudKit
│   ├── Final_Implementation_Summary.md      # Implementation summary
│   ├── IMPLEMENTATION_SUMMARY.md            # Technical summary
│   ├── iOS_Accessibility_Implementation_Guide.md # iOS accessibility
│   ├── iOS_Accessibility_Testing_Checklist.md # Accessibility testing
│   ├── Scorecard_Sharing_Feature_Guide.md   # Sharing feature guide
│   ├── Test_Data_Configuration_Guide.md     # Test data configuration
│   ├── Privacy_Policy.md                    # Privacy policy
│   └── Terms_of_Service.md                  # Terms of service
├── App Store Images/                        # App Store assets
│   ├── Actual App Store/                    # Production App Store images
│   └── Simulator Screenshots/               # Development screenshots
├── BoxingScorecard.xcodeproj/               # Xcode project configuration
├── run_tests.sh                             # Test automation script
├── toggle_test_data.sh                      # Test data toggle script
├── buildServer.json                         # Build server configuration
├── LICENSE                                  # MIT License
└── README.md                                # This file

🗄️ Data Models

Core Data Entities

The app uses Core Data with CloudKit synchronization for robust data management:

  • CDFight: Main fight entity with CloudKit sync

    • Fighter information and corner colors
    • Fight metadata (date, division, rounds)
    • Early fight end details
    • Official results and winner determination
    • Interruption tracking for app crashes
  • CDRound: Individual round scoring with CloudKit sync

    • Round-by-round scores for both fighters
    • Knockdown and point deduction tracking
    • Penalty history with timestamps
    • Round completion status
    • Round notes and observations

SwiftUI Models

  • Fight: Main fight model with comprehensive statistics
  • Boxer: Fighter profiles with corner color customization
  • Round: Round scoring with penalty tracking
  • Division: All 17 official boxing weight classes
  • EarlyFightEnd: Early fight ending types and details

☁️ CloudKit Integration

Automatic Synchronization

  • Real-time Sync: Changes sync instantly across all devices
  • Offline Support: Full functionality without internet connection
  • Conflict Resolution: Automatic handling of simultaneous edits
  • Background Sync: Data syncs in background when app is not active

Data Flow

  1. Local Storage: Core Data stores data locally for immediate access
  2. Cloud Upload: Changes automatically upload to iCloud via CloudKit
  3. Device Sync: Other devices receive updates and sync local data
  4. Conflict Handling: CloudKit resolves conflicts using timestamps

Error Handling

  • Graceful Degradation: App continues working if CloudKit unavailable
  • Status Indicators: Clear feedback about sync status
  • Retry Logic: Automatic retry for failed sync operations
  • User Notifications: Inform users of sync issues when necessary

🧪 Testing

The project includes comprehensive testing across all platforms and components:

Unit Tests (BoxingScorecardTests/)

  • Core Data Operations: Database operations, data persistence, and CloudKit sync
  • Scoring Logic: 10-point must system validation and edge cases
  • Data Model Integrity: Model conversion, validation, and consistency
  • Fight Management: Fight creation, updates, and completion logic
  • Round Scoring: Round-by-round scoring and penalty tracking
  • Early Fight End: Knockout, TKO, retirement, and injury handling

UI Tests (BoxingScorecardUITests/)

  • User Workflow Automation: Complete fight flow from setup to results
  • Interface Testing: Button interactions, form validation, navigation
  • Accessibility Testing: VoiceOver compatibility and dynamic type support
  • Performance Testing: Launch times and memory usage
  • Cross-Device Testing: iPhone and iPad interface validation

Apple Watch Tests

  • Watch App Unit Tests: Watch-specific functionality and data management
  • Watch UI Tests: Watch interface automation and user interactions
  • Connectivity Tests: Phone-Watch communication and data sync
  • Haptic Feedback Tests: Tactile feedback validation

Test Automation

# Run all tests (unit + UI + watch)
./run_tests.sh

# Run specific test suites
./run_tests.sh --unit-only
./run_tests.sh --ui-only
./run_tests.sh --watch-only

# Run tests in Xcode
# Product → Test (⌘+U)

Test Configuration

  • Test Data Management: Configurable test data loading for screenshots/demos
  • Environment Variables: Control test behavior via environment settings
  • Mock Data: Comprehensive test data for all scenarios
  • Performance Benchmarks: Automated performance testing and monitoring

♿ Accessibility

The Boxing Scorecard app provides comprehensive accessibility support for all users:

VoiceOver Support

  • Complete Navigation: All UI elements have proper accessibility labels and hints
  • Descriptive Labels: Context-aware labels that include boxer names and corner colors
  • Score Announcements: Clear score announcements with fighter identification
  • Navigation Hints: Helpful instructions for navigating between rounds and sections
  • Status Updates: Real-time announcements of fight progress and changes

Visual Accessibility

  • Dynamic Type: Full support for iOS text scaling up to accessibility sizes
  • High Contrast: Optimized display for high contrast mode
  • Color Independence: Information not conveyed through color alone
  • Clear Typography: Appropriate font sizes and weights for readability
  • Visual Hierarchy: Proper use of headers and semantic structure

Motor Accessibility

  • Large Touch Targets: All buttons meet minimum 44pt touch target requirements
  • Haptic Feedback: Comprehensive haptic feedback for all interactions
  • Gesture Alternatives: All functionality accessible via tap gestures
  • Button States: Clear disabled/enabled states with accessibility traits
  • Apple Watch Support: Full accessibility on Apple Watch with haptic feedback

Cognitive Accessibility

  • Clear Language: Simple, consistent terminology throughout the app
  • Logical Flow: Intuitive navigation and information hierarchy
  • Error Prevention: Clear validation and helpful error messages
  • Consistent Patterns: Uniform interaction patterns across all screens
  • Helpful Hints: Contextual hints for complex actions

Compliance Standards

  • WCAG 2.1 AA Guidelines: Full compliance with web accessibility standards
  • Apple Human Interface Guidelines: Follows Apple's accessibility best practices
  • Section 508 Compliance: Meets federal accessibility requirements
  • iOS Accessibility Standards: Exceeds iOS accessibility requirements

🛠️ Development

Build Requirements

  • Xcode: 14.0 or later
  • iOS Deployment Target: 15.0+
  • watchOS Deployment Target: 8.0+
  • Swift: 5.7+
  • CloudKit: Capabilities enabled for data sync

Key Dependencies

  • SwiftUI: Modern declarative UI framework
  • Core Data: Local data persistence and management
  • CloudKit: iCloud synchronization and backup
  • Combine: Reactive programming and data flow
  • WatchConnectivity: Apple Watch communication
  • UIKit: Image generation and sharing functionality

Development Setup

# Clone the repository
git clone https://github.com/yourusername/BoxingScorecardApp.git
cd BoxingScorecardApp

# Open in Xcode
open BoxingScorecard.xcodeproj

# Configure test data (optional)
export LOAD_TEST_FIGHTS=true
export CLEAR_EXISTING_FIGHTS=false

🤝 Contributing

We welcome contributions to the Boxing Scorecard App! Here's how you can help:

Getting Started

  1. Fork the repository on GitHub
  2. Clone your fork locally
  3. Create a feature branch (git checkout -b feature/amazing-feature)
  4. Make your changes following our coding standards
  5. Add tests for any new functionality
  6. Run the test suite to ensure everything works
  7. Commit your changes (git commit -m 'Add some amazing feature')
  8. Push to your branch (git push origin feature/amazing-feature)
  9. Open a Pull Request with a clear description

Development Guidelines

  • Code Style: Follow Swift style guidelines and use SwiftLint
  • Testing: Add unit tests for new functionality
  • Accessibility: Ensure all new UI elements are accessible
  • Documentation: Update documentation for new features
  • CloudKit: Test CloudKit sync functionality thoroughly

Areas for Contribution

  • New Features: Additional scoring options, statistics, or UI improvements
  • Accessibility: Enhanced accessibility features and testing
  • Performance: Optimizations for speed and memory usage
  • Testing: Additional test coverage and edge cases
  • Documentation: Improved guides and examples
  • Localization: Support for additional languages

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🔒 Privacy Policy

This app respects your privacy and follows Apple's privacy guidelines. See Privacy_Policy.md for complete details about data collection, usage, and protection.

📋 Terms of Service

Please read our Terms_of_Service.md before using the app. By using the Boxing Scorecard App, you agree to these terms.

🆘 Support

Getting Help

  • GitHub Issues: Open an issue for bugs or feature requests
  • Documentation: Check the comprehensive guides in the Documentation/ folder
  • Testing: Run the test suite to verify functionality
  • Accessibility: See accessibility guides for inclusive design

Common Issues

  • CloudKit Sync: Check iCloud account and internet connection
  • Apple Watch: Ensure Watch app is installed and paired
  • Data Loss: Data is backed up to iCloud automatically
  • Performance: Close other apps if experiencing slowdowns

🙏 Acknowledgments

Technology Stack

  • SwiftUI: Modern declarative UI framework
  • Core Data: Robust data persistence and management
  • CloudKit: Seamless iCloud synchronization
  • WatchConnectivity: Apple Watch integration
  • Combine: Reactive programming patterns

Design Philosophy

  • Professional: Designed for boxing officials and enthusiasts
  • Accessible: Inclusive design for all users
  • Reliable: Robust data handling and error recovery
  • Modern: Latest iOS and watchOS features and best practices

Community

  • Built with the boxing community in mind
  • Open source for transparency and collaboration
  • Comprehensive testing for reliability
  • Extensive documentation for maintainability

Boxing Scorecard App - Professional boxing match scoring made simple, accessible, and reliable across all your Apple devices.

About

A comprehensive iOS application for scoring boxing matches with real-time round tracking, fighter management, and detailed fight statistics.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages