我正在使用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 的功能?
如您所见,当您通过 CLI 将目录发布到 CodePush 服务器时,它会在最终用户执行更新检查/同步时将其全部内容往返到最终用户的设备。也就是说,仅仅因为文件在该更新中并不意味着它不幸可以使用。
你看到的行为实际上是 Image 组件在 React Native 中解析 URI 的方式的限制。如果使用资产系统指定"source"属性(通过require("image.png"(调用(,它将查找相对于当前运行的JS包的文件。这就是 CodePush 允许更新图像的方式,因为只要我们的插件将 "assets" 文件夹放在磁盘上的 JS 捆绑文件旁边,<Image>
组件自然会找到它们。
但是,当您将带有 URI 的对象(如您所做的那样(指定为"source"属性的值时,Image 组件会相对于磁盘上的二进制文件查找该文件,因此,当您更新它们时,它永远不会在 CodePush 放置它的位置查找该文件。
因此,CodePush 仅支持更新通过 require 语法加载的图像。我会确保更新我们的文档以澄清这一点。对于混乱,我们深表歉意!