Finalize macOS icon appearances and Composer sizing (#426)

This commit is contained in:
Nathan Dane authored and GitHub committed 2026-10-12 18:45:14 -04:00
1 parent 3938e267bb
commit b447adafaa
9 files changed
+106 -123

No files matched your search

+3 -3
View File
@@ -19,13 +19,13 @@ Generated-in-code assets are original and have no file to list:
|---|---|---|---|
| assets/icon.svg | SolidCraft contributors | original macOS adaptation of the code-drawn SolidCraft mark, edited and exported with VectorCraft; Apple HIG and production templates consulted as layout references only | MIT OR Apache-2.0 |
| assets/SolidCraft.icon/icon.json | SolidCraft contributors | approved Icon Composer composition and appearance settings for the original SolidCraft artwork | MIT OR Apache-2.0 |
| assets/SolidCraft.icon/Assets/01-background.svg | SolidCraft contributors | original full-square porcelain background exported from VectorCraft for system masking | MIT OR Apache-2.0 |
| assets/SolidCraft.icon/Assets/02-grid.svg | SolidCraft contributors | original perspective grid with elliptical radial alpha, exported from VectorCraft | MIT OR Apache-2.0 |
| assets/SolidCraft.icon/Assets/03-solid.svg | SolidCraft contributors | original blue CAD solid with white edges clipped to its silhouette, exported from VectorCraft | MIT OR Apache-2.0 |
| assets/SolidCraft.icon/Assets/02-grid-dark.svg | SolidCraft contributors | original blue perspective grid with elliptical radial alpha, exported from VectorCraft for the Dark appearance | MIT OR Apache-2.0 |
| assets/SolidCraft.icon/Assets/03-solid-blue-cutout.svg | SolidCraft contributors | original saturated blue CAD solid with transparent topology cutouts, edited and exported with VectorCraft | MIT OR Apache-2.0 |
| assets/Assets.car | SolidCraft contributors | Apple actool compilation of assets/SolidCraft.icon for macOS; contains original artwork only | MIT OR Apache-2.0 |
| assets/icon.vectorcraft | SolidCraft contributors | editable VectorCraft source for assets/icon.svg, with named face and background layers | MIT OR Apache-2.0 |
| assets/icon.png | SolidCraft contributors | 1024 × 1024 transparent sRGB export of assets/icon.svg from VectorCraft | MIT OR Apache-2.0 |
| assets/icon.icns | SolidCraft contributors | traditional macOS fallback packaged from assets/icon.png by Apple's iconutil | MIT OR Apache-2.0 |
| assets/icon.icns | SolidCraft contributors | macOS fallback compiled by Apple's actool from the approved assets/SolidCraft.icon composition | MIT OR Apache-2.0 |
| assets/icon.iconset/icon_16x16.png | SolidCraft contributors | native sips export from assets/icon.png | MIT OR Apache-2.0 |
| assets/icon.iconset/icon_16x16@2x.png | SolidCraft contributors | native sips export from assets/icon.png | MIT OR Apache-2.0 |
| assets/icon.iconset/icon_32x32.png | SolidCraft contributors | native sips export from assets/icon.png | MIT OR Apache-2.0 |
BIN
View File
Binary file not shown.
+11 -18
View File
@@ -1,9 +1,11 @@
# SolidCraft macOS icon
`SolidCraft.icon/` is the approved Icon Composer source, containing separate
background, grid and solid SVG layers and the owner's appearance settings.
The white edges are clipped to the solid silhouette. Artwork is original and
attributed in `ATTRIBUTION.md`.
grid and solid SVG layers and the owner's appearance settings. The saturated
blue solid has transparent geometry cutouts instead of painted edge lines.
The solid and grid are both scaled to 90%, with separate Default and Dark grid artwork.
Icon Composer supplies the system backdrop and Mono material effects.
Artwork is original and attributed in `ATTRIBUTION.md`.
`Assets.car` is compiled by Apple's `actool` and supplies the layered icon on
macOS 26 and later. It is checked in so the existing release workflow can still
@@ -18,23 +20,14 @@ xcrun actool assets/SolidCraft.icon \
--output-partial-info-plist target/macos-icon/icon-info.plist \
--output-format human-readable-text
cp target/macos-icon/Assets.car assets/Assets.car
cp target/macos-icon/SolidCraft.icns assets/icon.icns
```
`icon.vectorcraft` and `icon.svg` preserve the traditional artwork before
Icon Composer's system material effects. `icon.png` is its transparent 1024 px
VectorCraft export with native rounded corners and optical padding. The
`icon.iconset/` variants and `icon.icns` provide the older-macOS fallback.
After re-exporting the traditional PNG, regenerate them with Apple's tools:
```sh
for s in 16 32 128 256 512; do
sips -z "$s" "$s" assets/icon.png \
--out "assets/icon.iconset/icon_${s}x${s}.png" >/dev/null
sips -z "$((s * 2))" "$((s * 2))" assets/icon.png \
--out "assets/icon.iconset/icon_${s}x${s}@2x.png" >/dev/null
done
iconutil -c icns -o assets/icon.icns assets/icon.iconset
```
`icon.icns` is the older-macOS fallback generated by the same Apple compiler
from the approved composition, retaining its layer sizes and positions.
Regenerate both compiled resources together with the commands above.
`icon.vectorcraft`, `icon.svg`, `icon.png` and `icon.iconset/` retain the earlier
VectorCraft artwork; packaging uses the Icon Composer compilation instead.
Only `packaging/macos/package.sh` consumes these resources. Its existing signed
app/DMG workflow copies the catalog and ICNS into `Contents/Resources`, and
@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024" height="1024" viewBox="0 0 1024 1024">
<defs>
<linearGradient id="linear-gradient-1" x1="512" y1="0" x2="512" y2="1024" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fcfdfe"/>
<stop offset="1" stop-color="#dce3ed"/>
</linearGradient>
</defs>
<title>Untitled-2</title>
<g id="_01_Background" data-name="01 Background">
<path id="Porcelain___legacy_macOS_silhouette" data-name="Porcelain • legacy macOS silhouette" d="M0 0 L1024 0 L1024 1024 L0 1024 Z" fill="url(#linear-gradient-1)"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 683 B

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024" height="1024" viewBox="0 0 1024 1024">
<defs>
<radialGradient id="radial-gradient-1" cx="0" cy="0" r="699.707" gradientTransform="matrix(1 0 0 0.5 512 740.159)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#81ace1"/>
<stop offset="0.3" stop-color="#81ace1" stop-opacity="0.9"/>
<stop offset="0.65" stop-color="#81ace1" stop-opacity="0.35"/>
<stop offset="1" stop-color="#81ace1" stop-opacity="0"/>
</radialGradient>
</defs>
<title>SolidCraft macOS application icon</title>
<g id="Experiment___faint_origin_grid" data-name="Experiment • faint origin grid">
<path id="Grid___elliptical_radial_alpha_beneath_solid" data-name="Grid • elliptical radial alpha beneath solid" d="M-19.692 -364.359 L1043.692 248.564 M-19.692 248.564 L1043.692 -364.359 M-19.692 -250.351 L1043.692 362.572 M-19.692 362.572 L1043.692 -250.351 M-19.692 -136.343 L1043.692 476.58 M-19.692 476.58 L1043.692 -136.343 M-19.692 -22.335 L1043.692 590.588 M-19.692 590.588 L1043.692 -22.335 M-19.692 91.673 L1043.692 704.596 M-19.692 704.596 L1043.692 91.673 M-19.692 205.681 L1043.692 818.604 M-19.692 818.604 L1043.692 205.681 M-19.692 319.689 L1043.692 932.612 M-19.692 932.612 L1043.692 319.689 M-19.692 547.705 L1043.692 1160.628 M-19.692 1160.628 L1043.692 547.705 M-19.692 661.713 L1043.692 1274.636 M-19.692 1274.636 L1043.692 661.713 M-19.692 775.721 L1043.692 1388.644 M-19.692 1388.644 L1043.692 775.721 M-19.692 889.729 L1043.692 1502.652 M-19.692 1502.652 L1043.692 889.729 M-19.692 1003.737 L1043.692 1616.66 M-19.692 1616.66 L1043.692 1003.737 M-19.692 1117.745 L1043.692 1730.668 M-19.692 1730.668 L1043.692 1117.745" fill="none" stroke="url(#radial-gradient-1)" stroke-width="3.2" stroke-miterlimit="10" opacity="0.28"/>
<path id="Origin_axes___shared_elliptical_radial_alpha" data-name="Origin axes • shared elliptical radial alpha" d="M-19.692 433.697 L1043.692 1046.62 M-19.692 1046.62 L1043.692 433.697" fill="none" stroke="url(#radial-gradient-1)" stroke-width="3.6" stroke-miterlimit="10" opacity="0.28"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024" height="1024" viewBox="0 0 1024 1024">
<defs>
<linearGradient id="linear-gradient-1" x1="619.14" y1="179.734" x2="694.687" y2="396.761" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#1d63c6"/>
<stop offset="1" stop-color="#15499e"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="619.14" y1="413.244" x2="790.839" y2="605.547" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#459fff"/>
<stop offset="1" stop-color="#2379e7"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="632.876" y1="399.508" x2="783.971" y2="968.175" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#1b66cf"/>
<stop offset="1" stop-color="#124596"/>
</linearGradient>
<linearGradient id="linear-gradient-4" x1="207.063" y1="303.357" x2="426.837" y2="968.175" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#258df5"/>
<stop offset="1" stop-color="#1461da"/>
</linearGradient>
<linearGradient id="linear-gradient-5" x1="385.63" y1="53.364" x2="522.989" y2="510.769" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#51adff"/>
<stop offset="1" stop-color="#2b83f1"/>
</linearGradient>
</defs>
<title>SolidCraft • blue cutout 36 pt</title>
<g id="Layer_1" data-name="Layer 1">
<path id="Inner___upper_step___36_pt_cutout" data-name="Inner • upper step • 36 pt cutout" d="M547.883 282.66 L709.797 188.211 L709.797 375.985 Z" fill="url(#linear-gradient-1)"/>
<path id="Top___lower_step___36_pt_cutout" data-name="Top • lower step • 36 pt cutout" d="M727.797 593.626 L727.797 407.136 L889.571 500.381 Z" fill="url(#linear-gradient-2)"/>
<path id="Right___milled_recess___36_pt_cutout" data-name="Right • milled recess • 36 pt cutout" d="M530 521.17 L691.797 427.912 L691.797 655.928 L907.594 531.545 L907.594 740.159 L530 957.8 Z" fill="url(#linear-gradient-3)"/>
<path id="Left___stepped_face___36_pt_cutout" data-name="Left • stepped face • 36 pt cutout" d="M116.406 510.769 L116.406 303.529 L494 521.17 L494 957.8 L314.203 854.167 L314.203 624.777 Z" fill="url(#linear-gradient-4)"/>
<path id="Top___extruded_profile___36_pt_cutout" data-name="Top • extruded profile • 36 pt cutout" d="M134.374 272.334 L512 53.364 L691.828 157.015 L476.117 282.846 L673.752 396.761 L512 489.993 Z" fill="url(#linear-gradient-5)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -1,40 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024" height="1024" viewBox="0 0 1024 1024">
<defs>
<linearGradient id="linear-gradient-1" x1="385.63" y1="53.364" x2="522.989" y2="510.769" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#8dc4fc"/>
<stop offset="1" stop-color="#5d9feb"/>
</linearGradient>
<linearGradient id="linear-gradient-2" x1="207.063" y1="303.357" x2="426.837" y2="968.175" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#438feb"/>
<stop offset="1" stop-color="#2b72cf"/>
</linearGradient>
<linearGradient id="linear-gradient-3" x1="632.876" y1="399.508" x2="783.971" y2="968.175" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#2869bd"/>
<stop offset="1" stop-color="#1e4d98"/>
</linearGradient>
<linearGradient id="linear-gradient-4" x1="619.14" y1="413.244" x2="790.839" y2="605.547" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#83baf6"/>
<stop offset="1" stop-color="#5597e6"/>
</linearGradient>
<linearGradient id="linear-gradient-5" x1="619.14" y1="179.734" x2="694.687" y2="396.761" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#306cbc"/>
<stop offset="1" stop-color="#22529c"/>
</linearGradient>
<clipPath id="clip-path-1">
<path d="M512 53.364 L709.797 167.372 L709.797 367.848 L736.547 382.716 L735.255 411.435 L907.594 510.769 L907.594 740.159 L512 968.175 L314.203 854.167 L314.203 624.777 L116.406 510.769 L116.406 282.753 Z"/>
</clipPath>
</defs>
<title>Untitled-2</title>
<g id="_03_Solid" data-name="03 Solid">
<path id="Solid_silhouette" data-name="Solid silhouette" d="M512 53.364 L709.797 167.372 L709.797 396.761 L907.594 510.769 L907.594 740.159 L512 968.175 L314.203 854.167 L314.203 624.777 L116.406 510.769 L116.406 282.753 Z" fill="#2864b8"/>
<path id="Top___extruded_profile" data-name="Top • extruded profile" d="M116.406 282.753 L512 53.364 L709.797 167.372 L512 282.753 L709.797 396.761 L512 510.769 Z" fill="url(#linear-gradient-1)"/>
<path id="Left___stepped_face" data-name="Left • stepped face" d="M116.406 282.753 L512 510.769 L512 968.175 L314.203 854.167 L314.203 624.777 L116.406 510.769 Z" fill="url(#linear-gradient-2)"/>
<path id="Right___milled_recess" data-name="Right • milled recess" d="M512 510.769 L709.797 396.761 L709.797 624.777 L907.594 510.769 L907.594 740.159 L512 968.175 Z" fill="url(#linear-gradient-3)"/>
<path id="Top___lower_step" data-name="Top • lower step" d="M709.797 396.761 L907.594 510.769 L709.797 624.777 Z" fill="url(#linear-gradient-4)"/>
<path id="Inner___upper_step" data-name="Inner • upper step" d="M709.797 167.372 L709.797 396.761 L512 282.753 Z" fill="url(#linear-gradient-5)"/>
<g clip-path="url(#clip-path-1)">
<path id="Cut_edges___original_SolidCraft_topology" data-name="Cut edges • original SolidCraft topology" d="M702.665 155.146 L716.929 179.597 L540.216 282.68 L723.951 388.583 L723.951 600.282 L900.526 498.507 L914.662 523.032 L695.643 649.272 L695.643 421.256 L526.154 518.948 L526.154 968.175 L497.846 968.175 L497.846 518.948 L109.338 295.016 L123.474 270.491 L512 494.433 L681.454 396.761 L483.784 282.827 Z" fill="#edf5ff" opacity="0.88"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

+43 -49
View File
@@ -7,11 +7,18 @@
"glass-specializations" : [
{
"appearance" : "tinted",
"value" : false
"value" : true
}
],
"image-name" : "03-solid.svg",
"name" : "03-solid"
"image-name" : "03-solid-blue-cutout.svg",
"name" : "03-solid-blue-cutout",
"position" : {
"scale" : 0.9,
"translation-in-points" : [
0,
0
]
}
}
],
"name" : "03 Solid",
@@ -28,28 +35,57 @@
{
"layers" : [
{
"blend-mode-specializations" : [
{
"appearance" : "dark",
"value" : "normal"
}
],
"fill" : "none",
"glass-specializations" : [
{
"value" : true
"value" : false
},
{
"appearance" : "dark",
"value" : false
},
{
"appearance" : "tinted",
"value" : false
"value" : true
}
],
"hidden" : false,
"image-name" : "02-grid.svg",
"image-name-specializations" : [
{
"value" : "02-grid.svg"
},
{
"appearance" : "dark",
"value" : "02-grid-dark.svg"
}
],
"name" : "02-grid",
"opacity-specializations" : [
{
"value" : 1
},
{
"appearance" : "dark",
"value" : 1
},
{
"appearance" : "tinted",
"value" : 1
}
]
],
"position" : {
"scale" : 0.9,
"translation-in-points" : [
0,
0
]
}
}
],
"name" : "02 Grid",
@@ -62,48 +98,6 @@
"enabled" : false,
"value" : 0.3
}
},
{
"layers" : [
{
"fill" : "none",
"glass" : false,
"hidden" : false,
"image-name" : "01-background.svg",
"name" : "01-background",
"position-specializations" : [
{
"value" : {
"scale" : 1,
"translation-in-points" : [
0,
0
]
}
},
{
"idiom" : "watchOS",
"value" : {
"scale" : 1.09,
"translation-in-points" : [
0,
0
]
}
}
]
}
],
"name" : "01 Background",
"shadow" : {
"kind" : "none",
"opacity" : 0
},
"specular" : false,
"translucency" : {
"enabled" : false,
"value" : 0.3
}
}
],
"supported-platforms" : {
BIN
View File
Binary file not shown.