Skip to content

ALFMOB-426: Reconcile iOS icon set with Figma (Tabler assets)#95

Open
khoinguyen-mindera wants to merge 14 commits into
mainfrom
feat/ALFMOB-426-iconography-figma
Open

ALFMOB-426: Reconcile iOS icon set with Figma (Tabler assets)#95
khoinguyen-mindera wants to merge 14 commits into
mainfrom
feat/ALFMOB-426-iconography-figma

Conversation

@khoinguyen-mindera

@khoinguyen-mindera khoinguyen-mindera commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

ALFMOB-426 — [iOS] Iconography: reconcile icon set with Figma

Replaces SF-Symbol rendering with the Figma Tabler-based icon set for the in-scope
Arrows & System (14) + E-commerce (34) categories. Icon is now a hybrid enum: in-scope
cases resolve to bundled vector assets; the rest stay SF-Symbol fallbacks (permitted by the AC).

Ticket: https://mindera.atlassian.net/browse/ALFMOB-426

What changed

  • Icons.xcassets (SharedUI) — 48 icons exported from Figma as SVG, template-rendering + preserve-vector; wired into Package.swift.
  • Icon.swift — hybrid enum: 50 asset-backed cases + 10 SF-Symbol fallbacks; asset-aware image/uiImage. Existing Swift case names kept stable (no call-site churn). Two aliases (infohelp, reloadloading) share a glyph via assetName.
  • Removed 31 unused / demo-only cases (verified no production usage) and trimmed the 4 DebugMenu demo views that referenced them.
  • ThemedIcon — token-bound icon view (size from Sizing.iconsIcon{Small,Medium,Large,Xlarge} = 16/24/32/40, template tint). Migrated 5 in-scope components (Accordion, PickerMenu, SizingBanner header, PaginatedControl, ZoomableCarousel) off hardcoded points/colours.
  • TestsIconTests (resolution, fallback validity, alias mapping, size-token mapping) as the appearance-coverage substitute (repo snapshot suite is disabled).
  • DocsDocs/Iconography.md: Figma→repo re-export runbook + node-ID map.

⚠️ SF Symbols still in use (design-approved fallbacks — no in-scope Figma glyph)

These 10 cases intentionally remain SF Symbols; they'd come from out-of-scope categories:

Case SF Symbol
aCircle a.circle
zCircle z.circle
arrowLeft arrow.left
chartUpTrend chart.line.uptrend.xyaxis
chartDownTrend chart.line.downtrend.xyaxis
chat2 note.text
location mappin.circle.fill
logIn ipad.and.arrow.forward
store storefront
closeCircleFill xmark.circle.fill

Post-review updates

Addressed PR review + Copilot feedback:

  • Reverted closeCircleFill to the SF circled-X badge (Figma "Clear" is a bare X — added as the separate clear case) so the wishlist remove affordance is unchanged.
  • Added .accessibilityLabels (new L10n.Accessibility.*) across icon-only controls; bundled assets otherwise expose raw asset names to VoiceOver. ThemedIcon is decorative-by-default with an opt-in label.
  • Sourced tab-bar / account / list-style icon sizes from Sizing.iconsIcon* tokens instead of hardcoded values.
  • Migrated the last unguarded Icon.close.image (PLP refine sheet) to token-sized ThemedIcon.
  • Removed the unused rewards (rosette) fallback + its dead rewardsItem() toolbar helper — it rendered nowhere in the live app. Live fallback set is now 10.

🎨 Needs design sign-off

The SF→Tabler name mappings were flagged in the ticket as "resolve at refinement." They're
implemented per the agreed provisional mapping (notably: heart→Wishlist, warning→Alert,
filter→Refine, list→Menu Alt, logOut→Exit, grid→Grid 2, listplp→Grid 1). The architecture
decouples mapping from code — re-mapping any icon is re-exporting one SVG + editing one raw value.

Out of scope

Food & Nature / Care Guide / House & Furniture / Accommodations categories · ButtonIcon
(checkbox/radio) · full call-site sweep (only in-scope components migrated) · Android/Flutter/Web
(sibling tickets) · automated export pipeline.

Verification

./Alfie/scripts/verify.sh --skip-integration → ✅ build + unit tests pass (no BFF/networking surface).

🤖 Generated with Claude Code

Copilot AI review requested due to automatic review settings July 13, 2026 09:22

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR reconciles Alfie’s iOS iconography with the Figma Tabler-based icon set by introducing an asset-backed icon catalog and making Icon resolve to bundled vector assets for the in-scope categories, while retaining SF Symbols as design-approved fallbacks.

