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

d-v*_*ine 6 ios react-native code-push

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

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

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

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

Jon*_*ter 9

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

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

但是,当您指定一个带有URI(正如您所做)的对象作为"source"属性的值时,Image组件会查找相对于磁盘上二进制文件的该文件,因此,它永远不会查找它更新它们时CodePush放置它的位置.

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