自定义 React Native 项目中不存在捆绑 URL



我正在尝试使现有的iOS应用程序使用React Native,因此我编写了手动桥接两者的代码,而不是使用提供的CLI工具。我希望RCTBundleURLProvider自动检测捆绑服务器的 IP 地址,就像在 CLI 工具生成的应用程序中一样。

最后,当我运行应用程序时:

react-native run-ios
react-native start --> the bundle server doesn't start automatically, which is strange

在模拟器或设备中加载 React Native 捆绑包时,会出现错误不存在捆绑包 URL

做干净的/npm安装/运行反应原生运行ios没有帮助。直接在代码中设置 URL 是有效的,因此这不是防火墙/AppTransportSecurity 问题。

我错过了什么?

AppDelegate.m-RCTBundleURLProvider返回的jsCodeLocation等于null

...
- (void) loadReact:(NSDictionary*) launchOptions {
NSURL *jsCodeLocation;
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
// this WORKS --> jsCodeLocation = [NSURL URLWithString:@"http://xxx.xxx.xxx.xxx:8081/index.bundle?platform=ios"];
NSLog(@"JSCodeLocation:%@",jsCodeLocation); // jsCodeLocation equals null 
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"MyModule"
initialProperties:nil
launchOptions:launchOptions];
UIViewController *vc = [[UIViewController alloc] init];
vc.view = rootView;
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
}
...

RCTBundleURLProvider.m查找一个名为ip.txt的文件,该文件似乎丢失了。

...
- (NSString *)guessPackagerHost
{
static NSString *ipGuess;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSString *ipPath = [[NSBundle mainBundle] pathForResource:@"ip" ofType:@"txt"];
ipGuess = [[NSString stringWithContentsOfFile:ipPath encoding:NSUTF8StringEncoding error:nil]
stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
});
NSString *host = ipGuess ?: @"localhost";
if ([self isPackagerRunning:host]) {
return host;
}
return nil;
}
...

package.json

{
"name": "MyModule",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.0.0",
"react-native": "0.51.0"
},
"devDependencies": {
"babel-jest": "21.2.0",
"babel-preset-react-native": "4.0.0",
"jest": "21.2.1",
"react-test-renderer": "16.0.0"
},
"jest": {
"preset": "react-native"
}
}

我前段时间在 React Native 上打开了一个关于它的问题

以下是一些解决方案:

    • 运行react-native run-ios
    • 出现错误时,请运行npm install
    • 然后再次运行react-native run-ios
  1. NSAllowsLocalNetworking添加到info.plist

  2. 确保主机中有127.0.0.1 localhost

  3. 杀死任何其他进程sudo lsof -i :8081,然后kill -9 <PID>

  4. 删除YOUR_PROJECT/ios/build/然后再次react-native run-ios

我希望这些解决方案之一可以解决您的问题。如果没有,您可以找到有关该问题的更多选项。

我今天遇到了这个"不存在捆绑网址"错误。这对我有用:

  • 打开终端窗口
  • CD 转入 YOUR_PROJECT/iOS
  • 使用 rm -r 构建删除构建文件夹
  • 再次运行反应本机运行-ios

运行以下代码:

killall -9 node
rm -rf ios/build
react-native run-ios

它将打开launchpackager.command,应用程序将安装在iOS模拟器上

相关内容

  • 没有找到相关文章

最新更新