CostumeKit 🎩
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
Color 🎨
Includes Color and ColorPalette protocols.
Usage:
public enum MyAppColors : Color, ColorPalette {
case white = "FFFFFF"
case lightTeal = "3CB39E"
case forestGreen = "216055"
case black = "000000"
}Font 🔠
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)!
}
}SVG 🌠
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.
Costume 🎩
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() { }
}Cheers.

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
