A customizable circular progress indicator component for macOS apps built with Swift.
CircularProgress is a Swift package that provides a circular progress indicator UI component specifically designed for macOS applications. It offers a clean, native-looking progress visualization that integrates seamlessly with macOS apps, solving the need for a customizable and production-ready progress indicator that follows macOS design principles.
macOS developers building applications in Swift that require visual feedback for progress during tasks like file conversions, downloads, or processing operations. It is particularly useful for developers who need a component that works with Foundation's Progress class for automatic updates.
Developers choose CircularProgress because it provides extensive customization options while adhering to macOS design guidelines, ensuring visual consistency. It uniquely supports both manual progress setting and automatic updates via Progress, includes features like cancellable operations with visual feedback, indeterminate states, and completion indicators like an animated checkmark.
Circular progress indicator for your macOS app
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Integrates seamlessly with macOS apps by adhering to design principles, using system colors like .controlAccentColor for visual consistency, as shown in the customizable API.
Supports Foundation's Progress class for KVO-based automatic updates, reducing manual boilerplate code when handling cancellable or indeterminate tasks, per the README examples.
Includes cancellable operations with visual feedback, indeterminate spinners, and animated checkmarks at completion, covering common progress indicator needs in production apps like Gifski.
Allows adjustment of color, line width, label visibility, and cancel button behavior via properties like color and cancelledStateColorHandler, enabling tailored app designs.
Only supports macOS 10.15+, making it unsuitable for iOS, iPadOS, or cross-platform projects without significant additional development effort.
When using manual progress setting, developers must manually toggle indeterminate states, increasing complexity and potential for errors, as noted in the README for .isIndeterminate.
As an AppKit-based component, it doesn't natively integrate with SwiftUI, requiring wrappers like NSViewRepresentable for use in modern UI frameworks, which adds setup overhead.