Swift Package · iOS · macOS · watchOS · tvOS · visionOS

Every SF Symbol,
typed.

Apple ships SF Symbols — over 7,000 icons built into every device they make. They ship one way to use them: as strings you type by hand. SFSymbolsKit gives you the typed Swift API Apple forgot.

Get started Read the docs →
7,007
Symbols
3
APIs
6
Platforms
0
Dependencies

Apple ships the icons.
We ship the types.

Apple's UIImage(systemName:) and SwiftUI's Image(systemName:) take a string. No autocomplete. No compiler check. No runtime warning if you typo a symbol name — the icon just silently doesn't render. That's fine in a hello-world demo. It's a quiet bug in a shipped app. SFSymbolsKit replaces every string with a typed property and erases a whole class of UI bugs at compile time.

×

Without it

UIImage(systemName: "plus.app") — a hand-typed string with no spell-check. Apple renames a symbol? Silent failure. Hands it off to QA? Maybe they notice.

With it

UIImage.SFSymbols.plusApp — autocompleted in Xcode, refactor-safe, and physically unable to compile if Apple drops the symbol. The bug becomes impossible.

Forever current

When Apple ships new symbols in the next OS release, regeneration is one command. Day-one autocomplete for every new name.

Three APIs.
One package.

Reach for the right type at the right layer. Pass a typed String to any existing Apple function that takes systemName. Get a UIImage directly. Or an NSImage with accessibility wired up. All of them autocomplete. None of them break under rename.

S

String

A typed Swift property for every symbol Apple ships. Drop it into any API that expects a systemName string — nothing else about your code has to change.

U

UIImage

Skip the systemName: detour. Get a fully-configured UIImage for iOS, iPadOS, tvOS, watchOS, and visionOS.

N

NSImage

AppKit gets the same ergonomics, with accessibility descriptions auto-generated from the symbol name.

Code that won't
lie to you.

Every symbol is just a property — discoverable, refactor-safe, and indistinguishable from the rest of your code. Read the API docs.

// Apple's API: stringly-typed, fails silently in production
Image(systemName: "plus.app")

// SFSymbolsKit: typed, autocompleted, compile-checked
Image(systemName: String.SFSymbols.plusApp)

// Or skip the detour and get a UIImage directly
let icon = UIImage.SFSymbols.plusApp

// Every symbol is also a CaseIterable enum — perfect for pickers
SFSymbol.allCases.forEach { symbol in
    Image(uiImage: symbol.image)
}

Generated,
never written.

SFSymbolsKit is built from SFSymbols.txt by a Python generator — 7,007 typed properties produced deterministically. A human writing those out by hand would introduce typos in dozens. A generator never does. When Apple ships new icons, you don't wait for a maintainer to type them in — you regenerate.

Ship it today.

Add SFSymbolsKit through Swift Package Manager. No setup. No transitive dependencies. No maintenance burden. The next time you reach for UIImage(systemName:), reach for a typed property instead.

dependencies: [
    .package(url: "https://github.com/WikipediaBrown/SFSymbolsKit.git",
             from: "0.1.26")
]

Stop fighting
strings.

Type-safe SF Symbols. Six Apple platforms. Zero dependencies. MIT licensed. Open source on GitHub.