All notable changes to the Frame Extraction Tool will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- BREAKING ENHANCEMENT: Delete button now removes frames from BOTH app AND Photos library
- Long-press delete removes frames from Photos library automatically
- Multi-select delete removes all selected frames from Photos library
- No more orphaned photos cluttering your library!
- Store photo asset identifiers when saving frames for proper deletion tracking
- Enhanced
saveImageToPhotos()method to return asset identifiers - Added
deleteFromPhotoLibrary()method with proper authorization handling - Improved delete methods to handle both app memory and photo library deletion
- Support for both regular photos and custom album deletion
- Added comprehensive error handling for photo library operations
- Seamless deletion experience - users don't need manual photo cleanup
- Automatic photo library permission requests for write access
- Maintains haptic feedback for all delete operations
- Graceful handling when photo assets are already deleted or unavailable
- Asynchronous photo library deletion prevents UI blocking
- Background deletion tasks for smooth bulk operations
- Proper async/await implementation with continuation-based error handling
- Long-press to delete: Long-press any extracted frame for instant deletion with confirmation
- Multi-select mode: Tap "Select" button to enter bulk selection mode
- Visual selection indicators: Blue checkmarks and overlays show selected frames
- Smart toolbar: Dynamic buttons that adapt based on selection state
- Enhanced FrameLibraryView with comprehensive selection state management
- Blue selection overlay with rounded corners for selected frames
- Checkmark circles in top-right corner of selected frames
- "Cancel" button appears during selection mode for easy exit
- "Delete" button only enabled when frames are selected
- Confirmation dialogs prevent accidental single-frame deletion
- Added
deleteExtractedFrame()method to VideoManager - Added
deleteExtractedFrames()for efficient bulk deletion - Added
clearAllExtractedFrames()method for future use - Enhanced FrameThumbnailView with selection state support
- Comprehensive state management with
Set<UUID>for efficient lookups
- Contextual haptic feedback for all delete operations
- Light feedback for single deletion
- Medium feedback for bulk deletion
- Heavy feedback for clear all operations
- Respects user's haptic feedback preference settings
- Fixed app icon configuration for CodeMagic CI/CD builds
- Changed
ASSETCATALOG_COMPILER_APPICON_NAMEfrom 'FrameExtractionTool' to 'AppIcon' - Updated AppIcon.appiconset with proper icon sizes for all iOS devices
- Added complete icon assets (20x20 to 1024x1024) for iPhone, iPad, and App Store
- Resolved CodeMagic build failures related to missing app icon assets
- Generated all required app icon sizes using automated tools
- Support for iPhone, iPad, and marketing icons
- Proper asset catalog structure for consistent builds across platforms
- Removed email notifications from CodeMagic builds to prevent delivery issues
- Simplified build artifact workflow for better reliability
- Updated bundle identifier for CodeMagic builds:
caspernyong.FrameExtractionTool.CMTest - Removed Slack integration from CI/CD workflows
- Comprehensive UI refresh using iOS SDK design patterns
- Updated all buttons to use
.borderedProminentstyle - Enhanced material design with proper system colors
- Improved accessibility and visual consistency
- Modern iOS 17+ design language throughout the app
- 16 video scaling options: From 0.25x to 4.0x zoom levels
- Custom video player without default Apple controls for professional look
- Enhanced timeline controls with better touch targets
- Improved video player overlay UI with floating controls
- Better gesture handling for seek operations
- Save to custom photo albums: Create and organize extracted frames
- Settings integration for custom album name configuration
- Album creation and management through Photos framework
- User preference persistence for album settings
- Unsaved changes detection: Warns users before leaving video player
- Smart detection of marked frames that haven't been extracted
- Confirmation dialog prevents accidental loss of work
- Seamless integration with navigation flow
- Enhanced SettingsView with custom album controls
- Haptic feedback toggle for user preference
- Album name configuration with validation
- App version display and developer information
- Initial SwiftUI-based iOS application
- Video selection from photo library using PhotosPicker
- Custom video player with AVKit integration
- Frame marking during video playback
- High-quality frame extraction using AVFoundation
- Photo library integration for saving extracted frames
- Video timeline with visual frame markers
- Extraction progress tracking with animated UI
- Frame library for viewing extracted images
- Full-screen image viewing with zoom and pan
- Onboarding tutorial for new users
- Comprehensive help system
- Modern Swift concurrency with async/await
- MainActor isolation for UI operations
- ObservableObject pattern for state management
- Photos framework integration
- Core Image processing pipeline
- Haptic feedback system
- Comprehensive README with screenshots
- GitHub Actions CI/CD pipeline
- Developer documentation
- Project roadmap and contribution guidelines
- Framework: SwiftUI for modern iOS development
- Video Processing: AVFoundation for high-quality frame extraction
- Photo Integration: Photos/PhotosUI for library access
- State Management: Combine with ObservableObject pattern
- Concurrency: Modern Swift async/await patterns
- GitHub Actions: Automated builds on push/PR with iOS 26 SDK support
- CodeMagic: Professional CI/CD with unsigned build artifacts
- Build Outputs: Unsigned IPA files for development and testing
- No Apple Developer Program membership: All builds are unsigned
- Open Source: Full source code available for learning and contribution
- Educational Focus: Designed for development learning and exploration
- Demonstrate modern iOS development practices
- Showcase SwiftUI and AVFoundation capabilities
- Provide practical video frame extraction utility
- Maintain clean, documented, and teachable codebase
- Repository: GitHub - FrameExtractionTool
- Issues: Report bugs or request features
- Developer: Built with ❤️ by Casper N.Y. Ong using SwiftUI and GitHub Copilot