You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native CarPlay应用在手机APP关闭时无法加载JavaScript的问题

React Native CarPlay 离线加载JavaScript问题

我正在使用react-native-carplay库开发带有CarPlay支持的React Native应用。手机APP处于打开状态时,CarPlay界面可正常工作,但关闭手机APP后,CarPlay无法加载JavaScript;目前即使手机APP打开时,CarPlay也无法加载JS,不过这个问题相对容易修复。

我已经尝试遵循相关README指引,但收效甚微。

相关代码片段

AppDelegate.mm(精简合并版)

@implementation AppDelegate

- (BOOL)initAppFromScene:(UISceneConnectionOptions *)connectionOptions {
    if (self.rootView == nil) {
        self.rootViewFactory = [self createRCTRootViewFactory];
        NSDictionary *initProps = [self prepareInitialProps];
        self.rootView = [self.rootViewFactory viewWithModuleName:self.moduleName 
                                              initialProperties:initProps 
                                                  launchOptions:[self connectionOptionsToLaunchOptions:connectionOptions]];
        return YES;
    }
    return NO;
}

// 其他必要方法...

@end

CarSceneDelegate.mm(精简合并版)

@implementation CarSceneDelegate

- (void)templateApplicationScene:(CPTemplateApplicationScene *)templateApplicationScene
    didConnectInterfaceController:(CPInterfaceController *)interfaceController {
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    
    [appDelegate initAppFromScene:nil];
    UIView *carPlayRootView = [appDelegate.rootViewFactory viewWithModuleName:@"CarPlayApp"
                                                            initialProperties:nil
                                                                launchOptions:nil];
    
    UIViewController *rootViewController = appDelegate.createRootViewController;
    [appDelegate setRootView:appDelegate.rootView toRootViewController:rootViewController];
    
    CPWindow *carWindow = templateApplicationScene.carWindow;
    carWindow.rootViewController = rootViewController;
    
    [carPlayRootView setFrame:carWindow.bounds];
    [carWindow addSubview:carPlayRootView];
  
    [RNCarPlay connectWithInterfaceController:interfaceController window:carWindow];
}

// 其他必要方法...

@end

SceneDelegate.mm(精简合并版)

@implementation SceneDelegate

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions
{
    if ([scene isKindOfClass:[UIWindowScene class]])
    {
        AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
        BOOL hasCreatedBridge = [appDelegate initAppFromScene:connectionOptions];
        
        UIViewController *rootViewController = appDelegate.createRootViewController;
        [appDelegate setRootView:appDelegate.rootView toRootViewController:rootViewController];

        UIWindow *window = [[UIWindow alloc] initWithWindowScene:scene];
        window.rootViewController = rootViewController;
        self.window = window;
        appDelegate.window = window;
        [self.window makeKeyAndVisible];

        // 处理启动屏...
    }
}

// 其他必要方法...

@end

JavaScript代码

import { AppRegistry } from "react-native";
import CarCode from "./carplay/CarCode";

AppRegistry.registerComponent("CarPlayApp", () => CarCode);

已尝试的解决方法

  • 在CarPlay场景代理中初始化React Native桥接
  • 为CarPlay创建单独的根视图
  • 确保JavaScript包已加载并执行

核心疑问

尽管进行了这些尝试,当手机APP未运行时,CarPlay界面仍然空白。原生iOS代码似乎正常工作,但JavaScript未被加载或执行。我遗漏了什么才能确保React Native JavaScript代码即使在手机APP关闭时也能在CarPlay中运行?

补充信息

  • React Native版本:75.0
  • react-native-carplay版本:2.4.1-beta.0
  • iOS版本:16.6

内容的提问来源于stack exchange,提问作者LogicalLegend007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:23:12