Create the app icon and finalize versioning

App identity for both editions: the three-lane glyph
(rectangle.split.3x1.fill) over a gentle gradient - teal for base
Lanework, dark graphite for Lanework Pro - rendered as 1024 masters and
packaged down the full macOS ladder into each target's own iconset,
replacing the borrowed pathfinder icon.

The About window arrives via IndieAbout (0.2.x): icon, copyright,
version/build/date read from the Info.plist that update_build_info.sh
already stamps on every build (CFBundleVersion 160 = git commit count,
BuildDate, BuildHash - verified in the built product), the version line
opening the bundled CHANGELOG.md, and the new ISC LICENSE.md one
document link away. Both files are authored to the Apple
inline-Markdown subset (no # headings, single-line paragraphs) and
bundle into both editions.

CHANGELOG.md replaces its placeholder with the real 2.0 first-release
notes - one sentence per user-facing feature.

The About box is also an edition seam: base's EditionAbout carries the
one-line Pro signpost 12-editions.md allots ("Lanework Pro adds
git-backed board history and sync."), and the Pro target compiles its
own signpost-less twin instead of that file - the no-#if file-level
doctrine applied to a string. README gains the identity bullet.

1649 green on both schemes; verify-editions.sh 26/26.

Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
2026-07-29 12:43:26 -04:00
parent 1c263b9f2e
commit 28ef9eef7e
27 changed files with 119 additions and 1 deletions
+18
View File
@@ -0,0 +1,18 @@
import IndieAbout
/// **Pro's About-box configuration** the twin of base's `Kanban/App/EditionAbout.swift`, which
/// the Pro target excludes (project.yml): same documents, no signpost line. Base's About carries
/// "Lanework Pro adds" because base is where a user discovers Pro exists (12-editions.md
/// Quiet signposts); Pro pointing at itself would be noise, so its copyright falls back to the
/// Info.plist string and the box is one line shorter.
enum EditionAbout {
/// See base's twin for the full story; the two must keep the same shape so `KanbanApp` can
/// read `EditionAbout.configuration` without knowing which edition it is in.
static var configuration: AppInfoConfiguration {
AppInfoConfiguration(
documents: [.license(extension: "md")],
changelogDocument: .changelog()
)
}
}