Releases: automerge/automerge-repo-swift
0.3.2
What's Changed
- verifying with dependency updates by @heckj in #121
WebSocketProvider
accepts anURLRequest
to connect by @marionauta in #122- cleaning up documentation by @heckj in #123
New Contributors
- @marionauta made their first contribution in #122
Full Changelog: 0.3.1...0.3.2
0.3.1
What's Changed
Primarily, this is about updates to support compilation under Xcode16 beta3 and beta4. There is a minor API change - accessing the state publisher on WebSocket is switching from non-isolated to isolated, as the former was a swift6 concurrency violation that wasn't identified in earlear betas.
- updating imports to be explicitly public for swift6 modes in Xcode 16 by @heckj in #116
- quickfix of public import warning by @heckj in #117
- leaving statePublisher on WebSocketProvider isolated to the actor by @heckj in #119
Full Changelog: 0.3.0...0.3.1
0.3.0
Breaking Changes/New Behavior
- The "when something attempts to sync" is significantly updated with this release. Now when you create, import, or clone a document the repo will attempt to sync to any connected peers, IF the sharepolicy allows it. When you create a document in the repo before connected and then connect, the previous behavior remains (which was to attempt to share the document IF the share policy allows it).
This update also helped resolve some inconsistencies in "when will my doc be sync'd up" questions, which have been fleshed out a bit more thoroughly in the IntegrationTests. - The logic for being disconnected and getting reconnected and re-stablishing fully syncd content is markedly better with @jessegrosjean contribution which watches the network state and reacts to it, attempt to resync and establish on failure and reconnect.
- A nasty bug (#106) that was fixed showed itself when a storage provider was being used - when invoking repo.find(), a repository wouldn't request the document from connected peers, only syncing after changes were made to the document. That's been fixed, and now propogates documents in the same fashion of repo's with no storage providers included.
What's Changed
- Use TaskGroup to wait on network activating or retry timeout, whichever is first by @jessegrosjean in #102
- identified flaky test from PR runs, marking for fixing by @heckj in #103
- ignore sync requests for deleted documents by @heckj in #107
- Updated to support visionOS by @cklokmose in #109
- fix SPI file with proper schema name for Xcodebuild targets by @heckj in #110
- updating and verifying with the latest point release updates by @heckj in #111
- updating Integration tests, and adding explicit example from issue 106 by @heckj in #112
- reproduction of issue 106: no history available when repo.find() is invoked and the repo has a storage provider by @heckj in #113
- updating sync-on-create to obey repository preferences from sharePolicy by @heckj in #114
New Contributors
- @jessegrosjean made their first contribution in #102
- @cklokmose made their first contribution in #109
Full Changelog: 0.2.0...0.3.0
0.2.0
Breaking Changes in the API - in particular, there's now import
instead of create
for when you're trying to load an external document that already has an ID associated with it.
What's Changed
- more comprehensive disconnect state notifications by @heckj in #94
- deduplicates state update events by @heckj in #98
- Max web socket retry config by @heckj in #101
- rename some of the repo API (half of
create
) toimport
by @heckj in #99
Full Changelog: 0.1.1...0.2.0
0.1.1
What's Changed
- sets peered=false on disconnect() by @heckj in #81
- duplicate IDs and repository create by @heckj in #82
- terminate loop and attempt to reconnect if error reading websocket by @heckj in #86
- adds state published to WebSocketNetworkProvider by @heckj in #90
- switch to currentValueSubject to provide an initial value of current … by @heckj in #91
- Find assert failure by @heckj in #93
- resolving apparent hang in repo.find with no active peers by @heckj in #85
Full Changelog: 0.1.0...0.1.1
0.1.0
What's Changed
- remove final warnings due to TaskGroup inferred isolation by @heckj in #59
- docs work by @heckj in #60
- re-exposes CBORCoder and associated documentation by @heckj in #63
- run through and make the log output more consistent for each component by @heckj in #67
- weak self dance to avoid retain loop by @heckj in #68
- slim out the dependencies - removing DistributedTracer and deps by @heckj in #69
- updating to 0.5.13 release of automerge-swift by @heckj in #70
- separates out persistent save trigger from sync trigger on doc updates by @heckj in #71
- Establishing a filtering mechanism to optionally vend loggers by @heckj in #72
- More tracing by @heckj in #74
- adding more tracing detail on failure condition by @heckj in #75
- fix observer to only attempt to save once on a document change notifi… by @heckj in #76
- adding logging messages on throwing of errors by @heckj in #77
- API and doc cleanup by @heckj in #78
Full Changelog: 0.1.0-alpha...0.1.0
0.1.0-alpha
0.1.0-alpha
Initial release
The first release of automerge-repo-swift, a library that provides coordination and synchronization for networking and storage, built in spiration from, and compatibility with, automerge-repo.
This initial release has an initial API set up for the repository that mirrors the structure and functions of its inspiration.
Pluggable storage
While it supports a storage provider, no public storage adapters are currently written.
The test package associated with this library includes an in-memory testing provider.
Pluggable networking
Two networking providers are included, as well as general public code that encapsulates the core of the automerge-repo v1 sync protocol.
- WebSocket - supports an outgoing websocket connection to another peer.
- Peer to Peer - supports incoming and outgoing connections using a TLS-encrypted socket protocol that uses the automerge-repo v1 sync protocol. This is a revised protocol from what was originally created in the demo app MeetingNotes, in that it includes the full protocol definition with CBOR encoded messages.
The test package associated with this library also includes an mock network provider and an in-memory network provider.
The demo app MeetingNotes has been updated to use this project to full vet the flesh out the API and prove functionality. As of this release, that project is operational and fully functional, but maintained in the branch testingARmain until this has a full release and documentation both in this package, and in MeetingNotes demo app, has been updated to reflect all the changes.
Testing
Unit test coverage is roughly 40%, with most of the untested areas being the network providers that are covered in Integration Tests.
In addition to the demo app, this project includes a subdirect IntegrationTests which hosts a separate Swift package that exists to run functional, integration tests to interact with live automerge-repo repositories. It's not currently viable to run these in GitHub Actions CI, but they can be run manually to work the API. The IntegrationTests were explicitly broken out to avoid pulling in a large swath of additional dependencies that I didn't want to burden this repository with.
Documentation
The API documentation has been loosely curated and all the main types provided with abstracts, but additional detail and consistency cleanup is still pending.
What's Changed
- CI by @heckj in #7
- breaking integration tests off into a subpackage by @heckj in #9
- removing @testable import in IntegrationTest by @heckj in #10
- calculating a backoff value for auto-reconnect timing by @heckj in #11
- Peer2peer by @heckj in #12
- reconnect with backoff in websocket by @heckj in #13
- SPI file for swift package index documentation host/links by @heckj in #15
- wraps up Peer to peer by @heckj in #16
- fixing iOS compilation by @heckj in #17
- adds privacy info to express use of UserDefaults by @heckj in #18
- public initializers on error types by @heckj in #19
- adding in a few missed public initializers by @heckj in #20
- making provider configurations public initializers by @heckj in #21
- converting to a synchronous init on P2P config by @heckj in #22
- make an explicit start and stop for listening on Peer2Peer network by @heckj in #23
- exposing publisher for updated information feed for SwiftUI by @heckj in #24
- expand PeerConnection information, and provide a publisher from the peerToPeer provider by @heckj in #25
- externalizing availablePeer for access by @heckj in #26
- exposing AvailablePeer and PeerConnection as identifiable, hashable, … by @heckj in #27
- exposing setPeerName explicitly by @heckj in #28
- remove use of userdefaults from library directly by @heckj in #29
- adding logging, starting browser on listener activation by @heckj in #30
- Morepublish by @heckj in #31
- fixes state update publications on termination of browser and listener by @heckj in #32
- makes repo.peerId nonisolated for synchronous access by @heckj in #33
- clear out availablePeers on terminating browser by @heckj in #34
- Fix incorrectly setting peerId to the same value as name by @heckj in #35
- adding logging to debug data flow in peer to peer connection by @heckj in #37
- exposing connectionState and explicitly checking isReady with timeouts by @heckj in #38
- rename PeerConnection to PeerConnectionInfo by @heckj in #39
- explicit queue for connections by @heckj in #40
- missing error capture, adds additional logging and tracing on connect… by @heckj in #41
- adding configurable timeouts and logging by @heckj in #42
- fixing listener check for determining pre-existing connections by @heckj in #43
- constraining TLS to version 1.2 to allow support for private-shared-keys by @heckj in #44
- expanding accept timeout by @heckj in #45
- removes asyncstream handler for state updates by @heckj in #46
- cleanup cruft now that I've got this working by @heckj in #47
- removing all the actors … by @heckj in #51
- fixes initializer to be non-isolated for peer to peer provider by @heckj in #52
- Pushing more things to be synchronous by @heckj in #54
- expand repo initializers and rework SharePolicy api by @heckj in #55
- assembling peer to peer integration tests - 2 peers by @heckj in #56
- observing docs for changes by @heckj in #57
- fleshing out abstracts, rebuilding curation, and trimming types that … by @heckj in #58
New Contributors
Full Changelog: https://github.com/automerge/automerge-repo-swift/commits/0.1.0-alpha