diff --git a/.github/workflows/package-mdk-bindings.yml b/.github/workflows/package-mdk-bindings.yml index af6908f9..bc7321aa 100644 --- a/.github/workflows/package-mdk-bindings.yml +++ b/.github/workflows/package-mdk-bindings.yml @@ -48,6 +48,17 @@ jobs: - name: Cache Rust dependencies uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 + with: + # Skip target/ caching: published xcframework artifacts must reflect + # the current toolchain. Swatinem keys on Darwin-arm64 + Cargo.lock + # hash + Rust version, none of which change when we bump the macOS + # runner image, so a cache hit would silently restore C-dep object + # files (libsqlite3-sys, secp256k1-sys) compiled against the previous + # runner's iOS SDK. That's exactly what happened on the macos-26 + # pin in #312: cache hit -> stale sdk=18.5 objects -> byte-identical + # libmdk_uniffi.a republished to mdk-swift. The registry/crate-source + # cache is harmless, so leave that on. + cache-targets: false - name: Install just uses: extractions/setup-just@53165ef7e734c5c07cb06b3c8e7b647c5aa16db3 # v4.0.0 diff --git a/crates/mdk-uniffi/CHANGELOG.md b/crates/mdk-uniffi/CHANGELOG.md index 896e2732..b2a01bb9 100644 --- a/crates/mdk-uniffi/CHANGELOG.md +++ b/crates/mdk-uniffi/CHANGELOG.md @@ -40,6 +40,7 @@ ### Fixed +- Swift packaging now rebuilds C dependencies on every push by setting `cache-targets: false` on the `Swatinem/rust-cache` step in `package-swift`. Without this, the previous runner pin (#312) silently re-published byte-identical `libmdk_uniffi.a` archives, because the rust-cache key (`Darwin-arm64` + Cargo.lock hash + Rust version) stayed stable across the runner bump and restored the pre-existing macos-15 `target/` directory, including the already-compiled `libsqlite3-sys` / `secp256k1-sys` object files still tagged `sdk=18.5`. Registry / crate-source caching is unaffected. ([marmot-protocol/mdk-swift#1](https://github.com/marmot-protocol/mdk-swift/issues/1)) - Suppressed R8 minify warnings about missing `java.awt.*` classes referenced by JNA's `Native$AWT` helper. Added `-dontwarn java.awt.**` to the Kotlin consumer ProGuard rules so downstream Android apps with minification enabled no longer fail with `Missing class java.awt.Component` errors. ([#313](https://github.com/marmot-protocol/mdk/pull/313)) - Swift bindings now build on `macos-26` (Xcode 26) so the published xcframework's iOS Simulator slice is compiled against the iOS 26 SDK end-to-end. Previously the runner defaulted to `macos-15-arm64` + Xcode 16.4 (iPhoneSimulator 18.5 SDK), and the resulting archive mixed `sdk=18.5` and `sdk=26.x` objects — which Xcode 26's stricter linker rejected with a misleading "iOS Simulator-arm64 but ... iOS-arm64" platform-mismatch error when consumers built for an iOS 26 simulator target. ([`#312`](https://github.com/marmot-protocol/mdk/pull/312)) - Hardened the Kotlin bindings publishing workflow. The version-tag step now runs only on `v*` tag pushes, refuses to overwrite an existing remote tag (no more `git push --force`), and routes secrets through step `env:` blocks instead of inline expression substitution. Downstream JitPack consumers can now trust that a pinned Kotlin version maps to immutable artifact content. ([#292](https://github.com/marmot-protocol/mdk/pull/292))