Swiftpack.co - sebjvidal/SettingsKit as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by sebjvidal.
sebjvidal/SettingsKit v1.0.3
A light-weight, extensible package for building pixel-perfect iOS settings screens.
⭐️ 72
🕓 2 weeks ago
.package(url: "https://github.com/sebjvidal/SettingsKit.git", from: "v1.0.3")


Swift Package Manager iOS Twitter: @sebjvidal


A light-weight, extensible package for easily building pixel-perfect iOS settings screens in a pinch.


SettingsKit can be installed using Swift Package Manager. To get started...

  1. Open your project in Xcode and navigate to File, Add Packages...
  2. Search for https://github.com/sebjvidal/SettingsKit.git in the "Search or Enter Package URL" toolbar item
  3. Choose SettingsKit
  4. Click Add Package


In the following example, you'll learn how to build a settings screen with a single "General" group that has four child settings.

To begin, create an Array with a single SettingsKitSection object, parsing an Array of SettingsKitSetting to its setting initialiser.

import SettingsKit

let generalSections: [SettingsKitSection] = [
        settings: [
            SettingsKitLabel(title: "A Label Cell", value: .userDefaults(key: "label")),
            SettingsKitToggle(title: "A Toggle Cell", value: .userDefaults(key: "toggle")),
            SettingsKitTextField(title: "A TextField Cell", value: .userDefaults(key: "textField")),
            SettingsKitStepper(title: "A Stepper Cell", value: .userDefaults(key: "stepper"), min: 0, max: 10)

Each object conforming to the SettingsKitSetting protocol has a value property. This is an Enum case that can be a raw value, for example, .string("String"). Alternatively, this can be a UserDefaults key, for examlpe, .userDefaults(key: "Key").

Next, we'll build the SettingsKitGroup and, subsequently the SettingsKitGroup.Icon. Start by creating the SettingsKitGroup.Icon and populating its symbol, config and colour initialisers with a UIImage, UIImage.SymbolConfiguration and UIColor, respectively.

let generalIcon = SettingsKitGroup.Icon(
    symbol: UIImage(systemName: "gear"),
    config: UIImage.SymbolConfiguration(pointSize: 21),
    colour: UIColor.systemGray

Now, define a second Array of SettingsKitSection, passing an Array of SettingsKitSetting to its settings parameter. Populate the SettingsKitSetting Array with a single SettingsKitGroup object. Set the icon parameter to the generalIcon created above. Set the title parameter to "General". And set the children parameter to the generalSections array.

let rootSections: [SettingsKitSection] = [
        settings: [
            SettingsKitGroup(icon: generalIcon, title: "General", children: generalSections)

Finally, create the SettingsKitViewController, populating the sections parameter with the previously defined rootSections Array.

let viewController = SettingsKitViewController(sections: rootSections)

Additionally, the root SettingsKitViewController navigation elements can be customised as follows.

viewController.title = "SettingsKit"
viewController.navigationItem.largeTitleDisplayMode = .automatic
viewController.navigationController?.navigationBar.prefersLargeTitles = true

This is what your finished product should look like...



SettingsKit is built with UIKit, so you can customise the SettingsKitViewController as you would a UITableViewController.

Be careful when overriding the SettingsKitViewController tableView's delegate methods, as the following methods are used internally to make the package functional:

  • numberOfSections(in:)
  • tableView(_:titleForHeaderInSection:)
  • tableView(_:titleForFooterInSection:)
  • tableView(_:numberOfRowsInSection:)
  • tableView(_:cellForRowAt:)
  • tableView(_:heightForRowAt)
  • tableView(_:shouldHighlightRowAt:)
  • tableView(_:didSelectRowAt:)


Stars: 72
Last commit: 3 weeks ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

SettingsKit 1.0.3
3 weeks ago

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics