React Native ad-hoc包仅单台iPhone启动失败 报bootstrapping failed错误
问题描述
我们遇到了一个特殊情况:我们应用的ad-hoc构建包仅在某一位用户的iPhone 12 Pro Max上启动崩溃,其他使用同型号设备的用户均无此问题。该设备运行iOS 15 Beta(我认为是beta 8版本),但其他运行相同系统版本的设备都可以正常使用。
故障表现为:应用启动后闪屏短暂展示,随即闪退。该事件没有生成对应崩溃日志,但我在系统日志中发现了表明bootstrapping失败的条目,错误信息较为晦涩,我不清楚该从什么方向排查。
由于该应用并非原生应用,而是使用React Native开发,调试难度进一步提升。
查看下方日志中的11:33:43.698190-0400行,有人能给出排查建议吗?我们共有60位测试者,仅这台设备出现该问题。
相关系统日志
default 11:33:43.608231-0400 Spotlight [FBSSystemService][0xe7c9] Sending request to open "com.foo.mobile.thisapp" default 11:33:43.608625-0400 SpringBoard [FBSystemService][0xe7c9] Received request to open "com.foo.mobile.thisapp" from Spotlight:406. default 11:33:43.608738-0400 SpringBoard Received trusted open application request for "com.foo.mobile.thisapp" from <FBApplicationProcess: 0x1084c37e0; application<com.apple.Spotlight>:406(v468)>. default 11:33:43.635600-0400 SpringBoard Executing request: <SBMainWorkspaceTransitionRequest: 0x28344de60; eventLabel: OpenApplication(sceneID:com.foo.mobile.thisapp-default)ForRequester(Spotlight.406); display: Main; source: Spotlight> default 11:33:43.647737-0400 SpringBoard [FBWorkspaceEvent] Executing: <FBWorkspaceEvent: 0x284665a00; OpenApplication(sceneID:com.foo.mobile.thisapp-default)ForRequester(Spotlight.406)> default 11:33:43.649306-0400 SpringBoard Asked to bootstrap a new process with identity: application<com.foo.mobile.thisapp> default 11:33:43.649338-0400 SpringBoard Creating process (sync=true) with identity: application<com.foo.mobile.thisapp> default 11:33:43.649426-0400 SpringBoard Created <FBWorkspace: 0x283194210; application<com.foo.mobile.thisapp>> default 11:33:43.649518-0400 SpringBoard Bootstrapping application<com.foo.mobile.thisapp> with intent foreground-interactive default 11:33:43.650264-0400 SpringBoard [Main] dispatch event: <SBSceneReadySwitcherModifierEvent: 0x284698320; type: SceneReady; appLayout: <SBAppLayout: 0x281e6c080; primary: com.foo.mobile.thisapp:default; environment: main> { configuration = full; environment = main; layoutItems = { primary = <SBDisplayItem: 0x2849d13b0> { type = App; bundleIdentifier = com.foo.mobile.thisapp; uniqueIdentifier = sceneID:com.foo.mobile.thisapp-default; }; } }> default 11:33:43.654268-0400 runningboardd Acquiring assertion targeting application<com.foo.mobile.thisapp> from originator [daemon<com.apple.SpringBoard>:67] with description <RBSAssertionDescriptor| "FBApplicationProcess" ID:34-67-63886 target:application<com.foo.mobile.thisapp> attributes:[ <RBSDomainAttribute| domain:"com.apple.frontboard" name:"Bootstrap-Foreground" sourceEnvironment:"(null)">, <RBSDomainAttribute| domain:"com.apple.frontboard" name:"Visibility" sourceEnvironment:"(null)"> ]> default 11:33:43.654411-0400 runningboardd Assertion 34-67-63886 (target:application<com.foo.mobile.thisapp>) will be created as active default 11:33:43.654645-0400 runningboardd Executing launch request for application<com.foo.mobile.thisapp> (FBApplicationProcess) default 11:33:43.654810-0400 runningboardd Creating and launching job for: application<com.foo.mobile.thisapp> default 11:33:43.654988-0400 runningboardd _mutateContextIfNeeded called for com.foo.mobile.thisapp default 11:33:43.671674-0400 mediaserverd <<<< FigCaptureDisplayLayoutMonitor >>>> -[FigCaptureDisplayLayoutMonitor _updateCurrentLayout:]: <FBSDisplayLayout: 0x1392c2630; displayIdentity: Main> { bounds = {{0, 0}, {428, 926}}; interfaceOrientation = "portrait (1)"; backlightLevel = 100; elements = { <SBSDisplayLayoutElement: 0x13922f140; com.apple.springboard.spotlight; frame: {{0, 0}, {428, 926}}; level: 0; role: embedded>; <SBSDisplayLayoutElement: 0x139270130; sceneID:com.foo.mobile.thisapp-default; bundleID: com.foo.mobile.thisapp; frame: {{0, 0}, {428, 926}}; level: 1; role: primary>; } timestamp = September 2, 2021 at 11:33:43 AM EDT;} default 11:33:43.673667-0400 SpringBoard [Main] dispatch event: <SBTransitionSwitcherModifierEvent: 0x283a3df00; type: MainTransition; transitionID: B611A8E7-B802-4298-8FB7-A9E960141B96; phase: Prepare; animated: YES; fromAppLayout: 0x0; toAppLayout: <SBAppLayout: 0x281e6c080; primary: com.foo.mobile.thisapp:default; environment: main>; fromEnvironmentMode: home-screen; toEnvironmentMode: application; pendingTermination: {( )}; isSpotlightTransition: YES; dosidoTransitionDirection: 0> default 11:33:43.697614-0400 runningboardd Invalidating assertion 34-67-63886 (target:application<com.foo.mobile.thisapp>) from originator [daemon<com.apple.SpringBoard>:67] error 11:33:43.698190-0400 SpringBoard Bootstrapping failed for <FBApplicationProcess: 0x1084e9b50; application<com.foo.mobile.thisapp>:<invalid>> with error: <NSError: 0x28498d350; domain: RBSRequestErrorDomain; code: 5; reason: "Launch failed."> { NSUnderlyingError = <NSError: 0x28498e2e0; domain: NSPOSIXErrorDomain; code: 85>; } default 11:33:43.698318-0400 SpringBoard [application<com.foo.mobile.thisapp>:-1] Now flagged as pending exit for reason: Bootstrap failed default 11:33:43.698349-0400 SpringBoard [application<com.foo.mobile.thisapp>:-1] Connection to remote process was not established.
排查建议
日志核心错误NSPOSIXErrorDomain code:85对应EBADEXEC错误,含义是可执行文件损坏、签名或权限校验不通过,结合仅单设备异常的特性,可以按以下顺序排查:
- 先让该用户卸载现有应用、重启设备后重新安装ad-hoc包,排除安装过程中文件损坏的可能性
- 核对该设备的UDID是否已经正确添加到ad-hoc打包用的描述文件中,漏加UDID、或者描述文件更新后未重新打包都会导致单设备权限异常
- 确认该设备是否开启了特殊的隐私权限限制,或是安装了VPN、企业级管理配置文件,限制了未上架应用的启动
- 检查应用的编译架构是否包含arm64e,iPhone 12 Pro Max默认使用arm64e架构,部分老版本React Native的打包配置可能错误排除了arm64e,导致架构兼容问题
- 以上步骤都无效的话,可以让该用户在Xcode的「设备和模拟器」面板中导出该设备的崩溃日志和系统诊断报告,查看React Native的JS侧初始化阶段是否有未捕获的异常导致进程提前终止
内容的提问来源于stack exchange,提问作者David Nedrow
相关产品推荐
相关产品推荐