Changes:

  • Added Icons.xcassets as a SharedUI SPM resource and updated Icon to render asset-backed icons (with a defined SF Symbol fallback set).
  • Introduced ThemedIcon to standardize token-driven icon sizing (16/24/32/40) and migrated several components/demo views off hardcoded icon sizing/tint chains.
  • Added unit tests and documentation to lock down icon resolution, fallback set integrity, alias behavior, and the Figma re-export runbook.

Reviewed changes

Copilot reviewed 71 out of 119 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
Alfie/AlfieKit/Package.swift Registers the new Icons.xcassets resource bundle in SharedUI.
Alfie/AlfieKit/Sources/SharedUI/Theme/Icons/Icon.swift Converts Icon into a hybrid (asset-backed + SF fallback) renderer with alias mapping and fallback set.
Alfie/AlfieKit/Sources/SharedUI/Theme/Icons/ThemedIcon.swift Adds token-sized, template-tinted icon view for consistent call-site usage.
Alfie/AlfieKit/Tests/SharedUITests/IconTests.swift Adds resolution/coverage guards for asset icons, SF fallbacks, aliases, and size-token mapping.
Alfie/AlfieKit/Sources/SharedUI/Theme/Icons/Icons.xcassets/** Adds the bundled SVG icon catalog (template rendering + preserve vector).
Alfie/AlfieKit/Sources/SharedUI/Theme/Components/SizingBanner/ColorAndSizingSelectorHeaderView.swift Migrates chevron rendering to ThemedIcon.
Alfie/AlfieKit/Sources/SharedUI/Theme/Components/Selectors/PickerMenu.swift Migrates chevron rendering to ThemedIcon.
Alfie/AlfieKit/Sources/SharedUI/Theme/Accordion/AccordionView.swift Migrates chevron rendering to ThemedIcon (with rotation).
Alfie/AlfieKit/Sources/SharedUI/Components/Indicators/PaginatedControl.swift Migrates chevron buttons to ThemedIcon.
Alfie/AlfieKit/Sources/SharedUI/Components/Carousel/ZoomableCarousel/ZoomableCarousel.swift Migrates close button icon to ThemedIcon.
Alfie/AlfieKit/Sources/DebugMenu/UI/Demo/Toolbar/ToolbarDemoView.swift Updates demo icon reference to a remaining icon case.
Alfie/AlfieKit/Sources/DebugMenu/UI/Demo/SortBy/DemoSortByView.swift Updates demo icon references away from deleted cases.
Alfie/AlfieKit/Sources/DebugMenu/UI/Demo/Inputs/InputDemoView.swift Updates demo default icon away from deleted cases.
Alfie/AlfieKit/Sources/DebugMenu/UI/Demo/Dividers/DividerDemoView.swift Updates demo icon references away from deleted cases.
Docs/Iconography.md Documents the Figma source, node map, re-export process, and fallback list.
Docs/Plans/ALFMOB-426-iconography-figma/_status.md Adds the execution status record for the work.
Docs/Plans/ALFMOB-426-iconography-figma/plan.md Adds the implementation plan/decisions and acceptance criteria mapping.
Docs/Plans/ALFMOB-426-iconography-figma/scope.md Captures current-state audit and Figma inventory for the icon system.
Docs/Plans/ALFMOB-426-iconography-figma/grill.md Records key decisions (mappings, deletions, fallbacks, coverage strategy).
Docs/Plans/ALFMOB-426-iconography-figma/phase-1-assets.md Phase documentation for asset export + catalog creation.
Docs/Plans/ALFMOB-426-iconography-figma/phase-2-icon-enum.md Phase documentation for hybrid enum + asset-aware rendering.
Docs/Plans/ALFMOB-426-iconography-figma/phase-3-themed-icon-view.md Phase documentation for token-bound ThemedIcon adoption.
Docs/Plans/ALFMOB-426-iconography-figma/phase-4-docs-coverage.md Phase documentation for docs + unit-test appearance coverage.

Comment thread Alfie/AlfieKit/Sources/SharedUI/Theme/Icons/Icon.swift
Comment thread Alfie/AlfieKit/Sources/SharedUI/Theme/Icons/Icon.swift Outdated
Comment thread Docs/Iconography.md Outdated
Comment thread Alfie/AlfieKit/Tests/SharedUITests/IconTests.swift Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 88 out of 136 changed files in this pull request and generated 4 comments.

Comment thread Docs/Iconography.md Outdated
Comment thread Alfie/AlfieKit/Sources/SharedUI/Theme/Icons/Icon.swift Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants