The subscription machinery leaves the code — Kanban/Tier excised, StoreKit wiring unwound
The 2026-08-08 one-version ruling (12-editions.md ▸ PIVOT 2026-08-08) carried out: Kanban/Tier/ deleted wholesale (Tier, ProEntitlement, ProProducts, ProStorefront, the never-rendered ProSettingsSection) with TierTests and Configuration.storekit, whose project.yml resource entry and scheme storeKitConfiguration go with it. AppModel loses the entitlement, the currentTier seam, BoardSession.tier, and the purchase flow's reopenOpenBoards (its only caller was the storefront); AppDelegate's launch keeps only the appearance application. The three tests pinning the recorded tier and the reopen are deleted with their subject. The network-client entitlement stays — the sync capability to come needs it regardless — and the HistoryProviding seam stands untouched. 2,686 unit tests green (2,707 minus the 21 that tested what left). Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy
This commit is contained in:
+12
-31
@@ -35,10 +35,11 @@ settings:
|
||||
ENABLE_USER_SCRIPT_SANDBOXING: NO
|
||||
|
||||
# **One app target** (12-editions.md ▸ The target, re-ruled 2026-07-30). Lanework ships as a single
|
||||
# Mac App Store app, `dev.rzen.indie.Kanban`; **Lanework Pro is a subscription inside it**, not a
|
||||
# second binary. The 2026-07-27 two-target split — a `KanbanPro` application target, its scheme, its
|
||||
# bundle id, the `-module-alias Kanban=KanbanPro` test bundle and the twin source files that existed
|
||||
# only because two bundles claimed different UTI ownership — retired wholesale with the collapse.
|
||||
# Mac App Store app, `dev.rzen.indie.Kanban` — **one version, everything in it** (12-editions.md ▸
|
||||
# PIVOT 2026-08-08): there is no edition axis for this file to express. The 2026-07-27 two-target
|
||||
# split — a `KanbanPro` application target, its scheme, its bundle id, the `-module-alias
|
||||
# Kanban=KanbanPro` test bundle and the twin source files that existed only because two bundles
|
||||
# claimed different UTI ownership — retired wholesale with the collapse.
|
||||
#
|
||||
# What that buys this file: no anchors, no per-target exclusion lists, no second copy of the
|
||||
# resources. There is one product, one Info.plist, one entitlements file, one Swift module, and one
|
||||
@@ -67,18 +68,6 @@ targets:
|
||||
- path: CHANGELOG.md
|
||||
type: file
|
||||
buildPhase: resources
|
||||
# The local StoreKit configuration (12-editions.md ▸ Distribution) — the subscription group
|
||||
# "Lanework Pro" and its monthly product, mirroring what App Store Connect declares, so the
|
||||
# Settings Pro section's subscribe/manage/restore flow is exercisable in Xcode without an ASC
|
||||
# product existing yet. Attached to the scheme's run action below.
|
||||
#
|
||||
# **`buildPhase: none`, deliberately.** It is development configuration, not app content: the
|
||||
# scheme reads it, the shipped bundle must never carry it. Listed in the project anyway, for
|
||||
# the same reason `KanbanUITests`' verification documents are — visible where it belongs,
|
||||
# built into nothing.
|
||||
- path: Configuration.storekit
|
||||
type: file
|
||||
buildPhase: none
|
||||
dependencies:
|
||||
- package: Yams
|
||||
- package: swift-markdown
|
||||
@@ -100,11 +89,12 @@ targets:
|
||||
MARKETING_VERSION: "2.0"
|
||||
INFOPLIST_FILE: Kanban/Info.plist
|
||||
# `Kanban/Kanban.entitlements` — sandbox, user-selected files, app-scope bookmarks, and
|
||||
# `com.apple.security.network.client`, which is **declared now and dormant until Pro
|
||||
# ships**: the one binary carries the key, and nothing exercises it until the git
|
||||
# provider's remotes do under an active subscription (12 ▸ The target). No App Group and
|
||||
# no keychain access group — groups exist to share *between* apps, and there is one app,
|
||||
# so app-side state homes in the ordinary sandbox container (`AppStateHome`).
|
||||
# `com.apple.security.network.client`, **declared now and exercised by nothing**: the key
|
||||
# stays because the sync capability to come needs it regardless (12-editions.md ▸ PIVOT
|
||||
# 2026-08-08), and a key added later is a new provisioning profile and a new review
|
||||
# surface. No App Group and no keychain access group — groups exist to share *between*
|
||||
# apps, and there is one app, so app-side state homes in the ordinary sandbox container
|
||||
# (`AppStateHome`).
|
||||
CODE_SIGN_ENTITLEMENTS: Kanban/Kanban.entitlements
|
||||
GENERATE_INFOPLIST_FILE: false
|
||||
SWIFT_STRICT_CONCURRENCY: complete
|
||||
@@ -121,7 +111,7 @@ targets:
|
||||
#
|
||||
# What it deliberately does NOT compile: LiveStore (FSEvents — macOS-only machinery; the phone's
|
||||
# change signal is NSMetadataQuery over the ubiquity container), Git/History (no git support in
|
||||
# the mobile MVP), Tier, and all of `Kanban/UI`. The mobile app's own sources live under
|
||||
# the mobile MVP), and all of `Kanban/UI`. The mobile app's own sources live under
|
||||
# `KanbanMobile/`.
|
||||
#
|
||||
# Boards live in the iCloud Drive container `iCloud.dev.rzen.indie.Kanban` — named after the
|
||||
@@ -281,15 +271,6 @@ schemes:
|
||||
Kanban: all
|
||||
run:
|
||||
config: Debug
|
||||
# StoreKit Testing in Xcode (12-editions.md ▸ Distribution): a ⌘R run resolves
|
||||
# `dev.rzen.indie.kanban.pro.monthly` against the local `Configuration.storekit` instead of
|
||||
# against the App Store, so the Settings Pro section shows a price and its purchase flow
|
||||
# completes on a machine with no App Store Connect product and no sandbox account.
|
||||
#
|
||||
# It changes nothing about a build or an archive — it is a *run action* setting, so `xcodebuild
|
||||
# build`, `xcodebuild test` and `scripts/release.sh` are untouched, and a shipped app resolves
|
||||
# the real product or reports that it cannot reach the App Store.
|
||||
storeKitConfiguration: Configuration.storekit
|
||||
test:
|
||||
config: Debug
|
||||
gatherCoverageData: false
|
||||
|
||||
Reference in New Issue
Block a user