The pasteboard UTType constants become edition twins — Pro stops claiming ownership it doesn't have
Latent since the m7 split: base's Info.plist exports the three family pasteboard types (cards, lanes, clipboard) and Pro's imports them, but the shared constants declared all three UTType(exportedAs:) — a claim of ownership the system checks against the running app's plist. In Pro that claim is false, and the first touch (the clipboard type, via the launch sweep) raised a runtime fault that blocked board loading under the debugger. EditionAbout's twin-file pattern, applied to an initializer: the constants move to Kanban/App/EditionTypes.swift (exportedAs) with a KanbanPro/Edition/EditionTypes.swift twin (importedAs, identifiers verbatim); project.yml excludes base's copy from Pro. Type identity is the string, so payloads cross editions unchanged. Verified: Pro fixture launch opens the board with zero UTI warnings; both suites green; verify-editions 30/30. Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
@@ -3,18 +3,14 @@ import Foundation
|
||||
import UniformTypeIdentifiers
|
||||
|
||||
// MARK: - The drag types
|
||||
|
||||
extension UTType {
|
||||
|
||||
/// A drag carrying board **cards** — live card faces or trash rows (04-interactions.md ▸ Drag
|
||||
/// and drop, ▸ The trash). Declared as an exported type in `Info.plist`, because a system drag
|
||||
/// session is what crosses window boundaries, shows the copy badge, and gives the full-size
|
||||
/// replica preview (DRAG-REORDER.md § Cross-board sessions).
|
||||
static let laneworkCards = UTType(exportedAs: "dev.rzen.indie.kanban.cards")
|
||||
|
||||
/// A drag carrying board **lanes** — the strip's own reorder and the cross-board lane transfer.
|
||||
static let laneworkLanes = UTType(exportedAs: "dev.rzen.indie.kanban.lanes")
|
||||
}
|
||||
//
|
||||
// `UTType.laneworkCards` — a drag carrying board **cards**, live faces or trash rows
|
||||
// (04-interactions.md ▸ Drag and drop, ▸ The trash) — and `.laneworkLanes`, the strip's own reorder
|
||||
// and the cross-board lane transfer. Declared in `Info.plist` beside the clipboard type, because a
|
||||
// system drag session is what crosses window boundaries, shows the copy badge, and gives the
|
||||
// full-size replica preview (DRAG-REORDER.md § Cross-board sessions). The constants themselves live
|
||||
// in `EditionTypes.swift` — base exports the types, Pro imports them, and each edition's twin uses
|
||||
// the initializer its own plist can honor.
|
||||
|
||||
// MARK: - What a drag carries
|
||||
|
||||
|
||||
Reference in New Issue
Block a user