如何使用 CodePush 为 React Native 部署任意资源

How to deploy arbitrary resources for React Native with CodePush

我正在使用 CodePush 将 js 包和一些资源部署到我的本机反应 iOS 应用程序。我没有使用 react-native bundler 从我的项目中收集所有静态图像,而是有一个构建步骤,它只是将一个名为“static”的文件夹复制到 release/assets 中。但除了“静态”文件夹之外,我还在 release/assets 中还有其他文件夹,其中包含图像和视频,这些图像和视频通过 uri 在应用程序中动态使用(例如 { uri: 'assets/images/myImage.jpg' })。在 XCode 中构建应用程序时,我只在包中包含资产文件夹。

我从 CodePush 文档中了解到,部署发布文件夹应该会更新我的所有资产。但事实并非如此。

我通过 XCode 下载了 xcappdata,您可以看到,CodePush 下载了所有内容并将其存储在 /Library/Application Support/CodePush/[id]/release 中。但是它仍然没有出现在应用程序中。

有什么想法吗?我是不是误解了CodePush的功能?

如您所见,当您通过 CLI 将目录发布到 CodePush 服务器时,它会在执行更新时将目录的全部内容往返传输到最终用户的设备 check/synchronization。也就是说,不幸的是,一个文件在该更新中并不意味着它可以使用。

您看到的行为实际上是图像组件在 React Native 中解析 URI 的方式的限制。如果您使用资产系统指定 "source" 属性(通过 require("image.png") 调用),它将查找与当前 运行 JS 包相关的文件.这就是 CodePush 允许更新图像的方式,因为只要我们的插件将 "assets" 文件夹放在磁盘上的 JS 包文件旁边,<Image> 组件自然会找到它们。

但是,当您指定一个带有 URI 的对象(正如您所做的那样)作为 "source" 属性 的值时,Image 组件会查找与二进制文件相关的文件磁盘,因此,当您更新它们时,它永远不会在 CodePush 放置它的地方寻找它。

因此,CodePush只支持更新通过require语法加载的图片。我会确保更新我们的文档以澄清这一点。很抱歉造成混淆!