Skip to content

Ensembles 3.0.2

Choose a tag to compare

@drewmccormack drewmccormack released this 11 Jul 01:53

Rebuilds the binary distribution (the 3.0.1 binaries were unusable), adds Mac Catalyst support to it, and fixes a severe CloudKit performance problem with large stores. Binary users on 3.0.1 should update.

  • Fix CloudKit syncs stalling for minutes after an app relaunch, with runaway Library/Caches/CloudKit growth. CloudKitFileSystem persists only the zone change token between launches, not the in-memory directory cache built from it. After a relaunch, priming found a token, fetched only the deltas (into a cache that no longer existed), and left every directory listing to fall back on per-record CKQuerys — and those queries set no desiredKeys, so CloudKit returned complete records, downloading the CKAsset payload of every data file just to list a directory. For a store with gigabytes of external data files, the second sync after every launch stalled at 5% for minutes while CloudKit's cache directory grew to several times the store size. Priming now discards the token and does a full metadata-only refetch whenever the in-memory cache is missing, and the query fallback requests only metadata keys. The first sync after a launch refetches the zone's record metadata (no assets); syncs within a session use delta fetches as before. Ensembles 2 never had this problem because it persisted the whole directory cache; restoring that is a possible future optimization. Reported by Ola Nilsson. (3c1cfee)
  • Fix the unusable 3.0.1 XCFrameworks. The 3.0.1 binaries failed to import with Could not find module 'EnsemblesCloudKit' for target 'arm64-apple-ios'; found: EnsemblesCloudKit (any module, any toolchain). During the 3.0.1 release, a build-script fallback that locates each target's intermediate build products matched with a loose path glob and picked up the core module's object files instead of the target's own — every backend XCFramework shipped containing the wrong static library, with no .swiftinterface files. The discovery now requires the target's own module marker, and a new verification step refuses to package any slice whose library lacks the target's own symbols or whose Swift module lacks a .swiftinterface per architecture. The gate was validated against the released artifacts: 3.0.0 passes, 3.0.1 fails on every slice. (ad6824a)
  • Add Mac Catalyst support to the binary distribution. Every XCFramework now includes an ios-arm64_x86_64-maccatalyst slice. The source always compiled cleanly for Catalyst, but a Catalyst app cannot link a plain macOS slice, so binary consumers could not build for Catalyst at all. (ebc7b0d)