- August 22, 2025
- Mins Read
Base types for theming an app.
CostumeKit is made of up a set of Swift protocols. They are meant to be implemented by you in your app.
Featured in Little Bites of Cocoa Bite #270: Implementing Theming with CostumeKit
Includes Color
 and ColorPalette
 protocols.
Usage:
public enum MyAppColors : Color, ColorPalette {
case white = “FFFFFF”
case lightTeal = “3CB39E”
case forestGreen = “216055”
case black = “000000”
}
Includes Font
 protocol, and one concrete SystemFont
 implementation for iOS system fonts.
Usage:
public struct MyAppFont : Font {
public init(size: FontSize = .textStyle(.body)) {
self.size = size
}
// Font
public var size: FontSize
// FontConvertible
public var FontValue: UIFont {
return UIFont(name: “SomeCustomFont”, size: pointSize)!
}
}
Includes SVG
 Protocol and SVGMetadata
 type.
Usage:
enum MyAppSVGs {
case clockGlyph
case bird
}
extension MyAppSVGs : SVG {
public func metadata() -> SVGMetadata {
switch self {
case .clockGlyph: return SVGMetadata(name: “clock”, size: CGSize(width: 100, height: 100), fullColor: false)
case .bird: return SVGMetadata(name: “bird”, size: CGSize(width: 58, height: 28), fullColor: true)
}
}
}
What you do with SVGMetadata
 is up to you. I recommend SwiftSVG from Michael Choe. Read more here to learn how to use it.
CostumeKit‘s goals are to be a generic solution, so no assumptions are made about how something should be retrieved from disk, parsed, etc. You’ll need to implement these anyways, so nothing is forced on you.
Includes Costume
 protocol. Usage:
open class MyAppCostume : Costume {
let spacing = CGFloat(8)
public func wearRootBackground(_ view: UIView) {
view.backgroundColor = Color.black.colorValue
}
public func wearHeadline(_ label: UILabel) {
label.font = MyAppFont(size: .textStyle(.title1)).fontValue
label.textColor = MyAppColors.forestGreen.colorValue
}
public var name: String { return “Default” }
public var description: String { return “The default costume.” }
public init() { }
}
A ”Framework for showing alerts like the one used when copying from pasteboard or connecting Apple pencil.
A SwiftUI Marquee or "scrolling text" effect found in Apple native apps. For when one line isn't enough, but two ...
Introduction Text composition in SwiftUI can often be cumbersome, especially when there's logic affecting its format and content. TextBuilder leverages the ...