├── .github └── workflows │ ├── ci.yml │ └── format.yml ├── .gitignore ├── Cirrus.xcodeproj ├── project.pbxproj └── xcshareddata │ └── xcschemes │ └── Cirrus-Package.xcscheme ├── Example ├── CirrusExample.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── CirrusExample.xcscheme └── CirrusExample │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── CirrusExample.entitlements │ ├── Info.plist │ ├── Models │ └── Bookmark.swift │ ├── Preview Content │ └── Preview Assets.xcassets │ │ └── Contents.json │ ├── SceneDelegate.swift │ ├── State Management │ ├── AppAction.swift │ ├── AppReducer.swift │ ├── AppState.swift │ ├── PersistentStore.swift │ └── Store.swift │ ├── Sync │ └── AppSyncManager.swift │ ├── Test Data │ └── TestURLs.swift │ └── Views │ ├── BookmarkRow.swift │ ├── ContentView.swift │ └── MultipleSelectionRow.swift ├── LICENSE ├── Makefile ├── Package.swift ├── README.md ├── Sources ├── CKRecordCoder │ ├── CKRecordDecoder.swift │ ├── CKRecordEncoder.swift │ ├── CKRecordEncodingError.swift │ ├── CKRecordKeyedDecodingContainer.swift │ ├── CKRecordKeyedEncodingContainer.swift │ ├── CKRecordSingleValueDecoder.swift │ ├── CKRecordSingleValueEncoder.swift │ ├── CloudKitCodable+RecordType.swift │ ├── CloudKitSystemFieldsKeyName.swift │ └── URLTransformer.swift ├── Cirrus │ ├── DeleteRecordContext.swift │ ├── Error+CloudKit.swift │ ├── RecordModifyingContext.swift │ ├── SyncEngine+AccountStatus.swift │ ├── SyncEngine+RecordModification.swift │ ├── SyncEngine+RemoteChangeTracking.swift │ ├── SyncEngine+Subscription.swift │ ├── SyncEngine+Zone.swift │ ├── SyncEngine.swift │ └── UploadRecordContext.swift └── CloudKitCodable │ ├── CloudKitCodable+LastModifiedDate.swift │ └── CloudKitCodable.swift └── Tests └── CKRecordCoderTests ├── CKRecordDecoderTests.swift ├── CKRecordEncoderDecoderRoundTripTests.swift ├── CKRecordEncoderTests.swift └── Mocks ├── Bookmark.swift ├── Numbers.swift ├── ParentChild.swift ├── Person.swift ├── URLModel.swift └── UUIDModel.swift /.github/workflows/ci.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/.github/workflows/ci.yml -------------------------------------------------------------------------------- /.github/workflows/format.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/.github/workflows/format.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/.gitignore -------------------------------------------------------------------------------- /Cirrus.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Cirrus.xcodeproj/project.pbxproj -------------------------------------------------------------------------------- /Cirrus.xcodeproj/xcshareddata/xcschemes/Cirrus-Package.xcscheme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Cirrus.xcodeproj/xcshareddata/xcschemes/Cirrus-Package.xcscheme -------------------------------------------------------------------------------- /Example/CirrusExample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample.xcodeproj/project.pbxproj -------------------------------------------------------------------------------- /Example/CirrusExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata -------------------------------------------------------------------------------- /Example/CirrusExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist -------------------------------------------------------------------------------- /Example/CirrusExample.xcodeproj/xcshareddata/xcschemes/CirrusExample.xcscheme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample.xcodeproj/xcshareddata/xcschemes/CirrusExample.xcscheme -------------------------------------------------------------------------------- /Example/CirrusExample/AppDelegate.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/AppDelegate.swift -------------------------------------------------------------------------------- /Example/CirrusExample/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/Assets.xcassets/AppIcon.appiconset/Contents.json -------------------------------------------------------------------------------- /Example/CirrusExample/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/Assets.xcassets/Contents.json -------------------------------------------------------------------------------- /Example/CirrusExample/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/Base.lproj/LaunchScreen.storyboard -------------------------------------------------------------------------------- /Example/CirrusExample/CirrusExample.entitlements: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/CirrusExample.entitlements -------------------------------------------------------------------------------- /Example/CirrusExample/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/Info.plist -------------------------------------------------------------------------------- /Example/CirrusExample/Models/Bookmark.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/Models/Bookmark.swift -------------------------------------------------------------------------------- /Example/CirrusExample/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/Preview Content/Preview Assets.xcassets/Contents.json -------------------------------------------------------------------------------- /Example/CirrusExample/SceneDelegate.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/SceneDelegate.swift -------------------------------------------------------------------------------- /Example/CirrusExample/State Management/AppAction.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/State Management/AppAction.swift -------------------------------------------------------------------------------- /Example/CirrusExample/State Management/AppReducer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/State Management/AppReducer.swift -------------------------------------------------------------------------------- /Example/CirrusExample/State Management/AppState.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/State Management/AppState.swift -------------------------------------------------------------------------------- /Example/CirrusExample/State Management/PersistentStore.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/State Management/PersistentStore.swift -------------------------------------------------------------------------------- /Example/CirrusExample/State Management/Store.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/State Management/Store.swift -------------------------------------------------------------------------------- /Example/CirrusExample/Sync/AppSyncManager.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/Sync/AppSyncManager.swift -------------------------------------------------------------------------------- /Example/CirrusExample/Test Data/TestURLs.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/Test Data/TestURLs.swift -------------------------------------------------------------------------------- /Example/CirrusExample/Views/BookmarkRow.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/Views/BookmarkRow.swift -------------------------------------------------------------------------------- /Example/CirrusExample/Views/ContentView.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/Views/ContentView.swift -------------------------------------------------------------------------------- /Example/CirrusExample/Views/MultipleSelectionRow.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Example/CirrusExample/Views/MultipleSelectionRow.swift -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/LICENSE -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Makefile -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Package.swift -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/README.md -------------------------------------------------------------------------------- /Sources/CKRecordCoder/CKRecordDecoder.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/CKRecordCoder/CKRecordDecoder.swift -------------------------------------------------------------------------------- /Sources/CKRecordCoder/CKRecordEncoder.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/CKRecordCoder/CKRecordEncoder.swift -------------------------------------------------------------------------------- /Sources/CKRecordCoder/CKRecordEncodingError.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/CKRecordCoder/CKRecordEncodingError.swift -------------------------------------------------------------------------------- /Sources/CKRecordCoder/CKRecordKeyedDecodingContainer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/CKRecordCoder/CKRecordKeyedDecodingContainer.swift -------------------------------------------------------------------------------- /Sources/CKRecordCoder/CKRecordKeyedEncodingContainer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/CKRecordCoder/CKRecordKeyedEncodingContainer.swift -------------------------------------------------------------------------------- /Sources/CKRecordCoder/CKRecordSingleValueDecoder.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/CKRecordCoder/CKRecordSingleValueDecoder.swift -------------------------------------------------------------------------------- /Sources/CKRecordCoder/CKRecordSingleValueEncoder.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/CKRecordCoder/CKRecordSingleValueEncoder.swift -------------------------------------------------------------------------------- /Sources/CKRecordCoder/CloudKitCodable+RecordType.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/CKRecordCoder/CloudKitCodable+RecordType.swift -------------------------------------------------------------------------------- /Sources/CKRecordCoder/CloudKitSystemFieldsKeyName.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/CKRecordCoder/CloudKitSystemFieldsKeyName.swift -------------------------------------------------------------------------------- /Sources/CKRecordCoder/URLTransformer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/CKRecordCoder/URLTransformer.swift -------------------------------------------------------------------------------- /Sources/Cirrus/DeleteRecordContext.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/Cirrus/DeleteRecordContext.swift -------------------------------------------------------------------------------- /Sources/Cirrus/Error+CloudKit.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/Cirrus/Error+CloudKit.swift -------------------------------------------------------------------------------- /Sources/Cirrus/RecordModifyingContext.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/Cirrus/RecordModifyingContext.swift -------------------------------------------------------------------------------- /Sources/Cirrus/SyncEngine+AccountStatus.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/Cirrus/SyncEngine+AccountStatus.swift -------------------------------------------------------------------------------- /Sources/Cirrus/SyncEngine+RecordModification.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/Cirrus/SyncEngine+RecordModification.swift -------------------------------------------------------------------------------- /Sources/Cirrus/SyncEngine+RemoteChangeTracking.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/Cirrus/SyncEngine+RemoteChangeTracking.swift -------------------------------------------------------------------------------- /Sources/Cirrus/SyncEngine+Subscription.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/Cirrus/SyncEngine+Subscription.swift -------------------------------------------------------------------------------- /Sources/Cirrus/SyncEngine+Zone.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/Cirrus/SyncEngine+Zone.swift -------------------------------------------------------------------------------- /Sources/Cirrus/SyncEngine.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/Cirrus/SyncEngine.swift -------------------------------------------------------------------------------- /Sources/Cirrus/UploadRecordContext.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/Cirrus/UploadRecordContext.swift -------------------------------------------------------------------------------- /Sources/CloudKitCodable/CloudKitCodable+LastModifiedDate.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/CloudKitCodable/CloudKitCodable+LastModifiedDate.swift -------------------------------------------------------------------------------- /Sources/CloudKitCodable/CloudKitCodable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Sources/CloudKitCodable/CloudKitCodable.swift -------------------------------------------------------------------------------- /Tests/CKRecordCoderTests/CKRecordDecoderTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Tests/CKRecordCoderTests/CKRecordDecoderTests.swift -------------------------------------------------------------------------------- /Tests/CKRecordCoderTests/CKRecordEncoderDecoderRoundTripTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Tests/CKRecordCoderTests/CKRecordEncoderDecoderRoundTripTests.swift -------------------------------------------------------------------------------- /Tests/CKRecordCoderTests/CKRecordEncoderTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Tests/CKRecordCoderTests/CKRecordEncoderTests.swift -------------------------------------------------------------------------------- /Tests/CKRecordCoderTests/Mocks/Bookmark.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Tests/CKRecordCoderTests/Mocks/Bookmark.swift -------------------------------------------------------------------------------- /Tests/CKRecordCoderTests/Mocks/Numbers.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Tests/CKRecordCoderTests/Mocks/Numbers.swift -------------------------------------------------------------------------------- /Tests/CKRecordCoderTests/Mocks/ParentChild.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Tests/CKRecordCoderTests/Mocks/ParentChild.swift -------------------------------------------------------------------------------- /Tests/CKRecordCoderTests/Mocks/Person.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Tests/CKRecordCoderTests/Mocks/Person.swift -------------------------------------------------------------------------------- /Tests/CKRecordCoderTests/Mocks/URLModel.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Tests/CKRecordCoderTests/Mocks/URLModel.swift -------------------------------------------------------------------------------- /Tests/CKRecordCoderTests/Mocks/UUIDModel.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayhickey/Cirrus/HEAD/Tests/CKRecordCoderTests/Mocks/UUIDModel.swift --------------------------------------------------------------------------------