sap-fiori-ios

v2026.09.24

SAP Fiori for iOS Design Skill — Converts Figma designs from the Fiori iOS UI Kit into SwiftUI prototypes with animations and interactions. Use this skill when a designer provides a Figma node ID or component name and wants working SwiftUI code, when asking which Fiori iOS component to use, when mapping Figma variants to SwiftUI, or when adding animations and state transitions to iOS prototypes. Triggers on: Fiori iOS, SwiftUI, iOS prototype, Figma to iOS, FioriButton, FioriTheme, animation, interaction, SAP 72, preferredFioriColor, ObjectItem, FioriSwiftUI.

GitHub
Install command
npx skhub add sap/sap-fiori-ios
Markdown
SKILL.md

SAP Fiori for iOS — Design Skill

Figma UI Kit

File key: 1450853598524410675 Community URL: https://www.figma.com/community/file/1450853598524410675/sap-fiori-for-ios-ui-kit

How to read a component from Figma

get_figma_data(fileKey: "1450853598524410675", nodeId: "<nodeId>", depth: 3)

Known Page Node IDs (depth=1 from file root)

PageContents
CoverFile cover
🎨 FoundationsColors, typography, spacing, elevation
🔘 ButtonsFioriButton all variants
🗂 CardsCard, KPI Card, Timeline Card
📋 ListsObjectItem, SectionHeader, KeyValueItem
🗺 NavigationTabBar, NavigationBar, SideBar
📝 FormsTextFieldFormView, NoteFormView, SwitchFormView
📊 ChartsAll chart types
🔔 NotificationsBanners, toasts, badges
📅 PickersDateTimePicker, DurationPicker
📈 KPIKPIItem, KPIProgressItem, KPIHeader

Core Rule: NEVER hardcode hex values

Always use Fiori color tokens. The API is:

// Dynamic color (adapts to Light / Dark automatically)
Color.preferredColor(.primaryLabel)

// In a view modifier context
.foregroundStyle(Color.preferredColor(.tintColor))

// Force a specific scheme
Color.preferredColor(.tintColor, background: .darkConstant)

See references/foundations/colors.md and references/colors.md for the full token table.


Figma Variant → SwiftUI Mapping

FioriButton

Figma Variant PropertyFigma ValueSwiftUI
TypePrimary.fioriPrimaryButtonStyle
TypeSecondary.fioriSecondaryButtonStyle
TypeTertiary.fioriTertiaryButtonStyle
TypeDestructive.fioriDestructiveButtonStyle
TypeMenu.fioriMenuButtonStyle
StateDefault(no modifier)
StatePressed.disabled(false) + tap gesture
StateDisabled.disabled(true)
// Primary button
FioriButton { _ in Text("Continue") }
    .fioriButtonStyle(.fioriPrimaryButtonStyle)

// Secondary
FioriButton { _ in Text("Cancel") }
    .fioriButtonStyle(.fioriSecondaryButtonStyle)

// Full width
FioriButton { _ in Text("Submit") }
    .fioriButtonStyle(.fioriPrimaryButtonStyle)
    .frame(maxWidth: .infinity)

Typography

Figma Text StyleSwiftUI
extraLargeTitle.fiori(forTextStyle: .extraLargeTitle)
extraLargeTitle2.fiori(forTextStyle: .extraLargeTitle2)
largeTitle.fiori(forTextStyle: .largeTitle)
title1.fiori(forTextStyle: .title1)
title2.fiori(forTextStyle: .title2)
title3.fiori(forTextStyle: .title3)
headline.fiori(forTextStyle: .headline)
body.fiori(forTextStyle: .body)
callout.fiori(forTextStyle: .callout)
subheadline.fiori(forTextStyle: .subheadline)
footnote.fiori(forTextStyle: .footnote)
caption1.fiori(forTextStyle: .caption1)
caption2.fiori(forTextStyle: .caption2)
KPI.fiori(forTextStyle: .KPI)
largeKPI.fiori(forTextStyle: .largeKPI)
Text("Hello")
    .font(.fiori(forTextStyle: .headline))

Text("42")
    .font(.fiori(fixedSize: 36, weight: .light))  // fixed KPI number

Navigation

Figma ComponentSwiftUI Equivalent
TabBarTabView + .tabItem {}
NavigationBarNavigationStack + .navigationTitle() + .toolbar {}
SideBarNavigationSplitView with SidebarListStyle
BackButtonAutomatic in NavigationStack

Cards

