Skip to content

SystemNotification is a Swift SDK that helps you mimic the native iOS system notification in SwiftUI.

License

Notifications You must be signed in to change notification settings

danielsaidi/SystemNotification

Repository files navigation

SystemNotification Logo

Version Swift 6.0 Swift UI MIT License Twitter: @danielsaidi Mastodon: @danielsaidi@mastodon.social

About SystemNotification

SystemNotification is a SwiftUI SDK that lets you mimic the native iOS system notification that are presented when you toggle silent mode, connect your AirPods, etc.

System notifications can be styled and customized. You can use a native-looking SystemNotificationMessage view as the content view, or any custom view.

Installation

SystemNotification can be installed with the Swift Package Manager:

https://github.com/danielsaidi/SystemNotification.git

Getting started

With SystemNotification, you can add a system notification to any view just as you add a sheet, alert and fullScreenModal, by applying a systemNotification view modifier (preferably to the application root view).

State-based notifications take a boolean state binding and a view builder:

import SystemNotification

struct MyView: View {

    @State
    var isActive = false

    var body: some View {
        VStack {
            Button("Show notification") {
                isActive = true
            }
        }
        .systemNotification(isActive: $isActive) {
            Text("You can use any custom content view")
                .padding()
        }
    }
}

Context-based notifications just take a SystemNotificationContext instance and can then show many different notifications with a single modifier:

import SystemNotification

struct MyView: View {

    @StateObject
    var notification = SystemNotificationContext()

    var body: some View {
        VStack {
            Button("Show text") {
                notification.present {
                    Text("Context-based notifications are more flexible.")
                        .padding()
                        .multilineTextAlignment(.center)
                }
            }
            Button("Show message") {
                notification.present {
                    SystemNotificationMessage(
                        icon: Text("👍"),
                        title: "Great job!",
                        text: "You presented a native-looking message!"
                    )
                }
            }
        }
        .systemNotification(notification)
    }
}

The SystemNotificationMessage view lets you easily mimic a native notification view, with an icon, title and text, but you can use any custom view as the notification body.

See the online getting started guide for more information.

Documentation

The online documentation has more information, articles, code examples, etc.

Demo Application

The Demo folder has an app that lets you explore the library.

Support my work

You can sponsor me on GitHub Sponsors or reach out for paid support, to help support my open-source projects.

Your support makes it possible for me to put more work into these projects and make them the best they can be.

Contact

Feel free to reach out if you have questions or if you want to contribute in any way:

License

SystemNotification is available under the MIT license. See the LICENSE file for more info.