React Native ios 应用程序在 xcode 之外运行时崩溃,并且在 19.88 秒后无法创建场景错误
Posted
技术标签:
【中文标题】React Native ios 应用程序在 xcode 之外运行时崩溃,并且在 19.88 秒后无法创建场景错误【英文标题】:React Native ios app crashes when run outside of xcode with failed to scene-create after 19.88s error 【发布时间】:2017-04-25 16:58:53 【问题描述】:我的 react native 应用程序在 Xcode 之外启动时崩溃,线程 0 的设备日志的崩溃报告中显示以下异常。
Incident Identifier: DB5E0F81-977F-44B0-BD8B-FAAF33F98119
CrashReporter Key: e3b8d0751b47b37db0d7d6fcc5dde46051f8d30c
Hardware Model: iPhone7,1
Process: crashTest [388]
Path: /var/mobile/Containers/Bundle/Application/CE56E818-7288-4A39-8220-16E17158C916/crashTest.app/crashTest
Identifier: org.reactjs.native.example.crashTest
Version: 1 (1.0)
Code Type: ARM-64 (Native)
Parent Process: launchd [1]
Date/Time: 2017-04-25 12:42:30.30 -0400
Launch Time: 2017-04-25 12:42:10.10 -0400
OS Version: ios 9.1 (13B143)
Report Version: 105
Exception Type: 00000020
Exception Codes: 0x000000008badf00d
Exception Note: SIMULATED (this is NOT a crash)
Highlighted by Thread: 0
Application Specific Information:
org.reactjs.native.example.crashTest failed to scene-create after 19.92s (launch took 0.08s of total time limit 20.00s)
Elapsed total CPU time (seconds): 9.230 (user 9.230, system 0.000), 23% CPU
Elapsed application CPU time (seconds): 0.113, 0% CPU
Filtered syslog:
None found
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0:
0 libsystem_kernel.dylib 0x0000000199ff0a7c semaphore_wait_trap + 8
1 libdispatch.dylib 0x0000000199ece614 _dispatch_semaphore_wait_slow + 244
2 CFNetwork 0x0000000184246ac0 CFURLConnectionSendSynchronousRequest + 288
3 CFNetwork 0x000000018426a07c +[NSURLConnection sendSynchronousRequest:returningResponse:error:] + 120
4 crashTest 0x0000000100128858 -[RCTBundleURLProvider isPackagerRunning:] (RCTBundleURLProvider.m:76)
5 crashTest 0x0000000100128b00 -[RCTBundleURLProvider guessPackagerHost] (RCTBundleURLProvider.m:92)
6 crashTest 0x0000000100128d10 -[RCTBundleURLProvider packagerServerHost] (RCTBundleURLProvider.m:106)
7 crashTest 0x0000000100128ed4 -[RCTBundleURLProvider jsBundleURLForBundleRoot:fallbackResource:] (RCTBundleURLProvider.m:123)
8 crashTest 0x000000010006a8cc -[AppDelegate application:didFinishLaunchingWithOptions:] (AppDelegate.m:21)
9 UIKit 0x000000018a0f5324 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 400
10 UIKit 0x000000018a323acc -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2904
11 UIKit 0x000000018a327e0c -[UIApplication _runWithMainScene:transitionContext:completion:] + 1656
12 UIKit 0x000000018a324f50 -[UIApplication workspaceDidEndTransaction:] + 168
13 FrontBoardServices 0x000000018e90b7c4 -[FBSSerialQueue _performNext] + 184
14 FrontBoardServices 0x000000018e90bb44 -[FBSSerialQueue _performNextFromRunLoopSource] + 56
15 CoreFoundation 0x0000000184aa4544 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
16 CoreFoundation 0x0000000184aa3fd8 __CFRunLoopDoSources0 + 540
17 CoreFoundation 0x0000000184aa1cd8 __CFRunLoopRun + 724
18 CoreFoundation 0x00000001849d0ca0 CFRunLoopRunSpecific + 384
19 UIKit 0x000000018a0ee1c8 -[UIApplication _run] + 460
20 UIKit 0x000000018a0e8ffc UIApplicationMain + 204
21 crashTest 0x000000010006ad08 main (main.m:16)
22 libdyld.dylib 0x0000000199eee8b8 start + 4
我了解我的应用启动和显示时间过长。如果我在连接设备的情况下直接从 Xcode 运行,则没有问题(但它确实需要很长时间才能启动)
我正在使用react-native init
生成的默认反应项目进行测试
当我在 Xcode 中构建项目时,我看到以下警告:
[tid:com.facebook.react.javascript][RCTModuleData.mm:220] RCTBridge required dispatch_sync to load RCTDevSettings. This may lead to deadlocks
我是 react-native 的新手,我假设这可能是在某种开发模式下运行,不允许我在不受限制或在不同的网络上启动应用程序?在构建应用程序以在设备上独立运行而无需在 Xcode 中存档应用程序时,我是否缺少需要遵循的特殊说明?
【问题讨论】:
我发布了一个答案,但后来想也许我不理解你的情况。你要传递给jsBundleURLForBundleRoot:fallbackResource:
什么?是本地网址吗?看起来您的同步网络请求卡住了,但“BundleURLForBundleRoot”对我来说听起来像是应用程序包的本地路径。
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName:@"OCRBridgeTest" initialProperties:nil launchOptions:launchOptions];
我只是使用从 ios 文件夹中的 react-native init 创建的样板代码
【参考方案1】:
检查您是否连接到同一个 WiFi 网络。刚吃过这个。
【讨论】:
【参考方案2】:在您的-[AppDelegate application:didFinishLaunchingWithOptions:]
函数中,您正在启动一个同步 网络请求,而该请求似乎花费了太长时间。 iOS 会杀死您的应用,因为它在 20 秒后未能完成启动(具体而言,它未能从 application:didFinishLaunchingWithOptions:
返回)。
【讨论】:
【参考方案3】:我遇到了同样的问题,但没有解决方案,但有一个临时解决方法对我有帮助。我已将其发布在这里 - https://github.com/facebook/react-native/issues/10187,希望更精通 Objective-c 和 url 加载的人能够查看并进行适当的修复。希望这可以帮助。谢谢。
正如 Aaron Golden 所指出的,问题是在加载时从主线程发出一个同步请求,以确定是否可以访问 react 打包程序(运行在同一网络上的远程服务器)。由于我不知道的原因,这可能需要一段时间(如果有人能解释这一点,我将不胜感激),但如果这需要超过 19 秒(大约),苹果会崩溃应用程序。
【讨论】:
以上是关于React Native ios 应用程序在 xcode 之外运行时崩溃,并且在 19.88 秒后无法创建场景错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 lottie-react-native (2.6.1) 时,React native expo 应用程序在 android 上崩溃,但适用于 ios
React-native:如何从 Windows 构建 ios