将 iOS 中的 AsyncStorage 与 Apple Watch 反应原生应用

Posted

技术标签:

【中文标题】将 iOS 中的 AsyncStorage 与 Apple Watch 反应原生应用【英文标题】:Share AsyncStorage from iOS react native app with Apple Watch 【发布时间】:2018-01-13 02:32:10 【问题描述】:

我正在开发带有 react native 的主应用和带有 Swift 的 Apple Watch。

主应用(react native)使用 AsyncStorage 存储一些值,然后将其用作显示列表的获取的参数。

运行模拟器后发现里面有manifest.json

~/Library/Developer/CoreSimulator/Devices/D10E869B-040B-446F-9B8B-754F111442EC/data/Containers/Data/Application/AC837AFE-312B-4861-906D-EC9EEE7D029B/Document s/RCTAsyncLocalStorage_V1

里面有数据。

我需要在 Xcode 中访问 Apple Watch 中的这些值,以完成与 ios 应用程序相同的工作。我如何访问这些数据?

【问题讨论】:

如果手机和Watch应用使用同一个Apple用户账户,您可以使用iCloudKit同步应用数据:developer.apple.com/icloud/cloudkit 【参考方案1】:

由于 Apple Watch 应用自 watchOS 2 以来独立于 iOS 应用运行,因此实际上无法直接访问 iPhone 上本地存储的数据 - 您需要在 iOS 和 watchOS 应用之间保持某种形式的通信。

为此而设计的框架称为WatchConnectivity。我看到两种或多或少适合您的情况的解决方案:

每当文件更新时,使用transferFile 将文件从 iOS 设备传输到 Apple Watch。此选项的可行性很大程度上取决于您的文件有多大。 或者您也可以只使用 updateApplicationContext 来传递已经序列化的数据,而不是传输原始 JSON 文件 — 同样,这在很大程度上取决于您的具体需求。

不幸的是,我不知道 WatchConnectivity 应该如何与 ReactNative 一起工作。如果您想更深入地了解这个框架——我强烈建议您观看来自 WWDC 2015 的 amazing video。

【讨论】:

以上是关于将 iOS 中的 AsyncStorage 与 Apple Watch 反应原生应用的主要内容,如果未能解决你的问题,请参考以下文章

使用钩子将 React Context 与 AsyncStorage 结合使用

React Native使用AsyncStorage本地持久化

react-native-fast-app 详解与使用之 AsyncStorage

react-native-easy-app 详解与使用之 AsyncStorage

react-native-easy-app 详解与使用之 AsyncStorage

AsyncStorage 与 Expo.SQLite