APGWorkKit is a Swift package providing iWork-style UI components for macOS and SwiftUI apps.
It bundles ready-to-use windows, panels, and utilities such as About boxes, Welcome screens, What's New dialogs, FAQ viewers, Settings panels, and promotional showcases.
Designed to give applications a polished, professional "Apple Work-style" look and feel.
📦 Repository: https://github.com/magesteve/APGWorkKit
🔖 Current version: 0.6.0
- APGWorkAbout — An iWork-style About window with app icon, version, copyright, and links to acknowledgments and licenses.
- APGWorkWhatsNew — A What's New window showing feature highlights with optional external links.
- APGWorkWelcome — A Welcome screen with subtitle, agreement link, and stacked images.
- APGWorkGetStarted — A Get Started panel with feature list and buttons for creating or opening documents.
- APGWorkFAQ — An FAQ viewer supporting collapsible question/answer sections and reference links.
- APGWorkPromos — A promotional window cycling through tiles with text, images, and links.
- APGWorkSettings — A multi-panel settings window with icon-based navigation and customizable control panels.
- APGWorkSoundCP / APGWorkDebugCP — Example control panels for sound and debug settings.
Most components are currently macOS-only using AppKit + SwiftUI, but remain cross-platform aware with
#if canImport(AppKit).
- Go to File → Add Packages…
- Enter the URL:
https://github.com/magesteve/APGWorkKit - Select Up to Next Major.
- Add
APGWorkKitto your targets.
dependencies: [
.package(url: "https://github.com/magesteve/APGWorkKit", from: "0.6.0")
],
targets: [
.target(
name: "YourApp",
dependencies: [
.product(name: "APGWorkKit", package: "APGWorkKit")
]
)
]APGWorkKit is based on an
APGWorkAbout.show()if APGWorkWhatsNew.canShow {
APGWorkWhatsNew.show()
}APGWorkWelcome.show()APGWorkGetStarted.show()APGWorkFAQ.show()APGWorkPromos.show()APGWorkSettings.show()Subclass APGWorkControlPanel to add your own panels:
public class MyControlPanel: APGWorkControlPanel {
public static func register() {
let cp = MyControlPanel(token: "com.example.mycp")
cp.registerControlPanel(name: "My Panel", shortName: "Panel", symbolName: "gear")
}
override public func makeControlPanelView() -> some View {
VStack {
Text("My Custom Panel")
}
}
}See APGExample for sample usage.
MIT License — see LICENSE
Created by Steve Sheets, 2025