Skip to content

New app icon, and bump to 1.4 - #23

Merged
fardavide merged 6 commits into
mainfrom
claude/app-icon-alternatives-h4v9xv
Aug 9, 2026
Merged

New app icon, and bump to 1.4#23
fardavide merged 6 commits into
mainfrom
claude/app-icon-alternatives-h4v9xv

Conversation

@fardavide

Copy link
Copy Markdown
Owner

Replaces the stock euro coin with a new icon, and bumps MARKETING_VERSION to 1.4.

Why

The icon shipping until now was a stock flat-illustration euro coin on a blue gradient. Three problems:

  1. It said "euro app". Swiftly converts around 170 currencies and the icon named one.
  2. It fell apart small. Rim, inner disc, shading crescent and a diagonal highlight stripe — four stacked layers that collapse into an orange smudge at the 16pt and 32pt sizes macOS asks for in the Dock, Finder sidebar and Cmd-Tab.
  3. It wasn't ours. A widely licensed clip-art asset with no relationship to the product's name or what it does.

What ships

Split — one tile divided on a curve, a currency in each field. It still names two currencies rather than none, but it's the strongest small-size performer of everything drawn: once the glyphs have dissolved, two colour fields meeting on a curve are still a distinct shape.

Two fixes come along with the artwork:

  • macOS slots get real tile geometry. They previously held bare full-bleed squares, which is why the app read as a pasted screenshot in the Dock. They're now the Big Sur tile — an 824pt rounded square centred in the 1024pt canvas, with a drop shadow.
  • LaunchColor moves off the indigo picked for the old coin to #0E4A50, the deep teal of the new icon's lower field, so the splash stops disagreeing with the icon it precedes.

How it's built

Media/Icons/concepts/02-split.svg is the source of truth; everything in the asset catalog is generated from it:

cd Media/Icons && npm install && node apply_icon.mjs 02-split

The SVGs carry no font dependency — currency glyphs are outlines rather than text, so they open and edit identically in Pixelmator, Figma or Illustrator. Three other directions (03-duo, 04-coin, 05-ring) stay on file as genuinely different answers rather than variations. A larger family built on an S monogram was explored and dropped; it's in this branch's history.

Not verified

The asset catalog hasn't been through a real Xcode build — no macOS toolchain in the environment this was authored in. It's correct by inspection: every declared slot has a PNG at the right pixel dimensions and Contents.json keeps the shape it had. Worth an asset-catalog build before tagging.

Version

MARKETING_VERSION 1.3.3 → 1.4, on the app target's Debug and Release configs only. Written two-component to match how 1.2 and 1.3 were set; three components have been used for patches. CURRENT_PROJECT_VERSION left at 0.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NqoQ882LK6CfUkwsXG6xXp


Generated by Claude Code

claude added 6 commits August 9, 2026 18:00
The icon shipping today is a stock flat-illustration euro coin on a blue
gradient. It names one currency for an app that converts around 170, its four
stacked layers — rim, inner disc, shading crescent, highlight stripe — collapse
into a smudge at the 16pt and 32pt sizes macOS asks for, and being a widely
licensed clip-art asset it says nothing about this product.

Seven directions, as self-contained SVGs on Apple's 1024pt grid: an S drawn as a
two-way exchange arrow, a two-currency split tile, two coins, a rebuilt coin, an
exchange ring, and the S mark in glass and light finishes. Currency glyphs are
outlines rather than text, so the files carry no font dependency and open the
same way in Pixelmator, Figma or Illustrator.

Nothing in the asset catalog changes yet — apply_icon.mjs installs a chosen
concept when there is one. It also fixes two things beyond swapping artwork: the
macOS slots currently hold bare full-bleed squares and get rebuilt as the 824pt
rounded tile the Dock expects, and LaunchColor gets repointed at the chosen
icon's own background instead of staying on an indigo picked for the old coin.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NqoQ882LK6CfUkwsXG6xXp
The first glass lens bent a constant-width stroke into an S-ish path and hung two
triangles off it. A drawn S has modulated weight — it swells through the curves
and narrows at the joints — and that modulation is what makes the eye file a
shape as a letter at all. Without it the mark read as a bent pipe wearing
triangles: not a convincing letter, not a convincing symbol.

