【问题标题】:How to deploy arbitrary resources for React Native with CodePush如何使用 CodePush 为 React Native 部署任意资源
【发布时间】:2016-02-06 17:35:20
【问题描述】:

我正在使用 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 的功能?

【问题讨论】:

    标签: ios react-native code-push


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢乔纳森。你的回答给了我一个想法。如果我可以在运行时确定当前包的路径,我可以构建适当的 URI。但我还有另一个问题。您说“它将往返整个内容”。这是否意味着客户端每次有两个下载包中的所有媒体文件?在您的文档中,您谈到了差异更新。这包括所有资产还是仅包括静态资产。如果是这样,您如何确定脏缓存/更改的文件?
    • 是的,很抱歉,服务器仍会生成差异更新并仅将更改的文件发送给客户端。因此,如果您只更改了一个静态图像并发布了 CodePush,用户只会下载该单个文件,尽管它无法使用。
    • 有没有办法通过API获取当前JS bundle的路径?如果不是,那么这是一个功能请求。然后可以很容易地做例如{ 路径:codePush.getBundlePath(),uri:'assets/images/myImage.jpg' }
    • 它不是文档化的 API,但在 iOS 上,您可以在 Obj-C 中调用 [CodePushPackage getCurrentPackageFolderPath] 来获取最新更新的文件夹,其中包含您更新的资产。不过,我们目前没有将它暴露给 JS,所以你必须自己桥接它。如果有价值的话,我们可以在积压工作中添加一个项目来做到这一点。也许在 GitHub 上打开一个错误?我很想知道您为什么不使用 RN 资产系统来处理您的图像,因为我们目前没有考虑优化对静态图像的支持,所以很高兴知道我们是否错过了一个场景
    • 谢谢。我会给 getCurrentPackageFolderPath 一个镜头。资产的性质更具动态性。它们的 URI 是在运行时从数据生成的。我正在尝试(ab)使用 CodePush 作为一种资产预加载器,直到我有时间构建一个真正动态的预加载器和缓存。
    猜你喜欢
    • 2019-05-06
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多