Fix iOS/macOS audio playback crashes with enhanced URL validation #1361
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
This PR addresses runtime crashes (
FlutterError PlatformException(DarwinAudioError, Failed to set source. AVPlayerItem.Status.failed)) when attempting to play audio URLs on iOS/macOS using the audioplayers library.Problem
The current implementation allows users to add audio URLs that cause AVPlayer to fail on Darwin platforms due to:
These issues result in cryptic runtime errors that provide no guidance to users.
Solution
This PR implements comprehensive URL validation before audio sources are added, with user-friendly error messages and documentation links:
Validation Features
File Extension Validation: Ensures URLs have proper file extensions on iOS/macOS
Format Compatibility: Warns about unsupported formats on iOS
Security Protocol Validation: Warns about HTTP URLs on iOS/macOS
Implementation Details
hasFileExtension(),isOgg(), andisHttpOnIOS()for clean validation logicadd()method with platform-specific checks that run before attempting audio playbackTesting
Added comprehensive unit tests covering all validation scenarios and edge cases.
Impact
This change should significantly reduce audio playback crashes on iOS/macOS while providing users with actionable feedback to resolve URL issues. The implementation is minimal and preserves all existing functionality for valid URLs.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.