Skip to content

Map six more SF Symbols to Material icons - #525

Merged
marcprux merged 2 commits into
skiptools:mainfrom
Ceylo:feature/sf-symbol-mappings
Oct 1, 2026
Merged

marcprux merged 2 commits into
skiptools:mainfrom
Ceylo:feature/sf-symbol-mappings

Conversation

@Ceylo

@Ceylo Ceylo commented Sep 13, 2026 •

Copy link
Copy Markdown
Contributor

What

On Android, Image(systemName:) draws Icons.Default.Warning for bubble, message, safari, exclamationmark.bubble, square.and.arrow.down and ellipsis.bubble, and logs "Unable to find system image". This PR maps each one to the outlined Material icon closest in shape. They all come from material-icons-extended, which SkipUI already depends on. Same shape as #476: entries in composeSymbolName(for:) and composeImageVector(named:), plus the glyph comment.

SF Symbol Material icon iOS 26.5 before after
bubble Icons.Outlined.ChatBubbleOutline
message Icons.Outlined.Chat
safari Icons.Outlined.Explore
exclamationmark.bubble Icons.Outlined.Feedback
square.and.arrow.down Icons.Outlined.SaveAlt
ellipsis.bubble Icons.Outlined.Sms

The icons were picked by shape, not by meaning, as #200 asks. Two are approximate. Material has no oval bubble, so message gets Chat: its lines keep it distinct from bubble. SaveAlt was chosen over FileDownload because its tray has sides, like the SF box.

Before / after

Showcase → Symbol. The six rows are added to the playground by skiptools/skipapp-showcase#123. Rows cropped from Fuse screenshots; Lite is pixel-identical.

iOS 26.5 before after

Side effects

  • Only the six new rows change. In both Lite and Fuse, every other row of the Symbol playground was captured before and after: 74 rows, including the existing symbols, the .foregroundStyle/.tint/.font rows and the Symbol Variants section. All are pixel-identical. The first and last rows of the page were not captured by the script.
  • Filled variants are not mapped. bubble.fill, message.fill, etc. still fall back to the warning triangle, as the other outlined-only entries do today.
  • Apple platforms: none. The mapping lives in the #if SKIP block.

Verified

  • swift test: 93 Swift tests, 36 skipped, 0 failures. JUnit: 92 tests, 87 passed, 5 skipped, 0 failed.
  • Showcase built through Gradle with this branch as its skip-ui (SKIP_DEPENDENCY_ROOT), in Lite and Fuse, and run on an API 37 Android emulator, before (skip-ui main) and after. Also run on an iPhone 17 simulator (iOS 26.5) as the reference.
  • Each new icon checked by eye on a zoomed crop to be an outline, not a filled glyph (the Fallback symbol star maps to Icons.Outlined.Star which, despite the name, is not outlined #148 trap).
  • Glyph comments: the codepoint was found by matching each symbol's rendered image against the SF Pro font's glyphs. The same match finds the existing comments for square.and.arrow.up, hand.thumbsup and trash.

Skip Pull Request Checklist:

  • REQUIRED: I have signed the Contributor Agreement
  • REQUIRED: I have tested my change locally with swift test
  • OPTIONAL: I have tested my change on an iOS simulator or device
  • OPTIONAL: I have tested my change on an Android emulator or device
  • REQUIRED: I have checked whether this change requires a corresponding update in the Skip Fuse UI repository (link related PR if applicable). No API change, so no paired PR.
  • OPTIONAL: I have added an example of any UI changes to the Showcase sample app: Add the newly mapped symbols to SymbolPlayground skipapp-showcase#123

  • AI was used to generate or assist with generating this PR. Please specify below how you used AI to help you, and what steps you have taken to manually verify the changes.

Written with Claude Code: the mapping and the playground rows. Every claim above comes from a run: the Showcase on an emulator (Lite and Fuse) before and after, with a per-row pixel comparison of the whole playground, and on a simulator for the SF originals.

bubble, message, safari, exclamationmark.bubble, square.and.arrow.down and
ellipsis.bubble fell through to the unknown-symbol warning triangle. Each maps
to the outlined Material icon closest in shape, from material-icons-extended.
@cla-bot cla-bot Bot added the cla-signed label Sep 13, 2026
Ceylo added a commit to Ceylo/skip-ui that referenced this pull request Sep 13, 2026
The upstream PR maps by shape rather than by what the app means: safari is
Explore, exclamationmark.bubble Feedback, ellipsis.bubble Sms and
square.and.arrow.down SaveAlt. The glyph comments are corrected too.
text.badge.star keeps its fork-only Info mapping.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rwwd38mavAQybSVuJsFMXp
@Ceylo
Ceylo marked this pull request as ready for review September 13, 2026 21:10
@marcprux
marcprux merged commit d132af0 into skiptools:main Oct 1, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants