Adapt Semantic Versioning
rlindner opened this issue · 2 comments
Last week there's been a new version 1.10.0 released which included breaking changes. This violates semantic versioning, a standard you should stick to when releasing a package for SPM.
see https://docs.swift.org/package-manager/PackageDescription/PackageDescription.html:
The version rule requires Swift packages to conform to semantic versioning. To learn more about the semantic versioning standard, visit semver.org.
The problem which arises here is that this update broke every setup where this package was referenced with upToNextMajor
which is unexpected when following semantic versioning.
I would therefore like to encourage you to consider this for future releases.
Hi @rlindner! We actually do our best to maintain backwards compatibility, regardless of SemVer. Our swift-composable-architecture library is pre-1.0 but has maintained source compatibility over all of its releases, with large windows for deprecations to be migrated.
SemVer guidelines are generally taken to mean changes to "source compatibility," of which this Snapshot Testing release has none: we don't believe there are any APIs that have changed that would lead to existing projects not building. We try to be very aware of non-source breaking changes, though, and try to communicate them appropriately. In the case of updates listed under "breaking changes," there are a few categories:
- Bug fixes that may change the output of a snapshot: bug fixes are generally "patch" concerns, but almost always come with behavioral changes. This is actually a big criticism of SemVer, since a patch update that fixes a bug can still break an app when it updates. Please note that snapshots already "break" frequently due to environmental changes: Apple regularly changes how UI renders over OS updates (minor and major), and different devices may output different results. In fact this release comes with a new API that will hopefully provide users with a more stable snapshot suite when run on both Intel and M1 devices.
- Deprecations to tooling we no longer support, i.e. CocoaPods and Carthage, or changes to tooling, i.e. SPM. These tools are ancillary to the library source.
Is there a particular breaking change that you are having issues with or consider source-incompatible?
Also, I'm going to convert this to a discussion since we try to reserve issues for bug tracking.