Skip to content

samsonjs/NotificationSmuggler

Repository files navigation

NotificationSmuggler

0 dependencies!

Overview

NotificationSmuggler is a tiny Swift package that makes it easy to embed strongly-typed values in Notifications, and extract them out on the receiving end as well. Nothing elaborate, it sneaks the contraband in the userInfo dictionary.

Declare a type conforming to Smuggled and then use the static method Notification.smuggle(_:object:) when posting the notification. On the receiving side of things you can use the extension methods NotificationCenter.notifications(for:) and NotificationCenter.publisher(for:) to observe the strongly-typed values without manually mapping them yourself.

If you have Sendable contraband then all of this will work nicely with Swift 6 and complete concurrency checking.

This package pairs nicely with AsyncMonitor for a complete notification handling system in the Swift 6 concurrency world.

Usage

Define a smuggled payload

struct SomeNotification: Smuggled, Sendable {
    let answer: Int
}

Your payload doesn't have to be Sendable but if it is then you have more flexibility.

The Smuggled protocol provides static notificationName and userInfoKey properties for you, should you need them. Generally you don't though.

Post a notification

NotificationCenter.default.post(.smuggle(SomeNotification(answer: 42)))

This automatically sets the .name, userInfo, and optionally .object for the notification.

Observe and extract contraband

Task {
    // This is fine because SomeNotification is Sendable
    for await notification in NotificationCenter.default.notifications(for: SomeNotification.self) {
        print(notification.answer)
    }
}

Installation

The only way to install this package is with Swift Package Manager (SPM). Please file a new issue or submit a pull-request if you want to use something else.

Supported Platforms

This package is supported on iOS 16.0+ and macOS 12.0+.

Xcode

When you're integrating this into an app with Xcode then go to your project's Package Dependencies and enter the URL https://github.com/samsonjs/NotificationSmuggler and then go through the usual flow for adding packages.

Swift Package Manager (SPM)

When you're integrating this using SPM on its own then add this to the list of dependencies your Package.swift file:

.package(url: "https://github.com/samsonjs/NotificationSmuggler.git", .upToNextMajor(from: "0.1.2"))

and then add "NotificationSmuggler" to the list of dependencies in your target as well.

License

Copyright © 2025 Sami Samhuri [email protected]. Released under the terms of the MIT License.

About

A tiny Swift package that makes it easy to embed strongly-typed values in notifications.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages