Skip to content

andyfinnell/AppStateKit

Repository files navigation

AppStateKit

A Elm-like framework for building SwiftUI based apps. Influenced by Pointfree Co's The Composable Architecture, Redux, and Elm.

It changes at my whim, and is almost always in a state of a rewrite as I explore new ideas. As a result, the most recent is main, not any tagged release.

Currently AppStateKit leverages Swift macros to build Elm-like Components and automatically compose them together. Components combine the reducer and the view together in one type, while keeping the reducer testable apart from the view.

Requirements

  • Swift 5.9 or greater
  • iOS/tvOS 17 or greater OR macOS 14 or greater

Installation

Currently, AppStateKit is only available as a Swift Package.

...using a Package.swift file

Open the Package.swift file and edit it:

  1. Add AppStateKit repo to the dependencies array.
  2. Add AppStateKit as a dependency of the target that will use it
// swift-tools-version:5.9

import PackageDescription

let package = Package(
  // ...snip...
  dependencies: [
    .package(url: "https://github.com/andyfinnell/AppStateKit.git", branch: "main")
  ],
  targets: [
    .target(name: "MyTarget", dependencies: ["AppStateKit"])
  ]
)

Then build to pull down the dependencies:

$ swift build

...using Xcode

Use the Swift Packages tab on the project to add AppStateKit:

  1. Open the Xcode workspace or project that you want to add AppStateKit to
  2. In the file browser, select the project to show the list of projects/targets on the right
  3. In the list of projects/targets on the right, select the project
  4. Select the "Swift Packages" tab
  5. Click on the "+" button to add a package
  6. In the "Choose Package Repository" sheet, search for "https://github.com/andyfinnell/AppStateKit.git"
  7. Click "Next"
  8. Choose the main branch rule
  9. Click "Next"
  10. Choose the target you want to add AppStateKit to
  11. Click "Finish"

About

Unidirectional dataflow app architecture framework for SwiftUI apps

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages