amplify-swift: DataStore is not syncing on watchOS
Describe the bug
I created a small test Xcode project that uses the same code on the phone and the watch. Using DataStore on the phone works for syncing contents of a model (including create, delete, and query). Running this same code on a watch does not sync the data created by the phone.
Attached is the Xcode project.
Steps To Reproduce
* Download the attached AmpWatch.zip file to get the Xcode project
* Expand the zip file
* Create an Amplify app by using the model in AmpWatch/amplify/generated/models
* Setup Amplify in the Xcode project
* Open the Xcode project
* Run the Xcode project on the phone and tap the Create button to create model data
* Tap on the Query button to verify the data
* Run the Xcode project on a watch
* Tap on the Query button and see that the data is not synced
Expected behavior
Data added to DataStore on the phone should be synced to the watch
(see the log output below for the output from the Xcode console)
Amplify Framework Version
2.17.1
Amplify Categories
DataStore
Dependency manager
Swift PM
Swift version
5.8
CLI version
12.2.5
Xcode version
14.3.1 (14E300b)
Relevant log output
Finding on phone start:
finished startSession
start configureAmplify
2023-09-12 15:10:41.992073-0700 AmpWatch[845:171545] [Amplify] Adding plugin: AWSDataStorePlugin.AWSDataStorePlugin)
activationDidCompleteWith
2023-09-12 15:10:41.993580-0700 AmpWatch[845:171922] [WC] Application context data is nil
2023-09-12 15:10:42.034530-0700 AmpWatch[845:171925] [WC] Application context data is nil
2023-09-12 15:10:42.035572-0700 AmpWatch[845:171545] [Amplify] Adding plugin: <AWSAPIPlugin.AWSAPIPlugin: 0x281160e40>)
2023-09-12 15:10:42.035889-0700 AmpWatch[845:171545] [Amplify] Configuring
2023-09-12 15:10:42.035920-0700 AmpWatch[845:171545] [Amplify] Configuration: nil
2023-09-12 15:10:42.046419-0700 AmpWatch[845:171545] [API<AWSAPIPlugin.AWSAPIPlugin: 0x281160e40>] Configure finished
2023-09-12 15:10:42.049353-0700 AmpWatch[845:171545] [Amplify] Successfully initialized Amplify
Successfully initialized Amplify
2023-09-12 15:10:42.136608-0700 AmpWatch[845:171925] [DataStoreSQLiteStorageEngineAdapter] Initializing database connection: /private/var/mobile/Containers/Data/Application/0DB43958-5F2A-43B2-8E76-956E76E74543/Documents/AmpWatch.db
2023-09-12 15:10:42.140249-0700 AmpWatch[845:171925] [DataStoreSQLiteStorageEngineAdapter] Setting up 3 models
2023-09-12 15:10:42.141614-0700 AmpWatch[845:171925] [DataStoreSQLiteStorageEngineAdapter] Setting up 2 models
2023-09-12 15:10:42.146764-0700 AmpWatch[845:171925] [DataStoreSQLiteMutationSyncMetadataMigrationDelegate] Checking MutationSyncMetadata records, SQL: select (select count(1) as count from MutationSyncMetadata) as allRecords,
(select count(1) as count from MutationSyncMetadata where id like '%|%') as newKeys
2023-09-12 15:10:42.147125-0700 AmpWatch[845:171925] [DataStoreSQLiteMutationSyncMetadataMigrationDelegate] No MutationSyncMetadata migration needed.
2023-09-12 15:10:42.190730-0700 AmpWatch[845:171925] [DataStoreRemoteSyncEngine] pauseSubscriptions()
2023-09-12 15:10:42.190791-0700 AmpWatch[845:171925] [DataStoreRemoteSyncEngine] pauseMutations()
2023-09-12 15:10:42.190925-0700 AmpWatch[845:171925] [DataStoreRemoteSyncEngine] clearStateOutgoingMutations(storageAdapter:)
2023-09-12 15:10:42.194194-0700 AmpWatch[845:171925] [DataStoreRemoteSyncEngine] [InitializeSubscription] initializeSubscriptions(api:storageAdapter:)
2023-09-12 15:10:42.198145-0700 AmpWatch[845:171922] [APIRetryableGraphQLSubscriptionOperation<MutationSync<AnyModel>>] [3B10A7F4-1C87-4F52-B3CF-182C71532396] - Try [1/1]
2023-09-12 15:10:42.198239-0700 AmpWatch[845:171920] [APIRetryableGraphQLSubscriptionOperation<MutationSync<AnyModel>>] [FF6865C6-6F04-424D-B763-687C736FA9A4] - Try [1/1]
2023-09-12 15:10:42.198289-0700 AmpWatch[845:171926] [APIRetryableGraphQLSubscriptionOperation<MutationSync<AnyModel>>] [4B67B7E4-34A3-4C91-9F14-D71DA6C2756E] - Try [1/1]
2023-09-12 15:10:42.198684-0700 AmpWatch[845:171925] [DataStoreIncomingAsyncSubscriptionEventToAnyModelMapper] Received subscription: PassthroughSubject
2023-09-12 15:10:42.200351-0700 AmpWatch[845:171925] [DataStoreIncomingAsyncSubscriptionEventToAnyModelMapper] Received subscription: PassthroughSubject
2023-09-12 15:10:42.200525-0700 AmpWatch[845:171928] [APIRetryableGraphQLSubscriptionOperation<MutationSync<AnyModel>>] [EAC052CB-5206-44D3-9C1D-7A9324072A44] - Try [1/1]
2023-09-12 15:10:42.200637-0700 AmpWatch[845:171925] [APIRetryableGraphQLSubscriptionOperation<MutationSync<AnyModel>>] [5B2DC8D0-E481-4E8A-9F9B-BAB92490BD9F] - Try [1/1]
2023-09-12 15:10:42.200728-0700 AmpWatch[845:171925] [APIRetryableGraphQLSubscriptionOperation<MutationSync<AnyModel>>] [5AFD1245-4F71-4C71-90C2-647462DAFAB5] - Try [1/1]
2023-09-12 15:10:42.241077-0700 AmpWatch[845:171926] [RealtimeConnectionProvider] Status: inProgress. Connectivity status: satisfied
2023-09-12 15:10:43.207217-0700 AmpWatch[845:171924] [RealtimeConnectionProvider] WebsocketDidConnect, sending init message
2023-09-12 15:10:43.207405-0700 AmpWatch[845:171924] [RealtimeConnectionProvider] Starting stale connection timer for 300.0s
2023-09-12 15:10:43.301563-0700 AmpWatch[845:171919] [RealtimeConnectionProvider] received connectionAck
2023-09-12 15:10:43.301805-0700 AmpWatch[845:171938] [AppSyncSubscriptionConnection]: Connection connected, start subscription C0CC4C86-8C1A-477C-A21A-69920891037B.
2023-09-12 15:10:43.302052-0700 AmpWatch[845:171938] [AppSyncSubscriptionConnection]: Connection connected, start subscription A9A15C6A-C3E4-40E7-AB46-9A891AEBBFC5.
2023-09-12 15:10:43.302151-0700 AmpWatch[845:171938] [AppSyncSubscriptionConnection]: Connection connected, start subscription 5B57922E-AE9F-4E09-BF9B-2E0A0DF08C7E.
2023-09-12 15:10:43.302211-0700 AmpWatch[845:171938] [AppSyncSubscriptionConnection]: Connection connected, start subscription 041BA65F-38D6-4662-A403-0D57533019C8.
2023-09-12 15:10:43.302261-0700 AmpWatch[845:171938] [AppSyncSubscriptionConnection]: Connection connected, start subscription 7E764E01-B607-4F60-BE75-E7FB8FD5D14E.
2023-09-12 15:10:43.302321-0700 AmpWatch[845:171938] [AppSyncSubscriptionConnection]: Connection connected, start subscription 0875268E-29F3-4BE2-BC36-52D73366D7BD.
2023-09-12 15:10:43.529733-0700 AmpWatch[845:171924] [DataStoreIncomingAsyncSubscriptionEventToAnyModelMapper] connectionState now connected
2023-09-12 15:10:43.716122-0700 AmpWatch[845:171924] [DataStoreIncomingAsyncSubscriptionEventToAnyModelMapper] connectionState now connected
2023-09-12 15:10:43.724304-0700 AmpWatch[845:171924] [DataStoreRemoteSyncEngine] [InitializeSubscription.6] performInitialSync()
2023-09-12 15:10:43.733542-0700 AmpWatch[845:171924] [DataStoreAWSInitialSyncOrchestrator] Beginning initial sync
2023-09-12 15:10:43.738586-0700 AmpWatch[845:171922] [DataStoreInitialSyncOperation] Beginning sync for Test
2023-09-12 15:10:43.746439-0700 AmpWatch[845:171924] [APIRetryableGraphQLOperation<PaginatedList<AnyModel>>] [991A4799-8BEC-4351-8C87-E63774E7FE8A] - Try [1/1]
2023-09-12 15:10:43.749732-0700 AmpWatch[845:171922] [APIAPICategory] Starting query 918DF420-A4E3-4892-B899-51CE867BDEED
2023-09-12 15:10:43.750135-0700 AmpWatch[845:171924] [APIAPICategory] Starting network task for query 918DF420-A4E3-4892-B899-51CE867BDEED
2023-09-12 15:10:44.361134-0700 AmpWatch[845:171925] [APIRetryableGraphQLOperation<PaginatedList<AnyModel>>] [Operation 991A4799-8BEC-4351-8C87-E63774E7FE8A] - Success
2023-09-12 15:10:44.373019-0700 AmpWatch[845:171924] [DataStoreInitialSyncOperation] Beginning sync for User
2023-09-12 15:10:44.373597-0700 AmpWatch[845:171924] [APIRetryableGraphQLOperation<PaginatedList<AnyModel>>] [926FDD04-ABAF-4BB0-822A-2B1EA506B18A] - Try [1/1]
2023-09-12 15:10:44.373703-0700 AmpWatch[845:171924] [APIAPICategory] Starting query 2F2D5A23-0CD9-4FC2-9382-31BAE62E8796
2023-09-12 15:10:44.373874-0700 AmpWatch[845:171924] [APIAPICategory] Starting network task for query 2F2D5A23-0CD9-4FC2-9382-31BAE62E8796
2023-09-12 15:10:44.375380-0700 AmpWatch[845:171938] [DataStoreReconcileAndLocalSaveOperation] total time: 0.0097065s
2023-09-12 15:10:44.779707-0700 AmpWatch[845:171938] [APIRetryableGraphQLOperation<PaginatedList<AnyModel>>] [Operation 926FDD04-ABAF-4BB0-822A-2B1EA506B18A] - Success
2023-09-12 15:10:44.787404-0700 AmpWatch[845:171919] [DataStoreRemoteSyncEngine] Successfully finished sync
2023-09-12 15:10:44.787581-0700 AmpWatch[845:171919] [DataStoreRemoteSyncEngine] activateCloudSubscriptions()
2023-09-12 15:10:44.787782-0700 AmpWatch[845:171924] [DataStoreRemoteSyncEngine] startMutationQueue(api:mutationEventPublisher:reconciliationQueue:)
2023-09-12 15:10:44.790266-0700 AmpWatch[845:171938] [DataStoreReconcileAndLocalSaveOperation] total time: 0.010268209s
2023-09-12 15:10:44.790958-0700 AmpWatch[845:171938] [DataStoreRemoteSyncEngine] RemoteSyncEngine SyncEngineActive
Finding on phone query:
[AmpWatch.User(id: "1FB8A9A0-4484-4A7D-818E-9E75F8D129B2", email: Optional("user0 bytes"), Tests: Optional(Amplify.List<AmpWatch.Test>), createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2023-09-07 21:59:58 +0000)), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2023-09-07 21:59:58 +0000))), AmpWatch.User(id: "FE2BC3EF-1B21-49FB-AB1C-A9F8BBFCDDBB", email: Optional("user2023-09-07 22:00:49 +0000"), Tests: Optional(Amplify.List<AmpWatch.Test>), createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2023-09-07 22:00:49 +0000)), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2023-09-07 22:00:49 +0000))), AmpWatch.User(id: "B56D97B8-AE5F-461E-AE2C-3180458FD94B", email: Optional("user 2023-09-09 18:20:34 +0000"), Tests: Optional(Amplify.List<AmpWatch.Test>), createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2023-09-09 18:20:34 +0000)), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2023-09-09 18:20:34 +0000))), AmpWatch.User(id: "44ce06a8-76ce-4ec8-b69d-bad5aebc1a25", email: Optional("user1"), Tests: Optional(Amplify.List<AmpWatch.Test>), createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2023-09-07 15:11:43 +0000)), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2023-09-07 15:11:43 +0000))), AmpWatch.User(id: "0E1BEF12-D43B-45CB-B118-988D1F75F554", email: Optional("user2"), Tests: Optional(Amplify.List<AmpWatch.Test>), createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2023-09-05 22:42:20 +0000)), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2023-09-05 22:43:22 +0000)))]
Optional("5 users\n\nuser0 bytes\nuser2023-09-07 22:00:49 +0000\nuser 2023-09-09 18:20:34 +0000\nuser1\nuser2\n")
queryUsers success
Finding on watch start;
finished startSession
start configureAmplify
2023-09-12 15:13:53.088041-0700 AmpWatch Watch App[1730:2076092] [Amplify] Adding plugin: AWSDataStorePlugin.AWSDataStorePlugin)
activationDidCompleteWith
2023-09-12 15:13:53.133375-0700 AmpWatch Watch App[1730:2076278] [WC] Application context data is nil
2023-09-12 15:13:53.151555-0700 AmpWatch Watch App[1730:2076092] [Amplify] Adding plugin: <AWSAPIPlugin.AWSAPIPlugin: 0x16e931e0>)
2023-09-12 15:13:53.154775-0700 AmpWatch Watch App[1730:2076092] [Amplify] Configuring
2023-09-12 15:13:53.155043-0700 AmpWatch Watch App[1730:2076092] [Amplify] Configuration: nil
2023-09-12 15:13:53.219520-0700 AmpWatch Watch App[1730:2076092] [API<AWSAPIPlugin.AWSAPIPlugin: 0x16e931e0>] Configure finished
2023-09-12 15:13:53.264712-0700 AmpWatch Watch App[1730:2076092] [Amplify] Successfully initialized Amplify
Successfully initialized Amplify
2023-09-12 15:13:53.444422-0700 AmpWatch Watch App[1730:2076280] [WC] Application context data is nil
2023-09-12 15:13:53.875890-0700 AmpWatch Watch App[1730:2076281] [DataStoreSQLiteStorageEngineAdapter] Initializing database connection: /private/var/mobile/Containers/Data/Application/09FA073E-DA97-47F5-A7A4-885A72A13208/Documents/AmpWatch Watch App.db
2023-09-12 15:13:53.900655-0700 AmpWatch Watch App[1730:2076281] [DataStoreSQLiteStorageEngineAdapter] Setting up 3 models
2023-09-12 15:13:53.912017-0700 AmpWatch Watch App[1730:2076281] [DataStoreSQLiteStorageEngineAdapter] Setting up 2 models
2023-09-12 15:13:53.925019-0700 AmpWatch Watch App[1730:2076281] [DataStoreSQLiteMutationSyncMetadataMigrationDelegate] Checking MutationSyncMetadata records, SQL: select (select count(1) as count from MutationSyncMetadata) as allRecords,
(select count(1) as count from MutationSyncMetadata where id like '%|%') as newKeys
2023-09-12 15:13:53.927256-0700 AmpWatch Watch App[1730:2076281] [DataStoreSQLiteMutationSyncMetadataMigrationDelegate] No MutationSyncMetadata migration needed.
2023-09-12 15:13:54.258310-0700 AmpWatch Watch App[1730:2076281] [DataStoreRemoteSyncEngine] pauseSubscriptions()
2023-09-12 15:13:54.258845-0700 AmpWatch Watch App[1730:2076281] [DataStoreRemoteSyncEngine] pauseMutations()
2023-09-12 15:13:54.260357-0700 AmpWatch Watch App[1730:2076281] [DataStoreRemoteSyncEngine] clearStateOutgoingMutations(storageAdapter:)
2023-09-12 15:13:54.368052-0700 AmpWatch Watch App[1730:2076281] [DataStoreRemoteSyncEngine] [InitializeSubscription] initializeSubscriptions(api:storageAdapter:)
2023-09-12 15:13:54.420338-0700 AmpWatch Watch App[1730:2076281] [DataStoreIncomingAsyncSubscriptionEventToAnyModelMapper] Received subscription: PassthroughSubject
2023-09-12 15:13:54.434068-0700 AmpWatch Watch App[1730:2076281] [DataStoreIncomingAsyncSubscriptionEventToAnyModelMapper] Received subscription: PassthroughSubject
2023-09-12 15:13:54.438724-0700 AmpWatch Watch App[1730:2076293] [APIRetryableGraphQLSubscriptionOperation<MutationSync<AnyModel>>] [060E52A5-ABDC-40A8-AB6B-9F0F3F2CDBA8] - Try [1/1]
2023-09-12 15:13:54.439029-0700 AmpWatch Watch App[1730:2076281] [APIRetryableGraphQLSubscriptionOperation<MutationSync<AnyModel>>] [2B42BD91-C60D-4D79-9731-962A3247C786] - Try [1/1]
2023-09-12 15:13:54.448119-0700 AmpWatch Watch App[1730:2076281] [APIRetryableGraphQLSubscriptionOperation<MutationSync<AnyModel>>] [C522C184-04E1-44A0-985E-887B38DC10F4] - Try [1/1]
2023-09-12 15:13:54.448227-0700 AmpWatch Watch App[1730:2076293] [APIRetryableGraphQLSubscriptionOperation<MutationSync<AnyModel>>] [D9220F74-713F-4DF9-91F4-0CC2C79657EE] - Try [1/1]
2023-09-12 15:13:54.448707-0700 AmpWatch Watch App[1730:2076281] [APIRetryableGraphQLSubscriptionOperation<MutationSync<AnyModel>>] [C5D29EF9-9A1A-4B74-8864-5FE3FD640A52] - Try [1/1]
2023-09-12 15:13:54.463619-0700 AmpWatch Watch App[1730:2076293] [APIRetryableGraphQLSubscriptionOperation<MutationSync<AnyModel>>] [A4F8A998-DA5B-4EAF-9D30-5D178862A83C] - Try [1/1]
2023-09-12 15:13:54.721790-0700 AmpWatch Watch App[1730:2076285] [WC] Application context data is nil
sessionReachabilityDidChange isReachable
true
2023-09-12 15:13:55.047721-0700 AmpWatch Watch App[1730:2076276] [WC] Application context data is nil
2023-09-12 15:13:55.103579-0700 AmpWatch Watch App[1730:2076293] [RealtimeConnectionProvider] Status: inProgress. Connectivity status: unsatisfied
Finding on watch query:
sessionReachabilityDidChange isReachable
true
2023-09-12 15:14:27.844558-0700 AmpWatch Watch App[1730:2076280] [WC] Application context data is nil
2023-09-12 15:14:27.856251-0700 AmpWatch Watch App[1730:2076280] [WC] Application context data is nil
[]
Optional("0 users\n\n")
queryUsers success
Is this a regression?
No
Regression additional context
No response
Platforms
watchOS
OS Version
watchOS 9.6.1
Device
Apple Watch Series 4
Specific to simulators
No response
Additional context
No response
About this issue
- Original URL
- State: closed
- Created 10 months ago
- Comments: 39 (21 by maintainers)
The DataStore fix has been released in https://github.com/aws-amplify/amplify-swift/releases/tag/2.23.0
Hi @gbitaudeau, we have a scheduled release early next week that incorporates this patch. I’ll let you know once it’s completed.
Hi @gbitaudeau, thanks for confirming on your side things are working as expected. I just rebased
lawmicha.disable-subscriptionswith a commit fromlawmicha.int64. If you can please go ahead and refresh your package cache to pick up the latestlawmicha.disable-subscriptionsbranch. We’re planning to do the release tomorrow or the coming Monday.Hey @depthzadmin, @gbitaudeau, please try out
lawmicha.disable-subscriptions(#3368). This branch builds ontop of #3367 which has the changes (and fixes for delete mutation) for Int to Int64 type. It exposes a flag to skip over the subscriptions so to avoid a client timeout mechanism that’s causing a delay in the syncing process.Please keep in mind that I’m working on reviewing this change with the team, so a disclaimer it may change.
Here is the schema.graphql contents:
type User @model @auth(rules: [{allow: public}]) { id: ID! email: String Tests: [Test] @hasMany(indexName: “byUser”, fields: [“id”]) }
type Test @model @auth(rules: [{allow: public}]) { id: ID! test: String userID: ID! @index(name: “byUser”) }