Six replacements over the same colour field, so the lens shape is the only
variable. Three keep the letter — the drawn S, the same S with its terminals
carried on into arrow points, and the drawn dollar glyph. Three drop it — the
two-arrow swap pair, a closed exchange loop, and the euro sign.

The rim is now built by dilation rather than inset: each sub-path is drawn once
expanded in the rim colour, then the undilated mark is masked over it. Dilating
the parts equals dilating their union, so composite marks get an even rim with no
internal seams. An inset would need a real polygon-offset pass, and feMorphology
cannot do it at all — its structuring element is square, so it erodes a circle
into a diamond.

01-swap and 07-light still carry the old geometry and should be repointed at
whichever shape wins.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NqoQ882LK6CfUkwsXG6xXp
$ is an S struck by a bar; € is a bowl struck by a double bar. Give the S the
euro's double bar and one glyph carries both — and the double bar is an equals
sign, which is what a converter asserts. It names no single currency, which is
the problem the redesign started on, while still reading as the brand's initial.

Where the bars go was decided by measurement, not taste. At mid-height Inter's S
is a solid diagonal band ~380 units wide, so a centred bar vanishes into it and
re-emerges at a different x on each side; the pair then reads as a staircase.
Cutting a clearance through the letter instead keeps the bars continuous, but the
S's stroke runs almost horizontally there, so the clearance takes the middle of
the letter and what survives reads as an O. The left edge, though, is vertical
from y=340 to y=445 and moves only 274..291 across the wider y=305..480 — bars
crossing there come out the same length on both stubs, which is what makes an
equals sign read as one, and is how the euro does it too.

Each bar stops inside the letter's solid stroke, since running further puts a
floating segment in the counter. That cut-off is measured off a rasterised
silhouette so it survives a change of weight or cap.

Also fixes a compositing bug in the glass treatment: the rim layer painted each
sub-path with a semi-transparent gradient, so overlapping sub-paths doubled up
and printed a visible slab across composite marks. The rim is opaque now and the
transparency sits on the group, applied once after compositing.

Ships in all three treatments. Glass carries a wider bar gap than the flat ones
because its rim dilates every edge by 13 units; both leave the same visible slot.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NqoQ882LK6CfUkwsXG6xXp
…at it

The first cut ran the rules in from the left and ended them inside the stroke,
the way the euro does. The euro can: its bowl is a C, so a bar crosses one narrow
vertical stroke and then runs free across the opening. An S has no opening there,
so what showed was two tabs beside a letter — tidy, and asserting nothing.

The rules now cross the waist and come out the far side. The S is a diagonal band
up to 404 units wide at mid-height, so it buries each rule and releases it at a
different x on each side; aligning the rules at their ends is what stops that
reading as a stagger and starts it reading as the letter sitting in front of
them. The letter also drops one weight — Inter's Black S has open bands only at
y 335..395 and y 620..680, where Bold's are 90 units tall rather than 60, giving
a rule more aperture to show through.

Cutting a clearance through the letter was tried too and is worse than either:
the S's stroke runs almost horizontally through that band, so the clearance takes
the middle of the letter and what survives reads as an O.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NqoQ882LK6CfUkwsXG6xXp
Replaces the stock flat-illustration euro coin. That icon named one currency for
an app that converts around 170, and its four stacked layers — rim, inner disc,
shading crescent, highlight stripe — collapsed into an orange smudge at the 16pt
and 32pt sizes macOS asks for in the Dock, Finder sidebar and Cmd-Tab.

