react-native iOS应用程序在部署后不显示静态资产(图像)

met*_*ite 11 deployment ios react-native

我将所有静态图像放在项目根目录中名为"images"的文件夹中.但是,在我运行以下命令捆绑我的应用程序后,该应用程序可以正常工作,但没有显示图像.

我用来捆绑的命令:

./react-native bundle --minify --entry-file index.ios.js --platform ios --dev false --bundle-output main.jsbundle --assets-dest ./assets
Run Code Online (Sandbox Code Playgroud)

请注意,资源文件夹已创建,它包含我的图像文件夹,所有图像都可以.

你能帮帮忙吗?

Mil*_*lya 19

请先检查XCode控制台日志.你会发现应用程序无法在路径"{project name} .app/assets/resources/.."中找到这些特定的图像资产.

在此输入图像描述

因此,与iOS原生应用程序不同,您需要将图像放在这些固定路径上.让我们将"assets"文件夹添加到"Copy Bundle Resources"中.

第1步: 选择XCode项目 - >构建阶段 - >复制捆绑资源

第2步 在此输入图像描述

第3步 在此输入图像描述

第4步 在此输入图像描述

  • 它现在对我有用。我正在复制“复制捆绑资源”中的“$Project/src/assets”文件夹,而不是“$Project/ios/assets”。这是我的愚蠢错误。非常感谢您提供解决方案。 (2认同)
  • 正如您所说,它对我有用,只需选择 ios 文件夹内的资产文件夹,然后将其添加到复制包资源中。 (2认同)

d-v*_*ine 17

资产目标和mainbundle.js必须位于同一文件夹中.尝试:

./react-native bundle --minify --entry-file index.ios.js --platform ios --dev false --bundle-output ./release/main.jsbundle --assets-dest ./release
Run Code Online (Sandbox Code Playgroud)

无论如何,捆绑器将在那里创建一个资产文件夹.

更新包括以下讨论的信息:

在XCode构建步骤中执行的react-native-xcode.sh脚本将bundle.jsbundle和bundler创建的assets文件夹复制到app包中.如果要手动部署程序包,则需要确保复制这些文件.最简单的方法是将main.jsbundle直接包含到项目中,并创建指向assets文件夹的文件夹链接.确认两者都显示在"构建阶段" - >"复制捆绑资源"中.

  • 好吧终于搞定了.你是对的,因为资产文件夹和main.jsbundle都必须在同一个文件夹中.但是,当我将它们放在默认Images.xcassets所在的同一目录中时,情况有效.我还在将assets文件夹和main.jsbundle添加到项目中时选择了"创建文件夹引用".这样,它们都出现在"Build Phases" - >"Copy Bundle Resources"中,并且都按预期工作.谢谢. (2认同)

Jul*_*kar 14

对于较新版本的 react-native,请使用以下内容:

react-native bundle --minify --entry-file index.js --platform ios --dev false --bundle-output ./ios/main.jsbundle --assets-dest ./ios
Run Code Online (Sandbox Code Playgroud)

您将在文件夹中看到asset文件夹和main.jsbundle文件ios。之后去Xcode-> build phases->copy bundle resources然后添加asset文件夹和main.jsbundle文件。不要忘记点击Copy if needed


kum*_*rth 9

即使您正在使用newer Xcode versionsie12.x或更高版本,本地资源也不会加载。有两种解决方案:

  1. 升级本机版本
  2. 或转到以下文件:
node_modules > react-native > Libraries > Images > RCTUIImageViewAnimated.m search for `if (_currentFrame)`
Run Code Online (Sandbox Code Playgroud)

将以下 else 块添加到 if 块中,如下所示

if (_currentFrame) {
  layer.contentsScale = self.animatedImageScale;
  layer.contents = (__bridge id)_currentFrame.CGImage;
 } else {
  [super displayLayer:layer];
 }
Run Code Online (Sandbox Code Playgroud)

如果它的旧 xcode 你需要添加assetsmain.jsbundleXcode -> build phases -> copy bundle resources

或者

使用库react-native-image-fix 这是链接尝试以下命令:

npm install --save react-native-fix-image
npx react-native-fix-image

Rebuild the project.
Run Code Online (Sandbox Code Playgroud)


Edi*_*Edi 5

对我来说,解决方案是运行命令来构建资产:

npx react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios
Run Code Online (Sandbox Code Playgroud)