Tags: ptrinh/Notiful
Tags
1.1.3: don't mistake phone numbers for OTPs The instant-capture banner path stuffs the whole banner (title+body) into the body field, so a Google Voice missed-call banner like "(484) 466-8855" leaked its "466-8855" tail as a false OTP. The embedded-number guard only caught fully hyphen-chained numbers; a parenthesized/space-separated area code broke the chain. Add phoneRanges() (NANP-style grouping, optional country code / parens) and skip any clean-fallback candidate overlapping a phone number. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1.1.2: clearer auto-copy banner + body-only OTP extraction - Banner now reads "Copied to clipboard" when the code was auto-copied, instead of always "Click to copy". - OTP heuristic scans the message body only. A non-OTP SMS from a 5-digit short-code sender (e.g. Google Voice) no longer has the sender number in the title mistaken for a code. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1.1.1: minimize idle CPU and halve the binary size CPU — idle wakeups eliminated or reduced: - Banner-watcher self-heal is now event-driven (KVO on NSWorkspace.runningApplications, which includes UI agents) instead of a 30-second timer that enumerated every running app - Accessibility-not-granted retry backs off 2s -> 60s instead of waking the process every 2 seconds forever - Fallback scan timer default 15s -> 60s with leeway scaled to the interval; safe because the watcher now re-arms the WAL kqueue itself (brief retries) after a checkpoint instead of relying on the timer - Capture latency unchanged: kqueue remains the real-time path Binary size (universal): 1.94 MB -> 933 KB (-52%): - Build with -Osize and -dead_strip - Strip local/debug symbols before codesign Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Notiful 1.1.0: instant-capture reliability, smarter OTP extraction, S… …wiftUI settings, donation model OTP extraction: - Score each notification field separately (body first) so an SMS short-code sender in the title (e.g. "35127") can never beat the real code in the body - Multilingual OTP keywords (vi, es, pt, fr, de, it, ja, zh, ko, ru, ar, hi, th, …) Reliability / UX: - "Copy Last Code" menu item + Recent Codes submenu (last 5, session-only) - Auto-start the moment Full Disk Access is granted — no relaunch needed - Menu health warning when instant capture is on but Accessibility is missing (the grant is silently revoked whenever the binary is replaced) - Locale-proof banner auto-dismiss: AX close-button subrole first, then localized labels across 16 languages - Notiful's banners auto-remove from Notification Center after 2 minutes; new "hide code in banner" privacy option keeps codes off the lock screen - Progress notification while "Open Notiful's log…" collects the log Settings window rewritten in SwiftUI: - Sources tab: recent-notifications table (timestamps, watched checkmarks), card-style source rows, full per-source editor (all match criteria, custom regex, every action) — nothing requires hand-editing config.json anymore - Settings tab: clipboard auto-clear, banner privacy, default regex with validation, fallback scan interval (applies live; watcher restarts) Performance: - All DB work (copy + SQLite + bplist decode) moved off the main thread - One state.json write per scan instead of per record - Failed scans no longer advance the change stamp (transient errors retry) - Watermark can no longer skip codes in a burst (no fixed row cap) Licensing removed — back to the donation model: - Delete license/trial code, vendor signing tool and LICENSING.md - "Donate ♥…" menu item next to About Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
v1.0.6: notarized Developer ID build; drop --no-quarantine The release is now signed with a Developer ID certificate and notarized + stapled by Apple, so it launches without any Gatekeeper workaround. - Casks: bump to 1.0.6, remove the ad-hoc / --no-quarantine / xattr caveats. - README: install instructions no longer need --no-quarantine or manual quarantine removal. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.0.5: show version on the About screen - Welcome/About now displays a dimmed "Version X.Y.Z" line (read from CFBundleShortVersionString, so it tracks future bumps automatically). - Fix a stale "Configure…" reference to "Sources & advanced settings…". Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.0.4: clearer menu, editable sources, end-user README UX/UI pass based on a usability review: Menu (AppDelegate) - Live status header (watching N sources / paused, last code captured) - "Pause/Resume watching" instead of bare "Disable" - Grouped under a "Settings" section; de-jargoned labels - indentationLevel instead of leading spaces - "Open log" now exports filtered log lines instead of an unfiltered Console - Confirm before hiding the menu bar icon - "Credit" renamed to "About Notiful" Config window (ConfigWindowController) - Plain-language match summaries and add buttons - New Edit… to rename a source / fix its matching text - Confirm before Remove; action buttons disabled until a row is selected - Empty-state guidance on both tables - Multiline command editor Welcome: donation/credit shown only via About, not first-run onboarding. Docs: README restructured for end-users; advanced details collapsed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.0.3: lower idle CPU/wakeups + hardened signing Performance: - scanNew filters by the watermark in SQL, so idle/fallback scans decode ~0 records instead of the newest 50 every tick. - Sparser fallback timers with leeway (poll 2s->15s, banner health 10s->30s) to reduce idle wakeups / improve battery. Signing: - Hard-fail the build on any codesign error + strict-verify, so we can never silently produce an unsigned app (which was resetting FDA/Accessibility). - Strip the post-sign com.apple.FinderInfo xattr that trips --strict. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.0.2: stable self-signed signing, correct identifier, persisted cap… …ture logs - Sign with a stable self-signed identity (scripts/make-signing-cert.sh) so Full Disk Access + Accessibility grants persist across rebuilds, instead of ad-hoc signing which reset them every build. - Fix codesign: strip xattrs before signing so the identifier is correctly com.notiful.app (was falling back to "Notiful"), which had confused TCC. - Log captures at .notice so they persist, and label each as "INSTANT (Accessibility)" vs "database (~5s delay)". Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v1.0.1: instant capture self-heals independent of the menu bar icon The AX banner observer was only re-armed on menu open, so with the menu bar icon hidden it never recovered after the NotificationCenter process restarted. Add a 10s health timer and PID-change detection so instant capture keeps working (and self-heals) whether or not the icon is shown. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PreviousNext