6

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

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

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

有任何想法吗?我是否误解了 CodePush 的功能?

4

1 回答 1

9

如您所见,当您通过 CLI 将目录发布到 CodePush 服务器时,当终端用户执行更新检查/同步时,它会将目录的全部内容往返传输到终端用户的设备。也就是说,仅仅因为文件在该更新中并不意味着它会很不幸地可用。

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

但是,当您将具有 URI 的对象(如您所做的那样)指定为“源”属性的值时,Image 组件会相对于磁盘上的二进制文件查找该文件,因此它永远不会查找它更新它们时 CodePush 放置它的位置。

因此,CodePush 仅支持更新通过 require 语法加载的图像。我会确保更新我们的文档以澄清这一点。为混乱道歉!

于 2016-02-06T18:36:46.960 回答