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.
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.
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.
UIImage.SFSymbols.plusApp — autocompleted in Xcode, refactor-safe, and physically unable to compile if Apple drops the symbol. The bug becomes impossible.
When Apple ships new symbols in the next OS release, regeneration is one command. Day-one autocomplete for every new name.
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.
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.
Skip the systemName: detour. Get a fully-configured UIImage for iOS, iPadOS, tvOS, watchOS, and visionOS.
AppKit gets the same ergonomics, with accessibility descriptions auto-generated from the symbol name.
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) }
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.
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") ]
Type-safe SF Symbols. Six Apple platforms. Zero dependencies. MIT licensed. Open source on GitHub.