Skip to content

sindresorhus/DockProgress

DockProgress

Show progress in your app's Dock icon

Requirements

macOS 12+

Install

Add https://github.com/sindresorhus/DockProgress in the “Swift Package Manager” tab in Xcode.

Latest version: 5.0.0

API

See the API docs.

Usage

Manually set the progress

import DockProgress

foo.onUpdate = { progress in
	DockProgress.progress = progress
}
import Foundation
import DockProgress

let progress = Progress(totalUnitCount: 1)
progress.becomeCurrent(withPendingUnitCount: 1)

DockProgress.progressInstance = progress

The given Progress instance is weakly stored. It's up to you to retain it.

Styles

Includes built-in styles (bar, squircle, circle, badge, pie) plus support for custom styles using SwiftUI views or Canvas drawing.

See the example app in the Xcode project for demonstrations.

Custom Styles

Create custom progress indicators with:

  1. SwiftUI View: .customView { progress in /* return any View */ } - Maximum flexibility with any SwiftUI view
  2. SwiftUI Canvas: .customCanvas { context, size, progress in /* draw on canvas */ } - High-performance custom drawing
  3. Legacy Core Graphics: .custom(drawHandler: (_ rect: CGRect) -> Void) - Direct Core Graphics drawing (backward compatibility)

Bar

import DockProgress

DockProgress.style = .bar

This is the default.

Squircle

import DockProgress

DockProgress.style = .squircle(color: .white.opacity(0.5))

Fits perfectly around macOS app icons by default. Use the inset parameter for adjustments if needed.

Circle

import DockProgress

DockProgress.style = .circle(radius: 55, color: .blue)

Badge

import DockProgress

DockProgress.style = .badge(color: .blue, badgeValue: { getDownloadCount() })

Large numbers are shortened: 10121k, 100009k+.

Note: badgeValue is for counts (downloads, files, etc.), not percentages.

Pie

import DockProgress

DockProgress.style = .pie(color: .blue)

Related