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:
| Product | Replaces | Notes |
|---|
FioriThemeManager | SAPFiori color palette and fonts | Shared by all modules; also supports watchOS and visionOS |
FioriSwiftUICore | UIKit SAPFiori UI components | iOS and visionOS |
FioriCharts | RoambiChartKit (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 type | SAPFiori 4.x / 5.x | FioriCharts |
|---|
| Area | ✓ | ✓ |
| Line | ✓ | ✓ |
| Column | ✓ | ✓ |
| Stacked column | ✓ | ✓ |
| Bar | ✓ | ✓ |
| Stacked bar | — | ✓ |
| Bubble | ✓ | ✓ |
| Scatter | ✓ | ✓ |
| Waterfall | ✓ | ✓ |
| Combo | ✓ | ✓ |
| Donut | — | ✓ |
| Bullet | — | ✓ |
| Harvey Ball | — | ✓ |
| Radial | — | ✓ |
| Stocks (line) | — | ✓ |
| Stacked Bullet | — | Coming 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 component | FioriSwiftUICore |
|---|
| 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 SAPFiori
FioriSwiftUI
// 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")
// SwiftUI FioriSwiftUICore ObjectItem
ObjectItem(
title: "Rouja Pakiman",
subtitle: "Three Phase Transformer (533423)",
footnote: "1000 - Hamburg, MECHANIK",
status: .text("High"),
detailImage: Image(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.