Cuts 0.3.0 over the eight fixes and two source-incompatible changes already on
`main` from this bug batch. Behaviour is unchanged by this commit; it is the
version bump, the changelog cut and the install instructions.
MINOR rather than PATCH because two public enums gained cases: `Recovery`
gained `verifyBeforeRetry` (#31) and `PaymentResult.cancelled` gained an
associated `transactionID` (#32). Both break an exhaustive `switch` in merchant
code, so the "source-incompatible" heading stays on the Changed section where
those two bullets live.
- `PayCross.podspec` and `PayCrossCore.podspec`: `s.version` 0.2.1 -> 0.3.0.
`PayCross` depends on `PayCrossCore` at the same version through
`#{s.version}`, so it follows automatically.
- `Sources/PayCross/PayCrossAPI.swift`: `PayCrossAPI.version`, the User-Agent
stamp, -> "0.3.0". `Tests/PayCrossUITests/VersionTests.swift` reads both
podspecs and the wire header dynamically and gates this.
- `CHANGELOG.md`: `## [Unreleased]` becomes `## [0.3.0] - 2026-09-04` with a
fresh empty `## [Unreleased]` above it, matching how #21 and #23 cut their
releases. Every bullet is kept and the Added / Changed / Fixed order is
unchanged. Link references gain a `[0.3.0]` tag line and `[Unreleased]` now
compares from `v0.3.0`.
- `README.md`: the install instructions move to `~> 0.3.0` for CocoaPods and
`.upToNextMinor(from: "0.3.0")` for Swift Package Manager.
The README change is the one that is not merely cosmetic, so it is worth being
explicit about. #23 left `~> 0.1` and `from: "0.1.0"` alone as pre-existing
staleness, which was fair while 0.2.1 was a patch release. It is not fair now.
Both of those ranges span every version below 1.0, so a merchant following the
README resolved straight across this source-incompatible boundary and got a
release that does not compile against their existing `switch` statements.
The tighter operators are deliberate rather than just current. `~> 0.3` and
`from: "0.3.0"` would have fixed today's number while leaving the same trap
armed for 0.4.0. This SDK has broken source compatibility on every minor so far
and is expected to keep doing so before 1.0, which is exactly the case
`~> 0.3.0` and `.upToNextMinor` exist for: both stop at the next minor, so a
merchant opts into each break instead of being carried into it by a resolver.
Not bumped: `Tests/PayCrossCoreTests/ApplePayPayloadTests.swift` still builds a
`BrowserInfo` fixture with the literal `"PayCrossSDK-iOS/0.2.0"`. It never reads
`PayCrossAPI.version`; it is an arbitrary string exercising the wire encoder, so
it is not a version assertion. #23 left it for the same reason.
Claude-Session: https://claude.ai/code/session_01ESYanixFjGbbKEGjgYKeDq