Skip to main content
SAP 72 is the SAP-patented typeface optimized for enterprise readability on screens. FioriThemeManager bundles the full font family and exposes it through Font extensions that integrate with SwiftUI’s Dynamic Type system. If Font.registerFioriFonts() has not been called, all Font.fiori(...) APIs fall back to the system font automatically — your UI stays functional, but you lose the SAP 72 rendering.

Font weights

The Font.FioriWeight type mirrors Font.Weight and adds an SAP 72-specific value:
WeightTTF file bundled
.ultraLight72-Light
.thin72-Light
.light72-Light
.regular72-Regular
.medium72-Semibold
.semibold72-Semibold
.semiboldDuplex72-SemiboldDuplex
.bold72-Bold
.heavy72-Black
.black72-Black
The condensed variant (72-Condensed, 72-CondensedBold) is selected by passing isCondensed: true.

Setup

1

Register fonts in AppDelegate

Call Font.registerFioriFonts() as early as possible, before any SwiftUI view is initialized. AppDelegate.application(_:didFinishLaunchingWithOptions:) is the recommended location.
import FioriThemeManager
import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        Font.registerFioriFonts()
        return true
    }
}
Calling Font.registerFioriFonts() after the first view renders means Font.fiori(forTextStyle:) will have already resolved to the system font for those views. Always register in didFinishLaunchingWithOptions.
2

Use Font.fiori in your views

Replace standard Font values with Font.fiori(forTextStyle:) calls.
Text("Invoice total")
    .font(.fiori(forTextStyle: .headline))

Text("Due in 30 days")
    .font(.fiori(forTextStyle: .subheadline, weight: .light))

Dynamic Type — Font.fiori(forTextStyle:)

Use Font.fiori(forTextStyle:) when you want the font size to scale with the user’s preferred text size setting. The font scales relative to the equivalent system text style.
static func fiori(
    forTextStyle fioriTextStyle: Font.FioriTextStyle,
    weight: Font.FioriWeight = .regular,
    isItalic: Bool = false,
    isCondensed: Bool = false
) -> Font
Dynamic Type is the recommended approach for all body and label text. It ensures your app remains accessible to users who rely on larger or smaller text sizes.

FioriTextStyle sizes

The default (non-scaled) point sizes are:
StyleDefault size
.extraLargeTitle52 pt
.extraLargeTitle248 pt
.largeTitle34 pt
.largeKPI48 pt
.KPI36 pt
.title128 pt
.title222 pt
.title320 pt
.headline17 pt
.body17 pt
.callout16 pt
.subheadline15 pt
.footnote13 pt
.caption112 pt
.caption211 pt

Examples

Text("Account balance")
    .font(.fiori(forTextStyle: .body))

Fixed-size font — Font.fiori(fixedSize:)

Use Font.fiori(fixedSize:) when you need a font that does not scale with Dynamic Type — for example, in charts, diagrams, or custom-rendered elements where layout depends on exact dimensions.
static func fiori(
    fixedSize: CGFloat,
    weight: Font.FioriWeight = .regular,
    isItalic: Bool = false,
    isCondensed: Bool = false
) -> Font
// Fixed 14 pt, regular weight
Text("Chart axis label")
    .font(.fiori(fixedSize: 14))

// Fixed 24 pt, bold
Text("Dashboard KPI")
    .font(.fiori(fixedSize: 24, weight: .bold))

// Fixed 12 pt, condensed
Text("Narrow column header")
    .font(.fiori(fixedSize: 12, isCondensed: true))

Combining with Fiori colors

Pair SAP 72 fonts with Color.preferredColor for fully Fiori-compliant text styling:
struct ObjectHeaderView: View {
    var body: some View {
        VStack(alignment: .leading, spacing: 4) {
            Text("Sales Order 4500012345")
                .font(.fiori(forTextStyle: .headline, weight: .semibold))
                .foregroundStyle(Color.preferredColor(.primaryLabel))

            Text("Customer: Acme Corp")
                .font(.fiori(forTextStyle: .subheadline))
                .foregroundStyle(Color.preferredColor(.secondaryLabel))

            Text("Due: 2026-04-01")
                .font(.fiori(forTextStyle: .footnote))
                .foregroundStyle(Color.preferredColor(.tertiaryLabel))
        }
    }
}

Build docs developers (and LLMs) love