All the SFSymbols at your fingertips.
SFSymbol
are static variables
that contain the identifier strings of all of apple's SFSymbols
as well as which category they belong to and their availability.
You can iterate through all version compatible symbols by using the 'allSymbols' static variable.
for symbol in SFSymbol.allSymbols {
print(symbol.title)
}
If you want symbols only in a certain SFCategory
you can do so like this.
for symbol in SFCategory.weather.symbols {
print(symbol.title)
}
There are even common, human understandable names for symbols. Feel free extend SFSymbols in your own project for more common names.
public extension SFSymbol{
static let share = squareAndArrowUp
static let refresh = arrowClockwise
static let copy = docOnDoc
static let writing = squareAndPencil
}
@available(iOS 14, macOS 14.0, tvOS 14.0, watchOS 7.0, *)
public extension SFSymbol{
static let edit = rectangleAndPencilAndEllipsis
static let filter = lineHorizontal2DecreaseCircle
static let sort = arrowUpArrowDownCircle
}
Additionally, there are extensions multiple extension including UIImage
, Image
, Button
, Label
, and UIAction
that enable easy use of any SFSymbol
.
UIImage(symbol: .playCircle)
Image(symbol: .playCircle)
VStack {
Label("Sunset", symbol: .sunset)
Label("Sunset", symbol: .sunset)
.foregroundStyle(.red)
Label("Sunset", symbol: .sunset, textColor: .orange)
.foregroundStyle(.yellow)
}
VStack {
Button(symbol: .sunset){}
.foregroundStyle(.red)
Button("Sunset", symbol: .sunset){}
.foregroundStyle(.yellow)
Button("Sunset", symbol: .sunset, textColor : .orange){}
.foregroundStyle(.yellow)
}
SFSymbols are a real treat from Apple. The one downfall however, it is a pain in the neck to look up exact symbol names. Take for example: "square.and.line.vertical.and.square.fill"
. That is a long string to remember and digging through the catalog of SF Symbols over and over gets tiresome.
Wouldn't it be easier if you could just use code completion?
Thats what this micro library aims to do. Additionally, this library includes relevant information on each symbol such as release info, category, and relevant search terms.
Since Xcode integrated swift package manager natively into the IDE you can add SFSymbol simply by:
File
-> Swift Packages
-> Add Package Dependency...
when prompted to enter a package URL paste:
https://github.com/Rspoon3/SFSymbols
and click next & finish to automagically install SFSymbol through Xcode & SPM!
Don't want that additional third party dependency? Then just simply copy over the files into your project's appropriate folder!
Thanks to Nirma for the idea. This project was highly influence and based off of his SFSymbol package. I found that few things I would do differently and before I knew it, I had an offshoot of what he had already done that went in a different direction. I also would like thank Steven Sorial for creating the inspirational and highly popular SFSafeSymbols.
If you have any suggestions or ideas for improving the project, please feel free to propose them. You can either create a pull request or open an issue for this project.
In order to update the symbols please follow the steps below
- Navigate to /Applications/SF\ Symbols.app/Contents/Resources/Metadata
- Copy the symbol_categories, symbol_search, name_availability, and categories plist files into the demo projects “SFSymbol App Plist Files”
- Run the demo project (preferably on a mac)
- Locate the output files (Check the console logs for the output directory)
- Use SFCategory.swift to update the corresponding file in the package source files
- Replace all files in the package SFSymbol+All.swift with the new files generated by the demo project except for SFSymbol+All itself. This file in particular needs to be updated by hand.
- Replace all files in the package SFSymbol+StaticVariables.swift with the new files generated by the demo project
- Update the CHANGELOG
SFSymbols is released under the MIT license. See LICENSE for details.