|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to the Frame Extraction Tool will be documented in this file. |
| 4 | + |
| 5 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), |
| 6 | +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 7 | + |
| 8 | +## [1.5.1] - 2025-08-20 |
| 9 | + |
| 10 | +### 🗑️ Enhanced Delete Functionality |
| 11 | +- **BREAKING ENHANCEMENT**: Delete button now removes frames from BOTH app AND Photos library |
| 12 | +- Long-press delete removes frames from Photos library automatically |
| 13 | +- Multi-select delete removes all selected frames from Photos library |
| 14 | +- No more orphaned photos cluttering your library! |
| 15 | + |
| 16 | +### 🔧 Technical Improvements |
| 17 | +- Store photo asset identifiers when saving frames for proper deletion tracking |
| 18 | +- Enhanced `saveImageToPhotos()` method to return asset identifiers |
| 19 | +- Added `deleteFromPhotoLibrary()` method with proper authorization handling |
| 20 | +- Improved delete methods to handle both app memory and photo library deletion |
| 21 | +- Support for both regular photos and custom album deletion |
| 22 | +- Added comprehensive error handling for photo library operations |
| 23 | + |
| 24 | +### 📱 User Experience |
| 25 | +- Seamless deletion experience - users don't need manual photo cleanup |
| 26 | +- Automatic photo library permission requests for write access |
| 27 | +- Maintains haptic feedback for all delete operations |
| 28 | +- Graceful handling when photo assets are already deleted or unavailable |
| 29 | + |
| 30 | +### ⚡ Performance |
| 31 | +- Asynchronous photo library deletion prevents UI blocking |
| 32 | +- Background deletion tasks for smooth bulk operations |
| 33 | +- Proper async/await implementation with continuation-based error handling |
| 34 | + |
| 35 | +## [1.5.0] - 2025-08-19 |
| 36 | + |
| 37 | +### ✨ Major New Feature: Advanced Delete Controls |
| 38 | +- **Long-press to delete**: Long-press any extracted frame for instant deletion with confirmation |
| 39 | +- **Multi-select mode**: Tap "Select" button to enter bulk selection mode |
| 40 | +- **Visual selection indicators**: Blue checkmarks and overlays show selected frames |
| 41 | +- **Smart toolbar**: Dynamic buttons that adapt based on selection state |
| 42 | + |
| 43 | +### 🎨 UI/UX Enhancements |
| 44 | +- Enhanced FrameLibraryView with comprehensive selection state management |
| 45 | +- Blue selection overlay with rounded corners for selected frames |
| 46 | +- Checkmark circles in top-right corner of selected frames |
| 47 | +- "Cancel" button appears during selection mode for easy exit |
| 48 | +- "Delete" button only enabled when frames are selected |
| 49 | +- Confirmation dialogs prevent accidental single-frame deletion |
| 50 | + |
| 51 | +### 🔧 Technical Architecture |
| 52 | +- Added `deleteExtractedFrame()` method to VideoManager |
| 53 | +- Added `deleteExtractedFrames()` for efficient bulk deletion |
| 54 | +- Added `clearAllExtractedFrames()` method for future use |
| 55 | +- Enhanced FrameThumbnailView with selection state support |
| 56 | +- Comprehensive state management with `Set<UUID>` for efficient lookups |
| 57 | + |
| 58 | +### 🎯 Haptic Feedback |
| 59 | +- Contextual haptic feedback for all delete operations |
| 60 | +- Light feedback for single deletion |
| 61 | +- Medium feedback for bulk deletion |
| 62 | +- Heavy feedback for clear all operations |
| 63 | +- Respects user's haptic feedback preference settings |
| 64 | + |
| 65 | +## [1.4.2] - 2025-08-18 |
| 66 | + |
| 67 | +### 🛠️ Build System Improvements |
| 68 | +- Fixed app icon configuration for CodeMagic CI/CD builds |
| 69 | +- Changed `ASSETCATALOG_COMPILER_APPICON_NAME` from 'FrameExtractionTool' to 'AppIcon' |
| 70 | +- Updated AppIcon.appiconset with proper icon sizes for all iOS devices |
| 71 | +- Added complete icon assets (20x20 to 1024x1024) for iPhone, iPad, and App Store |
| 72 | +- Resolved CodeMagic build failures related to missing app icon assets |
| 73 | + |
| 74 | +### 📱 App Icon Support |
| 75 | +- Generated all required app icon sizes using automated tools |
| 76 | +- Support for iPhone, iPad, and marketing icons |
| 77 | +- Proper asset catalog structure for consistent builds across platforms |
| 78 | + |
| 79 | +## [1.4.1] - 2025-08-18 |
| 80 | + |
| 81 | +### 🔧 CI/CD Configuration |
| 82 | +- Removed email notifications from CodeMagic builds to prevent delivery issues |
| 83 | +- Simplified build artifact workflow for better reliability |
| 84 | +- Updated bundle identifier for CodeMagic builds: `caspernyong.FrameExtractionTool.CMTest` |
| 85 | +- Removed Slack integration from CI/CD workflows |
| 86 | + |
| 87 | +## [1.4.0] - 2025-08-14 |
| 88 | + |
| 89 | +### 🎨 iOS Design Language Update |
| 90 | +- Comprehensive UI refresh using iOS SDK design patterns |
| 91 | +- Updated all buttons to use `.borderedProminent` style |
| 92 | +- Enhanced material design with proper system colors |
| 93 | +- Improved accessibility and visual consistency |
| 94 | +- Modern iOS 17+ design language throughout the app |
| 95 | + |
| 96 | +### 🎯 Video Player Enhancements |
| 97 | +- **16 video scaling options**: From 0.25x to 4.0x zoom levels |
| 98 | +- Custom video player without default Apple controls for professional look |
| 99 | +- Enhanced timeline controls with better touch targets |
| 100 | +- Improved video player overlay UI with floating controls |
| 101 | +- Better gesture handling for seek operations |
| 102 | + |
| 103 | +### 🏠 Custom Album Feature |
| 104 | +- **Save to custom photo albums**: Create and organize extracted frames |
| 105 | +- Settings integration for custom album name configuration |
| 106 | +- Album creation and management through Photos framework |
| 107 | +- User preference persistence for album settings |
| 108 | + |
| 109 | +### ⚠️ Discard Changes Protection |
| 110 | +- **Unsaved changes detection**: Warns users before leaving video player |
| 111 | +- Smart detection of marked frames that haven't been extracted |
| 112 | +- Confirmation dialog prevents accidental loss of work |
| 113 | +- Seamless integration with navigation flow |
| 114 | + |
| 115 | +### 🎛️ Settings & Configuration |
| 116 | +- Enhanced SettingsView with custom album controls |
| 117 | +- Haptic feedback toggle for user preference |
| 118 | +- Album name configuration with validation |
| 119 | +- App version display and developer information |
| 120 | + |
| 121 | +## [1.3.0] - 2025-08-14 |
| 122 | + |
| 123 | +### 📱 Core App Foundation |
| 124 | +- Initial SwiftUI-based iOS application |
| 125 | +- Video selection from photo library using PhotosPicker |
| 126 | +- Custom video player with AVKit integration |
| 127 | +- Frame marking during video playback |
| 128 | +- High-quality frame extraction using AVFoundation |
| 129 | +- Photo library integration for saving extracted frames |
| 130 | + |
| 131 | +### 🎯 Key Features |
| 132 | +- Video timeline with visual frame markers |
| 133 | +- Extraction progress tracking with animated UI |
| 134 | +- Frame library for viewing extracted images |
| 135 | +- Full-screen image viewing with zoom and pan |
| 136 | +- Onboarding tutorial for new users |
| 137 | +- Comprehensive help system |
| 138 | + |
| 139 | +### 🛠️ Technical Foundation |
| 140 | +- Modern Swift concurrency with async/await |
| 141 | +- MainActor isolation for UI operations |
| 142 | +- ObservableObject pattern for state management |
| 143 | +- Photos framework integration |
| 144 | +- Core Image processing pipeline |
| 145 | +- Haptic feedback system |
| 146 | + |
| 147 | +### 📖 Documentation & Setup |
| 148 | +- Comprehensive README with screenshots |
| 149 | +- GitHub Actions CI/CD pipeline |
| 150 | +- Developer documentation |
| 151 | +- Project roadmap and contribution guidelines |
| 152 | + |
| 153 | +--- |
| 154 | + |
| 155 | +## Development Information |
| 156 | + |
| 157 | +### 🏗️ Architecture |
| 158 | +- **Framework**: SwiftUI for modern iOS development |
| 159 | +- **Video Processing**: AVFoundation for high-quality frame extraction |
| 160 | +- **Photo Integration**: Photos/PhotosUI for library access |
| 161 | +- **State Management**: Combine with ObservableObject pattern |
| 162 | +- **Concurrency**: Modern Swift async/await patterns |
| 163 | + |
| 164 | +### 🚀 CI/CD Platforms |
| 165 | +- **GitHub Actions**: Automated builds on push/PR with iOS 26 SDK support |
| 166 | +- **CodeMagic**: Professional CI/CD with unsigned build artifacts |
| 167 | +- **Build Outputs**: Unsigned IPA files for development and testing |
| 168 | + |
| 169 | +### 📄 Developer Account Status |
| 170 | +- **No Apple Developer Program membership**: All builds are unsigned |
| 171 | +- **Open Source**: Full source code available for learning and contribution |
| 172 | +- **Educational Focus**: Designed for development learning and exploration |
| 173 | + |
| 174 | +### 🎯 Project Goals |
| 175 | +- Demonstrate modern iOS development practices |
| 176 | +- Showcase SwiftUI and AVFoundation capabilities |
| 177 | +- Provide practical video frame extraction utility |
| 178 | +- Maintain clean, documented, and teachable codebase |
| 179 | + |
| 180 | +--- |
| 181 | + |
| 182 | +## Links |
| 183 | +- **Repository**: [GitHub - FrameExtractionTool](https://github.com/CasperOng/FrameExtractionTool) |
| 184 | +- **Issues**: [Report bugs or request features](https://github.com/CasperOng/FrameExtractionTool/issues) |
| 185 | +- **Developer**: Built with ❤️ by Casper N.Y. Ong using SwiftUI and GitHub Copilot |
0 commit comments