适用于 iOS 的 react 本机发行包中没有图像

Posted

技术标签:

【中文标题】适用于 iOS 的 react 本机发行包中没有图像【英文标题】:No Images in react native release bundle for iOS 【发布时间】:2017-10-19 16:09:10 【问题描述】:

我对这个问题的解决方案进行了各种研究,但都没有奏效。

ios 上,我正在使用 react-native bundle --dev false --assets-dest ./ios/Bundle --entry-file index.js --platform ios --bundle-output ./ios/Bundle/main.jsbundle 制作发布包

之后,我将包含 assets 目录和 main.jsbundle 的 Bundle 目录添加到我在 XCode 中的项目中。

然后我将 Run 方案更改为使用 Release 配置,并在物理设备上运行项目。

React Native 找到捆绑包,但没有显示任何静态资源。

我正在使用 React Native 0.48

【问题讨论】:

【参考方案1】:

以防其他人有类似的问题,需要一些想法去哪里找..

检查您的 xcode 构建日志并查看您的包是在哪里创建的 大概是这样的

/Users/johnsmith/Library/Developer/Xcode/DerivedData/MyApp-asde14dwefda878/Build/Products/Release-iphonesimulator/MyApp.app

检查并确保main.jsbundleassets/ 都在顶层。 如果不是,则检查您对 bundle 命令的参数(由bundle react native code and images 构建阶段由react-native-xcode.sh 命令调用)默认值应该没问题。你也可以使用set -x打印出更多关于被调用的信息,或者点击show environment variables in build log

假设一切都在正确的位置...然后尝试查看代码真正在哪里寻找图像

import background from "../../assets/background.png"
alert(Image.resolveAssetSource(background).uri);

在文件资源管理器中检查是否可以找到该文件。我的代码正在查找的文件夹是这样的:

/Users/.../Library/Developer/CoreSimulator/Devices/718SDF9995-1123D6-46A8-93DD-830963FC4372/data/Containers/Data/Application/25C8SG9C-2CSA-4891-BDFD-B6B37A3B4022/Library/Application Support/.expo-internal/

在我的情况下,我已经从 expo 中弹出,文件在哈希下,但代码正在寻找它为 ../assets/background.png 它正在使用 expo-asset 来解析发布中的文件(而不是调试中的 Metro),解决方法是添加

../node_modules/expo-updates/scripts/create-manifest-ios.sh

Bundle React Native code and images 构建阶段的末尾并添加 导入“博览会更新” 到我的App.tsx 文件的顶部

另一个想法是添加一个外部图像,看看它是否可以加载。

source=uri:'https://......../...png'

Ios14 图像也存在问题,可以通过更新 react-native 或使用 npx react-native-fix-image 来解决,但这也会影响开发版本

【讨论】:

以上是关于适用于 iOS 的 react 本机发行包中没有图像的主要内容,如果未能解决你的问题,请参考以下文章

iOS 上的 DeviceEventEmitter

适用于 IOS 的摄像机本机扩展

适用于 Android 和 iOS 的 React Native 中的警报功能

IOS中的Facebook登录适用于模拟器,但不适用于安装了本机应用程序的设备

使用 lottie-react-native (2.6.1) 时,React native expo 应用程序在 android 上崩溃,但适用于 ios

适用于 iOS 的 Google Plus API:共享功能 - 在本机对话框共享中触摸“公共”时应用程序崩溃?