React Native iOS Release版本停留在旧代码上,但Debug版本运行良好

时间:2019-11-22 09:21:14

标签: ios xcode react-native build

当我尝试从XCode中的Release mode构建我的React Native App时,要检查它,然后再将其投入生产,这会卡在旧代码中。不管我在JS文件中做了什么更改,它都不会做。在“调试”模式下,它不会发生,只是可以正常工作。

示例:

我更改了任何JS文件中的标签(如某些菜单的标题),并且当我使用react-native run-ios或在方案“ Debug”中使用了XCode的“播放”按钮时,该标签将起作用检查。如果相反,我选中“发布”,它将收取我什至不知道的旧版本应用程序的费用,当然哪个版本是不知道的。

我曾尝试投产,但仍然是旧版本。

因此,由于我所做的任何更改,现在我每天都无法上传新版本,发布模式会忽略它。

我尝试生成一个新的main.jsbundle,我已经清理了Shift + CMD + K的版本,并且也没有解决方案重新安装了npm

你有什么主意吗?

编辑:

文件“ AppDelegate.m”与它有关系吗?

这是我的AppDelegate:

#import "AppDelegate.h"

#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
  RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
                                                   moduleName:@"BottomNavigation"
                                            initialProperties:nil];
  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];

  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  UIViewController *rootViewController = [UIViewController new];
  rootViewController.view = rootView;
  self.window.rootViewController = rootViewController;
  [self.window makeKeyAndVisible];
  return YES;
}

- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}

@end

1 个答案:

答案 0 :(得分:0)

我在这里发布: https://stackoverflow.com/a/59029751/8898886

最后我找到了解决方法。

问题是我生成的main.jsbundle放置在错误的位置,该位置同时具有2个main.jsbundle(旧的和损坏的,正确的)。

我在/ ios / ProjectName之外有正确的一个,而在那儿则有旧的。我只需要应用此代码段即可生成一个全新的main.jsbundle

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

,然后获取文件main.jsbundle和资产文件夹,并将它们放在/ ios / ProjectName内

非常感谢您的帮助。