React-Native Offline Bundle - 图像未显示

时间:2016-02-04 10:18:18

标签: ios xcode react-native

我有一个React-Native应用程序,我正试图在发布模式下部署到我的手机。我可以将应用程序捆绑到手机上。数据库,视频和音频资产都在那里,但UI中没有显示图像。

我已完成以下操作以“捆绑”我的应用:

    终端运行react-native bundle --platfrom ios --dev false --entry-file index.ios.js --bundle-output main.jsbundle 中的项目文件夹中的
  1. 将对main.jsbundle文件的引用拖到myapp文件夹
  2. 下的XCode中
  3. 在XCode中,打开AppDelegate.m并取消注释jsCodeLocation = [[NSBundle mainBundle]…
  4. 打开Product > Scheme > Edit Scheme,然后将Build Configuration更改为Release
  5. 在项目导航器下选择myapp,然后: 在TARGETS: myappTests>下Build Phases> Link Binary With Libraries+ 选择Workspace> libReact.aAdd
  6. 当我尝试使用../node_modules/react-native/packager/react-native-xcode.sh中的myapp > targets > myapp > Bundle React Native code and images设置在XCode中编译时,它会失败并显示error code 1

    我已经看过关于这个帖子的LOADS,我已经尝试过了:

    • 检查Run script only when installing - 应用程序然后安装但没有图像
    • source ~/.bash_profile添加到react-native-xcode.sh - 应用构建失败

    任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:17)

当你生成bundle时,也把--assets-dest ./

“react-native bundle --platform ios --assets-dest ./ --dev false --entry-file index.ios.js --bundle-output iOS / main.jsbundle”

它将生成main.jsbundle和Assets文件夹。转到您的Xcode,右键单击添加要投影的文件,并将main.jsbundle文件添加到项目中。同时拖放Assets文件夹并选择按引用创建(注意:不要选择创建组)。

我正在使用反应0.33, main.jsbundle使用资产(小a)文件夹但生成资产(上限A)。我刚刚将生成的文件夹从Assets更改为assets并将其导入xcode并开始工作

答案 1 :(得分:12)

是xcode或文件系统中的图片吗?我在包参数中看不到--assets-dest

react-native bundle  --minify --dev false --assets-dest ./ios --entry-file index.ios.js --platform ios --bundle-output ios/main.jsbundle

还将assets文件夹添加到xcode,就像捆绑包一样。

请注意,只有正确要求才会复制图片资源,请参阅documentation

答案 2 :(得分:0)

在您的Rn项目根目录中运行以下命令:

react-native包--entry-file ='。/ index.js'--bundle-output ='。/ main.jsbundle'--dev = false --platform ='ios'--assets-dest ='。/ ios'

然后在XCode中将文件夹的引用添加到您的项目中。

答案 3 :(得分:0)

对于 ios 14 : 进入这个目录: node_modules/react-native/Libraries/Image 并打开 RCTUIImageViewAnimated.m 然后在这部分添加 else 条件:

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