Skip to content

Remove deprecated public API before v1.0.0 #421

Description

@leogdion

Before we tag v1.0.0 we should remove the deprecated public API surface so we ship a clean 1.0 without carrying deprecation cruft. A major release is the right (and only clean) time to make these breaking removals.

Deprecated declarations to remove

queryRecords overloads — CloudKitService+Operations+Deprecated.swift

The entire file exists only to house deprecated overloads (it was split out in #383/#384/#385 to stay under the file_length lint limit — see commit 1e41177). Delete the whole file:

  • queryRecords(recordType:filters:sortBy:limit:desiredKeys:database:) -> [RecordInfo]
    • Replacement: queryRecords -> QueryResult (pagination) or queryAllRecords (auto-paginate)
  • queryRecords(recordType:filters:sortBy:limit:desiredKeys:continuationMarker:database:) -> QueryResult
    • Replacement: queryRecords(_:limit:desiredKeys:continuationMarker:database:) — pass a Query value

RecordManaging protocol — RecordManagement/RecordManaging.swift

  • queryRecords(recordType:) async throws -> [RecordInfo] (protocol requirement)
    • Replacement: queryAllRecords or queryRecords -> QueryResult
  • queryAllRecords(recordType:) default implementation (extension) — deprecated because it silently returns one page

CloudKitService: RecordManaging conformance — CloudKitService/CloudKitService+RecordManaging.swift

  • queryRecords(recordType:) async throws -> [RecordInfo] (conformance impl)

Note: removing the protocol requirement may mean reworking or removing RecordManaging itself, since its remaining surface is thin. Decide whether the protocol survives 1.0.

User operations — CloudKitService/CloudKitService+UserOperations.swift

  • fetchCurrentUser() -> UserInfo
    • Replacement: fetchCaller() (Apple deprecated users/current)

Follow-up cleanup

  • Remove tests that exercise the deprecated overloads (e.g. the deprecated-query-overload coverage added in d65ae28).
  • Grep the Examples/ test beds and MistDemo for any remaining call sites.
  • Update CLAUDE.md references (e.g. the fetchCurrentUser() row in the operations table).

Acceptance criteria

  • No @available(*, deprecated) public declarations remain in Sources/MistKit
  • swift build and swift test pass
  • ./Scripts/lint.sh passes

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions