Skip to main content
FioriSwiftUI is the SwiftUI implementation of the SAP Fiori for iOS Design Language. It is designed to augment and, in many cases, replace the UIKit-based components in the SAPFiori framework that ships with the SAP BTP SDK for iOS. Migration is incremental — you can adopt FioriSwiftUI one component at a time alongside your existing UIKit code.

Modules

FioriSwiftUI ships as a Swift Package with three products:
ProductReplacesNotes
FioriThemeManagerSAPFiori color palette and fontsShared by all modules; also supports watchOS and visionOS
FioriSwiftUICoreUIKit SAPFiori UI componentsiOS and visionOS
FioriChartsRoambiChartKit (embedded in SAPFiori)iOS and visionOS
The FioriSwiftUI umbrella product imports all three.

Migrating charts from RoambiChartKit

FioriCharts replaces the RoambiChartKit charting library that was embedded in SAPFiori. The migration brings SwiftUI-native rendering, pinch-to-zoom, pan gestures, and new chart types. The API is designed for backwards compatibility with the existing SAPFiori charting APIs.
Chart typeSAPFiori 4.x / 5.xFioriCharts
Area
Line
Column
Stacked column
Bar
Stacked bar
Bubble
Scatter
Waterfall
Combo
Donut
Bullet
Harvey Ball
Radial
Stocks (line)
Stacked BulletComing soon

Migrating UI components from SAPFiori

The table below lists which UIKit SAPFiori components have SwiftUI equivalents in FioriSwiftUICore.
Some components are not yet available in FioriSwiftUI. Continue using the UIKit SAPFiori implementations for: ChartFloorplan, CollectionItem, PasscodeView, MultiUserPasscodeView, TouchIDErrorView, Search to Select, Feedback Screen, Map, and Theming support for individual component fields.
SAPFiori componentFioriSwiftUICore
ObjectItem
ObjectHeader
KPIItem
FioriButton
ListPickerItem
DimensionSelector
SideBar
DataTable
WelcomeScreen
ActivationScreen
InfoView
User Consent Form
KPIProgressItem
EULAView
ContactItem
KPIHeader
Signature Capture
DurationPicker
StepProgressIndicator
Text Input
Validation View
Card
Toolbar
TimelineItem
DateTimePicker
BarcodeScanner
ChartFloorplan
CollectionItem
PasscodeView
MultiUserPasscodeView
TouchIDErrorView

Initializer patterns

FioriSwiftUICore components provide two initializer styles. Choosing the right one depends on how you manage your data.

ViewBuilder initializer

Use the ViewBuilder initializer when you need full control over how each field is rendered — for example, when a title should display an image rather than text.
ObjectItem {
    Text("Rouja Pakiman")
} description: {
    Text("Senior developer, 10 years experience.")
} status: {
    Text("Available")
} detailImage: {
    Image("person_square4")
        .resizable()
        .frame(width: 45, height: 45)
        .clipShape(Circle())
}

Type-based initializer

Use the type-based initializer when migrating from a UIKit data model. Pass typed values directly — the component applies the default Fiori styles automatically.
ObjectItem(
    title: "Transformer Overheating",
    subtitle: "Three Phase Pad Mounted Transformer (533423)",
    footnote: "1000 - Hamburg, MECHANIK",
    status: .text("High"),
    detailImage: Image(systemName: "person"),
    icons: [
        .text("1"),
        .icon(Image(systemName: "circle.fill")),
        .icon(Image(systemName: "mail"))
    ]
)
The type-based initializer is designed to map directly from your existing model objects, making it the fastest path from a UIKit SAPFiori implementation.

Before and after example

// UIKit-based SAPFiori ObjectItem cell
let cell = tableView.dequeueReusableCell(
    withIdentifier: FUIObjectTableViewCell.reuseIdentifier
) as! FUIObjectTableViewCell

cell.headlineText = "Rouja Pakiman"
cell.subheadlineText = "Three Phase Transformer (533423)"
cell.footnoteText = "1000 - Hamburg, MECHANIK"
cell.statusText = "High"
cell.detailImage = UIImage(systemName: "person")

Version history

See the CHANGELOG for a full list of changes across releases. The project uses Conventional Commits and standard-version for release notes.

Build docs developers (and LLMs) love