Skip to content

Dean151/RuleKit

Repository files navigation

RuleKit

A TipKit-style API to trigger an arbitrary closure, or an NSNotification, based on events and conditions.

You donate events from meaningful places in your app, describe the rules that must hold, and RuleKit fires your trigger the moment they do.

Usecases

  • Open your paywall from time to time
  • Prompt your user to leave an App Store review
  • Watch for and send achievements to Game Center with GameKit
  • Surface a shortcut for an action the user performs often
  • ...

Requirements

  • Swift 6.0+ (Xcode 16+)
  • iOS 14+, iPadOS 14+, tvOS 14+, watchOS 7+, macOS 11+
  • Linux, Android

Installation

Install using Swift Package Manager:

dependencies: [
    .package(url: "https://github.com/Dean151/RuleKit.git", from: "0.5.0"),
],
targets: [
    .target(name: "MyTarget", dependencies: [
        .product(name: "RuleKit", package: "RuleKit"),
    ]),
]

Quick start

import RuleKit

// 1. Configure once, at launch.
try RuleKit.configure(storeLocation: .applicationDefault)

// 2. Declare your events.
extension RuleKit.Event {
    static let appStarted: Self = "appStarted"
    static let entityCreated: Self = "entityCreated"
}

// 3. Register a rule and what it triggers.
RuleKit.setRule("askForReview", triggering: { requestReview() }, options: .triggerFrequency(.monthly)) {
    .event(.appStarted, atLeast: 3) && .event(.entityCreated, atLeast: 5)
}

// 4. Donate events where they happen.
RuleKit.Event.appStarted.sendDonation()
await RuleKit.Event.entityCreated.donate()

As soon as an event is donated, RuleKit re-evaluates every rule and fires the triggers whose rules now pass.

Rules can trigger a closure (above) or post a Notification — handy when the side effect belongs to your UI layer. They compose with .allOf / .anyOf / .noneOf / .atLeast / .not (and the &&, ||, ! operators), and conditions can read each event's donation history (count, dates, app version, recency, cooldowns).

Documentation

The full guide lives in the DocC documentation, hosted on the Swift Package Index:

  • Getting Started — configuring the store, declaring events, registering closure- and notification-based rules, donating and resetting events, managing rules, and the available options (triggerFrequency, dispatchQueue, delay).
  • Composing Rules — the full rule vocabulary: event conditions and shorthands, combinators, operators, constants, and the donation properties available inside a condition.

You can also browse it locally in Xcode via Product ▸ Build Documentation.

Contribute

You are encouraged to contribute to this repository by opening issues or pull requests for bug fixes, improvement requests, or support. Suggestions for contributing:

  • Improving documentation
  • Adding more tests
  • Adding new rules, options, or properties for more use cases

About

TipKit style API to call a closure, or trigger a NSNotification based on events and condition.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Contributors

Languages