Repository navigation
feat(support): ask for a license on the 30th day of use - #3922
Merged
Merged
Conversation
datlechin
enabled auto-merge (squash)
October 30, 2026 18:33
This was referenced Oct 30, 2026
datlechin
added a commit
that referenced
this pull request
Oct 31, 2026
Brings main's 46 commits, among them the license ask (#3922), the first-query mark (#3886) and the trademark policy (#3887). - AppDelegate: the ask starts after the Team Library sync; main's periodic license validation stays out, since accounts replace it. - MainContentCoordinator+History: Telemetry.queryExecuted() stays; the heartbeat marker #3886 restored is gone with MacAnalyticsProvider. - SupportLinks: the referrer moved to Core/Services on this branch; the ask's case (app-ask) joins it there. - SupportAskCoordinator.shared reads FeatureAccess for the license. - FirstQueryAnalyticsTests checks Telemetry's first-query mark. - Localizable.xcstrings: merged key by key; no key changed on both sides.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
UsageDayCounter): the app counts the distinct local days it is in use, on becoming active and when the date turns while it is active. The count stays in this Mac's defaults and is never sent.SupportAskSchedule,SupportAskCoordinator,SupportAskView): on the 30th day of use without a license, a sheet on the window in use asks once. Buy a License opens the pricing page withref=app-ask; I Use It Personally quiets it for a year; Not Now,Esc, or closing the window, for 90 days. It never shows with a license, in the first five minutes after launch, while any query runs, over another sheet or modal, or on a window other than a connection, data file or welcome window. The schedule is pure, and the coordinator looks again only when a window becomes key, the app becomes active, or the launch quiet period ends, so nothing polls.m16/accountstouches the same Support views: after this merges, its merge ofmainchangesLicenseManager.shared.supportAudiencetoFeatureAccess.shared.supportAudienceinSupportAskCoordinator.shared.docs/monetization-roadmap.md).Screenshots
The ask on the welcome window, on the 30th day of use. A debug build with the quiet period shortened, so the sheet appears without a five-minute wait.
Test plan
UsageDayCounterTests: one count per local day, local midnight rather than UTC, the count survives a new counter.SupportAskScheduleTests: nothing before day 30, never with a license, 90 days after any answer but personal use, a year after it, the launch quiet period and a running query hold the ask.SupportAskCoordinatorTests: the ask shows on day 30 past the quiet period, waits on day 29, during the quiet period and a running query, never with a license or on a utility window, shows on a suffixed connection window, buying opensref=app-askand holds 90 days, personal use holds a year, one ask at a time.SupportLinksTestscovers the newapp-askreferrer.verify.sh test; lint is clean.