使用设备上预先捆绑的文件来反应Native,即使DEV模式

时间:2017-01-18 07:34:17

标签: ios xcode react-native

几天前,当我在设备上从Xcode构建并运行我的react本机应用程序时,我意识到即使我将我的方案设置为Debug,该应用程序仍然是从预先捆绑的文件加载。除此之外,其他一切都像开发者模式。我可以摇动设备和开发人员弹出窗口,在控制台中我得到输出,并对本机也做出反应日志:

  

运行应用程序" XXXXX"与appParams:   {" rootTag":1," initialProps":{}}。 DEV === true,开发级别   警告为ON,性能优化为OFF

因此,当我尝试从开发人员meny重新加载时,它确实重新加载但是带有消息

  

从预先捆绑的文件中加载

我试图删除应用程序,验证调试方案,清理构建,构建并再次运行,没有任何不同的结果。

有没有人知道可能导致这种情况的原因(我在发布计划之前一直在运行应用程序,但从来没有遇到过这个问题),以及我如何能够回到"正常"?

不幸的是我不知道如何重现这个。

  • Xcode:8.2.1
  • React-native:0.40.0

感谢您的时间!

解决

在我的情况下,就像@while1指出有关wifi一样。我的设备和计算机没有连接到同一个wifi。然而,我在我工作的地方找到了一个网络,即使计算机和设备都连接到这个网络,它仍然无法正常工作(可能会以某种方式受到保护?)。 ANyway,当我从iPhone上将我的互联网连接分享到我的电脑时,应用程序终于从我的电脑上加载了数据。所以它确实是iPhone无法连接到我的电脑,因此加载预先捆绑的文件。

8 个答案:

答案 0 :(得分:30)

在本机0.40.0的反应中,React本地尝试自己猜测捆绑位置。请查看以下几点是否有帮助:

  • 确保你的AppDelegate.m有这一行:jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];

  • 检查您的设备,您的Xcode mac在同一个wifi上运行。在IOS内部,本地尝试自己猜测ip。

  • 首先尝试通过命令行运行应用程序,因此开发包装器服务器正在运行,然后通过设备中的xcode运行应用程序。

答案 1 :(得分:12)

所以你的问题就在这里:

更改AppDelegate.m中的代码:

jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; // comment this line

jsCodeLocation = [NSURL URLWithString:@"http://xxx.xxx.x.xx:8081/index.ios.bundle?platform=ios&dev=true"]; //uncomment this line  

干杯:)

答案 2 :(得分:4)

由于我遇到了同样的问题,以上几点对我来说都不起作用。通过执行以下步骤,我使它起作用。

  • 转到xcode->您的项目-> info.plist
  • 在“应用程序传输安全设置”中,选择“允许任意负载”。

它应该解决此问题。

答案 3 :(得分:3)

对于那些连接到同一Wi-Fi,但使用与localhost不同的IP地址(您已在RCTWebSocketExecutor.m中设置)的人:

检查Xcode调试控制台,如果可以找到以下错误:

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
  1. 使用以下答案:https://stackoverflow.com/a/32704702/3979621

  2. 然后使用Codesingh的答案。顺便说一下,我建议使用#ifdef DEBUG指令,如下所示:在构建变体之间切换时,您不必手动更改它:

  3. #ifdef DEBUG
      jsCodeLocation = [NSURL URLWithString:@"http://xxx.xxx.xxx.xxx:8081/index.ios.bundle?platform=ios&dev=true"];
    #else
      jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
    #endif
    

答案 4 :(得分:0)

在我的情况下,它是一个(反应原生)意外的网络设置,所以它是错误的错误的IP。

如果正确检测到您的IP,请检查构建报告

react native docs

答案 5 :(得分:0)

对我来说,我不小心在macOS弹出窗口中单击了Deny(拒绝),而不是Allow(允许),询问是否接受到“节点”的传入网络连接。

打开系统偏好设置->安全和隐私->防火墙->防火墙选项,并找到设置为阻止的节点的行,然后对其进行更正以解决我的问题!

答案 6 :(得分:0)

对我来说,这是在将Mac更新到Mojave之后发生的。事实证明,通过更新,防火墙设置已更改为阻止所有传入连接...谢谢Stian Jensen让我走上检查防火墙的轨道!

我做了什么:

  1. 打开系统偏好设置->安全和隐私->防火墙->防火墙选项
  2. 取消选中“阻止所有传入连接”
  3. 确保列出的连接来自您信任的来源

答案 7 :(得分:0)

首先检查您的互联网连接。应该是一样的。如果没有任何帮助,还需要检查这些步骤。

  • 检查您是否处于与 React Native 相关的构建阶段。

Check if you have in build phases

  • 检查您是否有权在本地加载它 App Transport Security Settings, Allow Arbitrary Loads Exception Domains, localhost, NSExceptionAllowsInsecureHTTPLoads

enter image description here

  • 检查您是否构建了调试版本。 Xcode - 产品 - 方案 - 编辑方案...

enter image description here