Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
SFSafeSymbols supports multiple SF Symbols versions at the same time by utilizing the
@availability flag. The following versions are currently supported:
- SF Symbols 2.1 (
@available(iOS 14.2, macOS 11.0, tvOS 14.2, watchOS 7.1, *))
- SF Symbols 2.0 (
@available(iOS 14.0, macOS 11.0, tvOS 14.0, watchOS 7.0, *))
- SF Symbols 1.0 (
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *))
At WWDC 2019, Apple announced a new library of icons that came included with that year's new operating system versions. To browse them, there's even a dedicated Mac app called SF Symbols. However, developers still have to copy the name of an icon and reference it unsafely, resulting in code like this:
It didn't take long until first ideas came up to make these icons accessible in a safe way using a framework. And this is just what
SFSafeSymbols can be installed via the Swift Package Manager (recommended), Carthage or CocoaPods.
Supported platforms are
watchOS (6.0+) and
macOS (10.13+), although the actual functionality is of course only accessible starting with
watchOS 6.0 and
Swift Package Manager (Xcode-integrated)
To integrate SFSafeSymbols using the Xcode-built-in SPM, choose
Swift Packages →
Add Package Dependency. Enter the following url:
https://github.com/piknotech/SFSafeSymbols and click
Next. When asked about the version, leave the preselection and click
Next. In the following step, select
SFSafeSymbols as the package product and click
Finish unless you really want to use
SFSafeSymbols-Dynamic and know what you are doing.
Swift Package Manager (standalone)
To integrate using the standalone version of Apple's Swift Package Manager, add the following as a dependency to your
.package(url: "https://github.com/piknotech/SFSafeSymbols.git", .upToNextMajor(from: "2.1.2"))
"SFSafeSymbols" as a dependency of the target in which you want to use it, run
swift package update.
Add the following entry to your Cartfile:
github "piknotech/SFSafeSymbols" ~> 2.1.2
Add the following entry to your Podfile:
pod 'SFSafeSymbols', '~> 2.1.2'
All the system icons are accessible via the
SFSymbol enum. They are named similar to Apple's names, but use a lower camel case style and prefix names with leading numbers with a
c.circle ~> SFSymbol.cCircle e.circle.fill ~> SFSymbol.eCircleFill 11.circle.fill ~> SFSymbol._11CircleFill
A SF Symbol
UIImage can now be initialized using the
SFSymbol enum. This image is already unwrapped, so you get a
UIImage instead of a
UIImage(systemSymbol: .cCircle) UIImage(systemSymbol: SFSymbol.eCircleFill) UIImage(systemSymbol: ._11CircleFill, withConfiguration: /* Some UIImage.Configuration */)
A SF Symbol
SwiftUI.Image can also be initialized using the
Image(systemSymbol: .cCircle) Image(systemSymbol: SFSymbol.eCircleFill)
There are also
Label("MyText", systemSymbol: .cCircle) Label(LocalizedStringKey("my.text"), systemSymbol: SFSymbol.eCircleFill)
... and interfaces for
let button = UIButton.systemButton(with: .cCircle, target: self, selector: #selector(testMethod)) button.setImage(.eCircleFill, for: .normal)
... and an initializer for
UIApplicationShortcutIcon(systemSymbol: .cCircle) UIApplicationShortcutIcon(systemSymbol: SFSymbol.eCircleFill)
... and finally also an initializer for AppKit's
NSImage(systemSymbol: .cCircle) NSImage(systemSymbol: SFSymbol.eCircleFill, accessibilityDescription: "some.description")
All symbols are tested via a CI (on the latest iOS & tvOS versions), so you can be sure your code won't crash because an image couldn't be found!
Contributions are very much welcome! See CONTRIBUTING.md for more information.
|Last commit: 4 days ago|