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

SFSymbols are strings.
Make them types.

Apple ships SFSymbols as hand-typed name strings — no autocomplete, no compiler check, silent blank icons in production. SFSymbolsKit turns every symbol into a typed Swift property. Strictly better, by construction.

IconView.swift +1 −1
- Image(systemName: "squer.and.arrow.up") // compiles, ships blank
+ Image(systemName: String.SFSymbols.squareAndArrowUp) // won't compile if wrong
7,007
Symbols
3
Typed APIs · String · UIImage · NSImage
7
Apple Platforms
0
Dependencies
01 — The problem

Apple ships the icons. We ship the types.

Apple's UIImage(systemName:) and SwiftUI's Image(systemName:) take a String. The type system can't tell a real symbol from a typo, so a mistake isn't a build error — it's a blank icon a user finds for you. SFSymbolsKit replaces every string with a compiler-checked property.

01

Without it

UIImage(systemName: "plus.app") — a hand-typed string, no spell-check. Apple renames it? Silent failure. QA might catch it.

02

With it

UIImage.SFSymbols.plusApp — autocompleted in Xcode, refactor-safe, and physically unable to compile if the symbol is wrong.

03

Forever current

Generated from Apple's full catalog. New symbols each OS release arrive as typed properties on a dependency bump — no hand-maintained list.

02 — Three APIs, one package

Reach for the right type at the right layer.

A typed String for any systemName argument, a UIImage for UIKit, an NSImage for AppKit. All autocompleted. None breakable by a typo.

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

// UIKit — a configured UIImage, no systemName: detour
let icon = UIImage.SFSymbols.plusApp

// AppKit — same ergonomics, accessibility auto-set
let ns = NSImage.SFSymbols.plusApp

// CaseIterable — every symbol, for pickers and galleries
SFSymbol.allCases.forEach { Image(uiImage: $0.image) }
03 — How it stays correct

Generated, never written.

The catalog is sourced once: open Apple's SF Symbols 7.2 app, copy the full name list, paste it into SFSymbols.txt — 7,007 verbatim strings, no retyping. From that file a Python script then generates every String, UIImage, and NSImage extension and the SFSymbol enum, deterministically. A human transcribing 7,007 names would introduce typos in dozens; pasting from the source introduces none, and the generator introduces none. See how it's built →

04 — Install

One line in your Package.swift.

No setup. No transitive dependencies. The next time you reach for systemName:, reach for a typed property instead.

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

Stop shipping blank icons.

Type-safe SFSymbols. Six Apple platforms. Zero dependencies. MIT. Open source on GitHub.