Repository navigation
Releases: ercanatay/cybokron-dock-groups
Releases · ercanatay/cybokron-dock-groups
Release list
v0.6.5
[0.6.5] - 2026-10-20
Fixed
- Updates signed by a third party or left ad hoc are rejected when the running copy is Developer ID
signed (codesign --verify --strict -Rwith a Developer ID requirement for the running team and
bundle identifier); the staged DMG signature is verified before mounting. Copies signed ad hoc
(v0.6.2 and earlier) keep accepting any intact signature, so they can still update - CI supply chain: every GitHub Action is pinned to a commit SHA (version in a comment), checkouts
don't persist the token, the release job runs in areleaseenvironment (v*tags only, maintainer
approval), onlycodesignmay use the imported signing key, and a.p12holding more than the
Developer ID Application identity stops the release job - Update and changelog feed overrides are enabled only in development builds: release builds ignore
CYBOKRON_UPDATE_FEED_URL,CYBOKRON_RELEASES_FEED_URL,CYBOKRON_CHANGELOG_FEED_URL,
CYBOKRON_UPDATE_DRY_RUNandCYBOKRON_SIMULATE_SIGN_FAILURE(#if DEBUG) - Release notes rendering takes linear time: HTML comments are removed in one pass instead of with a
lazy regular expression (quadratic on text full of<!--), long list items and code blocks no
longer copy themselves line by line, and notes longer than 250,000 characters are cut with a note - The bundle build number matches the marketing version (major × 10000 + minor × 100 + patch, e.g.
0.6.4 → 604 instead of 1) so LaunchServices resolves the newest installed copy;
scripts/check-version.shchecks it everywhere it's written and in the built app (CI) - Link safety:
cybokrondockgroups://launch/…andhide/…links share one 5-second limit, so only
one group's apps are opened or hidden per 5 seconds whichever group the links name (menus,
shortcuts, Siri and Shortcuts aren't limited); the quit dialog's Quit / Force Quit Apps button is
enabled 0.7 seconds after it appears (Cancel and Escape work at once) - Standalone group agents follow a configuration-change notification's new bundle path only when
it's an.appdirectly in the agents folder with the agent's own bundle identifier (any process
can post the notification) - Backup import refuses files over 5 MB before reading them, and drops app locations that aren't an
absolute path to a.appbundle (an item known only by such a location is left out) - The usage monitor records events only while Most Used is enabled (the setting is checked at every
launch and activation); turning it off keeps the history recorded so far, and turning it back on
records new events. The Settings → Most Used footer says so (new string, English only for now) - GitHub API answers (update checks, Other Versions…, Changelog) must come, after any redirect, from
api.github.com/github.comover HTTPS (or from the host a development override asked) - Links with a user name or password (
https://github.com%2F@evil.example) in release notes show
as plain text, and such a release page address is ignored - Import Settings… keeps the last three
*.pre-import-<time>.jsoncopies instead of only the
latest (ordered by time and counter, collision-safe) - SECURITY.md describes the app's actual network use; README notes that the quarantine workaround
is only for releases before v0.6.3 and how ad hoc signed copies (v0.6.2 and earlier) accept updates
Added
- Settings → Updates → Other Versions… warns before installing a version older than 0.6.5, which
lacks these security fixes (new strings, English only until the next translation pass)
Full Changelog: v0.6.4...v0.6.5
v0.6.4
[0.6.4] - 2026-10-20
Added
- CI staples the app itself before stapling the DMG (fixes 'Notary Ticket Missing' for the bundled app)
Fixed
- Local
UNIVERSAL=1builds no longer fail (or silently use stale debug data) in the App Intents metadata step; the script now looks up the whole-module*-primary.swiftconstvaluesfile and restricts the search to the current configuration
Full Changelog: v0.6.3...v0.6.4
v0.6.3
[0.6.3] - 2026-10-19
Added
- First notarized release: the app is signed with a Developer ID Application certificate
(hardened runtime, secure timestamp), and the universal DMG is Developer ID signed, notarized by
Apple and stapled, so macOS opens it without the “Apple could not verify …” warning. Notarization
was tested locally first: the notarized build passesspctlandstapler validate.
Changed
- Because the signature changes from ad hoc to Developer ID, macOS asks for Accessibility access
once more after updating to this version (System Settings → Privacy & Security → Accessibility);
later Developer ID releases keep it.
Full Changelog: v0.6.2...v0.6.3
v0.6.2
[0.6.2] - 2026-10-19
Fixed
- Release notes security: links in update-window and settings changelog notes are now filtered to https/mailto only; release page URL must be https
- Dock safety: if the Dock's persistent-apps list cannot be read, groups are no longer closed or rewritten; a timestamped backup of the Dock is kept (last 6) before every write, and failed writes keep pending dock additions instead of silently disabling groups
- Safety: clicking a
cybokrondockgroups://quit/...link now shows a confirmation dialog, with a distinct "Force Quit Apps" button for?mode=force - Backup restore/merge now re-adds missing Dock icons for standalone groups instead of disabling them on the next launch
- Downloaded update is verified with
codesign --verify --strict(Developer ID builds also require a matching Team ID; ad-hoc builds still accepted) - Miscellaneous: automatic update checks are skipped while the update window shows an offer or failure; "install picked" while an update is under way warns instead of failing silently; less risky
copyAsidewrite order plus collision-safe filenames; release notes script handles fenced code blocks; diagnostics report redacts the home directory; DMG name matching compares the full version number; localization test now catches mixed positional and non-positional placeholders
Added
- CI release now reproduces the version section from CHANGELOG.md as the release body; a version-consistency check (
scripts/check-version.sh) runs before test and release jobs
Full Changelog: v0.6.1...v0.6.2
v0.6.1
[0.6.1] - 2026-10-19
Added
- Settings → Changelog tab: release notes fetched from GitHub Releases shown as an accordion (latest open by default, Latest/Installed/Pre-release badges), current-version display, manual refresh with cache (works offline from
changelog-cache.json)
Full Changelog: v0.6.0...v0.6.1
v0.6.0
[0.6.0] - 2026-10-19
Added
- 24 new languages: Azerbaijani, German, French, Spanish, Italian, Brazilian Portuguese, Dutch,
Swedish, Polish, Czech, Romanian, Hungarian, Greek, Bulgarian, Ukrainian, Russian, Arabic (RTL),
Farsi (RTL), Hindi, Simplified Chinese, Japanese, Korean, Indonesian, Vietnamese — 463 keys each;
the language picker now offers 26 languages.
Full Changelog: v0.5.9...v0.6.0
v0.5.9
[0.5.9] - 2026-10-18
Changed
- Settings panes in a sidebar: Popup, Shortcuts & Siri, Most Used, Updates and Backup are now
listed in a sidebar on the left (on the right in right-to-left languages), as in System Settings,
instead of a tab bar across the top. The panes keep their width and scroll as before, the window
is still as tall as the screen has room for (at most 640 points), and the pane last shown is
selected again the next time Settings opens.
Full Changelog: v0.5.8...v0.5.9
v0.5.8
[0.5.8] - 2026-10-18
Fixed
- Settings window scrolls on any screen: the Popup, Most Used, Updates and Backup tabs still
sized their form to its full height, so it didn't scroll, its bottom was out of reach and it
covered the tab bar; the Shortcuts tab was taller than its pane. Every tab now fills the pane and
scrolls, the pane is as tall as the screen has room for (at most 640 points), and the window is
kept inside the screen even when its saved position isn't.
Full Changelog: v0.5.7...v0.5.8
v0.5.7
[0.5.7] - 2026-10-18
Fixed
- Scrollable Settings panes: every Settings tab now has the same fixed height and scrolls, instead
of the window growing past the screen (Popup, Updates, Backup, Most Used were cut off).
Added
- Language picker at the top of Settings → Popup: System (the language macOS gives the app,
named in it) or any language the app has a string table for, each named in itself. The choice is
stored inpreferences.json("language":"system"or the code) and applied at launch as the
app's ownAppleLanguages, so it shows after a restart: the section then offers Restart Now,
which also quits the running standalone groups' apps so they start in the new language too.
System removes only the value the app set itself, not one chosen in System Settings. The list of
languages (SupportedLanguages, 26 with their native names) is the one place to update when a
translation is added; the tests check every.lprojfolder has an entry. - Localization framework: the app's user-facing text — menus, popup, group window, Settings,
the update and About windows, alerts and the core's error messages — comes from string tables,
Resources/<language>.lproj/Localizable.strings, with the English text inen.lproj(listed in
docs/l10n-keys.md); a missing translation falls back to English. Both build paths copy every
.lprojfolder into the app, and standalone groups' apps get a copy. No translations yet: the
app is still in English. Siri and Shortcuts texts follow separately.
Full Changelog: v0.5.6...v0.5.7
v0.5.6
[0.5.6] - 2026-10-18
Added
- Other Versions… in Settings → Updates: lists the project's published GitHub releases (no
drafts or prereleases), newest first, with their dates; the running one is marked Current. Each
other release has Install (disabled with "No download" when it has no universal DMG), which
asks first, then downloads, checks and installs it in the update window exactly like an update —
older or newer — and relaunches. When the list can't be loaded (offline, GitHub's rate limit) it
says why, with Try Again and a link to the releases page. - Going back to an older version skips every newer published release (and the one left behind) in
automatic checks, so the app doesn't keep offering what you just left; Check for Updates…
still offers them. Going up from Other Versions… clears the skipped versions. Settings → Updates
shows them ("Skipped newer versions: …", with Clear) or "Back on the latest path".
Changed
update-state.jsonkeeps a list of skipped versions (skippedVersions); the newest is also
written asskippedVersion, the key versions up to 0.5.5 read, so an older version installed
from Other Versions… keeps quiet about the newest release too. The diagnostics report lists them.
Full Changelog: v0.5.5...v0.5.6