Split still names two currencies rather than none, but it is the strongest
small-size performer of everything drawn: once the glyphs have dissolved, two
colour fields meeting on a curve are still a distinct shape.

Generated from concepts/02-split.svg by apply_icon.mjs, which also fixes two
things beyond the artwork. The macOS slots held bare full-bleed squares and are
now the Big Sur tile — an 824pt rounded square centred in the 1024pt canvas with
a drop shadow — so the app stops reading as a pasted screenshot in the Dock. And
LaunchColor moves off the indigo picked for the old coin to the deep teal of the
new icon's lower field, so the splash no longer disagrees with the icon it
precedes.

The S-monogram family explored alongside this is removed; it stays in this
branch's history if it is ever worth revisiting.

Not verified against a real Xcode build — no macOS toolchain in this environment.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NqoQ882LK6CfUkwsXG6xXp
Written two-component to match how 1.2 and 1.3 were set; the three-component
form has been used for patch releases only.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NqoQ882LK6CfUkwsXG6xXp
@semanticdiff-com

semanticdiff-com Bot commented Aug 9, 2026

Copy link
Copy Markdown

Review changes with  SemanticDiff

Changed Files
File Status
  Swiftly/Assets.xcassets/LaunchIcon.imageset/Contents.json  75% smaller
  Swiftly/Assets.xcassets/LaunchColor.colorset/Contents.json  51% smaller
  Swiftly/Assets.xcassets/AppIcon.appiconset/Contents.json  20% smaller
  Media/Icons/.gitignore Unsupported file format
  Media/Icons/README.md Unsupported file format
  Media/Icons/apply_icon.mjs  0% smaller
  Media/Icons/concepts/02-split.svg  0% smaller
  Media/Icons/concepts/03-duo.svg  0% smaller
  Media/Icons/concepts/04-coin.svg  0% smaller
  Media/Icons/concepts/05-ring.svg  0% smaller
  Media/Icons/package-lock.json  0% smaller
  Media/Icons/package.json  0% smaller
  Media/Icons/previews/02-split.png Unsupported file format
  Media/Icons/previews/03-duo.png Unsupported file format
  Media/Icons/previews/04-coin.png Unsupported file format
  Media/Icons/previews/05-ring.png Unsupported file format
  Media/Icons/previews/_contact-sheet.png Unsupported file format
  Swiftly.xcodeproj/project.pbxproj Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon-iOS-1024.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon-macOS-128x128@1x.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon-macOS-128x128@2x.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon-macOS-16x16@1x.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon-macOS-16x16@2x.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon-macOS-256x256@1x.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon-macOS-256x256@2x.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon-macOS-32x32@1x.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon-macOS-32x32@2x.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon-macOS-512x512@1x.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon-macOS-512x512@2x.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing 4.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/Euro Icon 1.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/Euro Icon 2.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/Euro Icon 3.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/Euro Icon 4.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/Euro Icon 5.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/Euro Icon 6.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/Euro Icon 7.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/Euro Icon 8.png Unsupported file format
  Swiftly/Assets.xcassets/AppIcon.appiconset/Euro Icon.png Unsupported file format
  Swiftly/Assets.xcassets/LaunchIcon.imageset/Euro Icon.png Unsupported file format
  Swiftly/Assets.xcassets/LaunchIcon.imageset/LaunchIcon@1x.png Unsupported file format
  Swiftly/Assets.xcassets/LaunchIcon.imageset/LaunchIcon@2x.png Unsupported file format
  Swiftly/Assets.xcassets/LaunchIcon.imageset/LaunchIcon@3x.png Unsupported file format

@fardavide
fardavide enabled auto-merge (squash) August 9, 2026 22:23
@fardavide
fardavide merged commit 038a12b into main Aug 9, 2026
4 checks passed
@fardavide
fardavide deleted the claude/app-icon-alternatives-h4v9xv branch August 9, 2026 22:25
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