Figma VariantSwiftUI
Card / DefaultCardView {} or custom VStack in card style
Card / HighlightedAdd .overlay(RoundedRectangle.stroke(Color.preferredFioriColor(forStyle: .tintColor)))
KPI Card_KPIItem or custom card with .fiori(forTextStyle: .KPI)

List / ObjectItem

Figma PropertySwiftUI
ObjectItem / 1-lineObjectItem(title: Text(""), footnote: nil)
ObjectItem / 2-lineObjectItem(title: Text(""), subtitle: Text(""))
ObjectItem / 3-lineObjectItem(title: Text(""), subtitle: Text(""), footnote: Text(""))
ObjectItem / with iconAdd detailImage: Image(...)

Forms

Figma VariantSwiftUI Component
TextFieldTextFieldFormView(title: Text(""), text: $value)
NoteFieldNoteFormView(title: Text(""), text: $value)
KeyValueKeyValueFormView(keyText: Text(""), value: Text(""))
SwitchSwitchFormView(title: Text(""), isOn: $value)
DateTimePicker_DateTimePicker(...)

Animation Specs

InteractionAnimation
Button tap press.scaleEffect(0.97) with .spring(response: 0.2, dampingFraction: 0.8)
View appear.opacity(0→1) + .offset(y: 8→0) with .easeOut(duration: 0.25)
Sheet presentSystem default .sheet() — do not override
List row tap.opacity feedback with duration: 0.15
Navigation pushSystem default — do not override
Toggle switchSystem default .toggle() — let SwiftUI handle
Loading/skeleton.opacity(0.3...1.0) repeating with .easeInOut(duration: 0.9)
Error shake.offset(x: -6...6) sequence, 3 cycles, duration: 0.07 each
// Standard button press feedback
struct FioriButtonPress: ViewModifier {
    @State private var isPressed = false
    func body(content: Content) -> some View {
        content
            .scaleEffect(isPressed ? 0.97 : 1.0)
            .animation(.spring(response: 0.2, dampingFraction: 0.8), value: isPressed)
            .simultaneousGesture(DragGesture(minimumDistance: 0)
                .onChanged { _ in isPressed = true }
                .onEnded { _ in isPressed = false })
    }
}

FioriTheme Setup

// AppDelegate — call at launch
import FioriThemeManager

func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    ThemeManager.shared.setPaletteVersion(.v8)  // pin to current Fiori Next palette
    Font.registerFioriFonts()                   // register SAP 72 typeface
    return true
}

// To override individual tokens:
ThemeManager.shared.setHexColor("FF6000", for: .tintColor, variant: .light)
ThemeManager.shared.reset()  // clear all overrides

Quick Start SwiftUI Template

import SwiftUI
import FioriSwiftUICore
import FioriThemeManager

struct FioriScreenTemplate: View {
    var body: some View {
        NavigationStack {
            List {
                ObjectItem {
                    Text("Invoice #1234")
                } subtitle: {
                    Text("SAP SE")
                } footnote: {
                    Text("Due: 30 Jan 2026")
                } detailImage: {
                    Image(systemName: "doc.text")
                }
            }
            .navigationTitle("My Items")
            .toolbar {
                ToolbarItem(placement: .primaryAction) {
                    FioriButton { _ in Image(systemName: "plus") }
                        .fioriButtonStyle(FioriPrimaryButtonStyle())
                }
            }
        }
    }
}

File Directory

All content lives under references/. When reading any file, always use the full path from the skill root as listed below. Never guess a path — look it up here first.

Foundations — references/foundations/

TopicFile
Colors & tokensreferences/foundations/colors.md
Typography (SAP 72)references/foundations/typography.md
Theming & FioriThemereferences/foundations/theming.md
Design tokensreferences/foundations/design-tokens.md
Accessibilityreferences/foundations/accessibility.md
Adaptive layoutreferences/foundations/adaptive-layout.md
Animationreferences/foundations/animation.md
Elevation & shadowsreferences/foundations/elevation.md
Iconographyreferences/foundations/iconography.md
App iconreferences/foundations/app-icon.md
App Store appearancereferences/foundations/app-store-appearance.md
Time & date formatsreferences/foundations/time-and-date-formats.md

Components — references/components/

TopicFile
Activity indicator / loadingreferences/components/activity-indicator.md
Attachment form cellreferences/components/attachment-form-cell.md
Avatarsreferences/components/avatars.md
Avatars & imagesreferences/components/avatars-and-images.md
Bannerreferences/components/banner.md
Button form cellreferences/components/button-form-cell.md
Buttons (FioriButton)references/components/buttons.md
Calendarreferences/components/calendar.md
Cardsreferences/components/cards.md
Chart headerreferences/components/chart-header.md
Checkout indicatorreferences/components/checkout-indicator.md
Collection viewreferences/components/collection-view.md
Contact cellreferences/components/contact-cell.md
Data tablereferences/components/data-table.md
Dimension selectorreferences/components/dimension-selector.md
Empty state viewreferences/components/empty-state-view.md
Error handlingreferences/components/error-handling.md
Feedback indicatorsreferences/components/feedback-indicators.md
Filter feedback barreferences/components/filter-feedback-bar.md
Filter form cellreferences/components/filter-form-cell.md
Hierarchy viewreferences/components/hierarchy-view.md
Illustrated message (empty/error states)references/components/illustrated-message.md
Info viewreferences/components/info-view.md
Inline signature form cellreferences/components/inline-signature-form-cell.md
Inline validationreferences/components/inline-validation.md
Key-value table view cellreferences/components/key-value-table-view-cell.md
KPI header / KPIItem / KPIProgressItemreferences/components/kpi-header.md
KPIs (overview)references/components/kpis.md
Linear progress indicatorreferences/components/linear-progress-indicator.md
List picker form cellreferences/components/list-picker-form-cell.md
Modalsreferences/components/modals.md
Multi-message handlingreferences/components/multi-message-handling.md
Navigation barreferences/components/navigation-bar.md
Object cell (ObjectItem / list rows)references/components/object-cell.md
Object headerreferences/components/object-header.md
Offlinereferences/components/offline.md
Order picker form cellreferences/components/order-picker-form-cell.md
Pickersreferences/components/pickers.md
Preview table viewreferences/components/preview-table-view.md
Profile headerreferences/components/profile-header.md
Progress & processing indicatorreferences/components/progress-and-processing-indicator.md
Rating controlreferences/components/rating-control.md
Rating control form cellreferences/components/rating-control-form-cell.md
Search barreferences/components/search-bar.md
Search to selectreferences/components/search-to-select.md
Segmented controlreferences/components/segmented-control.md
Segmented control form cellreferences/components/segmented-control-form-cell.md
Sheetsreferences/components/sheets.md
Sibling navigationreferences/components/sibling-navigation.md
Sidebar (NavigationSplitView)references/components/sidebar.md
Signature capturereferences/components/signature-capture.md
Skeleton loadingreferences/components/skeleton-loading.md
Slider form cellreferences/components/slider-form-cell.md
Standard table view cellreferences/components/standard-table-view-cell.md
Status info labelreferences/components/status-info-label.md
Step progress indicatorreferences/components/step-progress-indicator.md
Stepper form cellreferences/components/stepper-form-cell.md
Switch form cellreferences/components/switch-form-cell.md
Tab barreferences/components/tab-bar.md
Tagsreferences/components/tags.md
Text inputs (forms)references/components/text-inputs.md
Timeline previewreferences/components/timeline-preview.md
Timeline viewreferences/components/timeline-view.md
Toast messagereferences/components/toast-message.md
Toolbarreferences/components/toolbar.md
Widgetsreferences/components/widgets.md

Patterns — references/patterns/

TopicFile
Authentication overviewreferences/patterns/authentication-overview.md
Barcode scannerreferences/patterns/barcode-scanner.md
Basic authenticationreferences/patterns/basic-authentication.md
Biometric authenticationreferences/patterns/biometric-authentication.md
Chart content table view cellreferences/patterns/chart-content-table-view-cell.md
Chart typesreferences/patterns/chart-types.md
Charts (FioriCharts)references/patterns/charts.md
Consent formsreferences/patterns/consent-forms.md
Create & editreferences/patterns/create-and-edit.md
Document scannerreferences/patterns/document-scanner.md
Hierarchyreferences/patterns/hierarchy.md
Mapreferences/patterns/map.md
Modalityreferences/patterns/modality.md
Multi-user onboardingreferences/patterns/multi-user-onboarding.md
Navigationreferences/patterns/navigation.md
OCR scannerreferences/patterns/ocr-scanner.md
QR code scannerreferences/patterns/qr-code-scanner.md
Quick sortreferences/patterns/quick-sort.md
Rich text documentreferences/patterns/rich-text-document.md
Searchreferences/patterns/search.md
Single-user onboardingreferences/patterns/single-user-onboarding.md
Sort & filter (form)references/patterns/sort-and-filter-form.md
Sort & filter (overview)references/patterns/sort-and-filter-overview.md
What's newreferences/patterns/whats-new.md

Page Types — references/page-types/

TopicFile
List report pagereferences/page-types/list-report-page.md
Object details pagereferences/page-types/object-details-page.md
Overview pagereferences/page-types/overview-page.md
Profile & settings pagereferences/page-types/profile-and-settings-page.md

Joule — references/joule/

TopicFile
Get startedreferences/joule/get-started.md
AI handoffreferences/joule/ai-handoff.md
What's newreferences/joule/whats-new.md
Colorsreferences/joule/foundations/colors.md
Layoutreferences/joule/foundations/layout.md
Carouselreferences/joule/components/carousel.md
Illustrated messagereferences/joule/components/illustrated-message.md
Input fieldreferences/joule/components/input-field.md
Joule panelreferences/joule/components/joule-panel.md
Likert scalereferences/joule/components/likert-scale.md
List cardreferences/joule/components/list-card.md
Mediareferences/joule/components/media.md
Menu selectionreferences/joule/components/menu-selection.md
Object cardreferences/joule/components/object-card.md
Quick repliesreferences/joule/components/quick-replies.md
Response actionsreferences/joule/components/response-actions.md
Text messagesreferences/joule/components/text-messages.md
Timestampreferences/joule/components/timestamp.md
AI noticereferences/joule/patterns/ai-notice.md
Attachment by promptreferences/joule/patterns/attachment-by-prompt.md
Confirmationreferences/joule/patterns/confirmation.md
Conversations listreferences/joule/patterns/conversations-list.md
Detail viewreferences/joule/patterns/detail-view.md
Dictationreferences/joule/patterns/dictation.md
Entry pointreferences/joule/patterns/entry-point.md
Error handlingreferences/joule/patterns/error-handling.md
Feedbackreferences/joule/patterns/feedback.md
Initial loadingreferences/joule/patterns/initial-loading.md
Modesreferences/joule/patterns/modes.md
Outbound navigationreferences/joule/patterns/outbound-navigation.md
Persistent attachmentreferences/joule/patterns/persistent-attachment.md
Response loadingreferences/joule/patterns/response-loading.md
Transparency & explainabilityreferences/joule/patterns/transparency-and-explainability.md
Typeaheadreferences/joule/patterns/typeahead.md
Welcome screenreferences/joule/patterns/welcome-screen.md

In-App AI Design — references/in-app-ai-design/

TopicFile
Get startedreferences/in-app-ai-design/get-started.md
AI UI textreferences/in-app-ai-design/foundations/ai-ui-text.md
AI buttonsreferences/in-app-ai-design/components/ai-buttons.md
AI progress indicatorsreferences/in-app-ai-design/components/ai-progress-indicators.md
AI acknowledgementreferences/in-app-ai-design/patterns/ai-acknowledgement.md
AI handoffreferences/in-app-ai-design/patterns/ai-handoff.md
AI insightsreferences/in-app-ai-design/patterns/ai-insights.md
AI noticereferences/in-app-ai-design/patterns/ai-notice.md
AI user feedbackreferences/in-app-ai-design/patterns/ai-user-feedback.md
AI writing assistantreferences/in-app-ai-design/patterns/ai-writing-assistant.md

Platform Extensions

TopicFile
watchOS — get startedreferences/watchos/get-started.md
watchOS — colorsreferences/watchos/foundations/colors.md
watchOS — design principlesreferences/watchos/foundations/design-principles.md
watchOS — layoutreferences/watchos/foundations/layout.md
watchOS — navigationreferences/watchos/foundations/navigation.md
watchOS — type systemreferences/watchos/foundations/type-system.md
visionOS — get startedreferences/visionos/get-started.md
visionOS — design principlesreferences/visionos/foundations/design-principles.md
visionOS — design process & toolsreferences/visionos/foundations/design-process-and-tools.md
visionOS — spatial UX designreferences/visionos/foundations/spatial-ux-design.md
visionOS — terminologyreferences/visionos/foundations/terminology.md
visionOS — typographyreferences/visionos/foundations/typography.md
CarPlay — get startedreferences/carplay/get-started.md
CarPlay — design principlesreferences/carplay/design-principles.md

Resources & Discovery

TopicFile
Color token quick lookupreferences/colors.md
UI Kitreferences/resources/ui-kit.md
Joule UI Kitreferences/resources/joule-ui-kit.md
watchOS UI Kitreferences/resources/watchos-ui-kit.md
Mentor appreferences/resources/mentor-app.md
Get startedreferences/discover/get-started.md
What's newreferences/discover/whats-new.md
SAP Design Systemreferences/discover/sap-design-system.md
Mobile UX consistencyreferences/discover/mobile-ux-consistency.md
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

Apache-2.0

Source path

skills/sap-fiori-ios

Default branch

main

Latest commit

4492972

Tree SHA

a3b3938