2017-05-21 26 views
0

React Native应自动回退使用脱机捆绑软件,如果它找不到正在运行的打包程序,它将在第一次运行时保存它。这在Running react-native app on iOS device using offline bundle中提及。React Native开发模式应用程序不会回退到物理设备上的脱机捆绑包(ios)

但是,在我的情况下,从WiFi断开手机并启动应用程序后,它只是挂在预先缓存的页面(或页面图像)上,而且通常是最后一个加载的页面(即最后一页当应用程序连接到打包程序时加载的页面)。这是违反直觉的,因为你认为关闭应用后,它不会持续任何本地状态。

我不知道为什么会发生这种情况在我的情况。这是来自我的设备的相关日志跟踪,它在isPackagerRunning中崩溃,似乎正试图对URL进行一些排序请求。它应该甚至试图做到这一点?我可以尝试记录它试图连接到的URL,我想。

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x0000000186eaf260 semaphore_wait_trap + 8 
1 libdispatch.dylib    0x0000000186d9d5e8 _os_semaphore_wait + 24 
2 libdispatch.dylib    0x0000000186d9cca0 _dispatch_semaphore_wait_slow + 140 
3 CFNetwork      0x000000018858eb9c CFURLConnectionSendSynchronousRequest + 284 
4 CFNetwork      0x00000001885bb154 +[NSURLConnection sendSynchronousRequest:returningResponse:error:] + 120 
5 resiShare      0x00000001003d4334 -[RCTBundleURLProvider isPackagerRunning:] (RCTBundleURLProvider.m:76) 
6 resiShare      0x00000001003d45e4 -[RCTBundleURLProvider guessPackagerHost] (RCTBundleURLProvider.m:92) 
7 resiShare      0x00000001003d47f4 -[RCTBundleURLProvider packagerServerHost] (RCTBundleURLProvider.m:106) 
8 resiShare      0x00000001003d49b8 -[RCTBundleURLProvider jsBundleURLForBundleRoot:fallbackResource:] (RCTBundleURLProvider.m:123) 
9 resiShare      0x00000001000cad6c -[AppDelegate application:didFinishLaunchingWithOptions:] (AppDelegate.m:23) 
10 UIKit       0x000000018e0732dc -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 380 
11 UIKit       0x000000018e27f800 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 3452 
12 UIKit       0x000000018e2852a8 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1684 
13 UIKit       0x000000018e299de0 __84-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:]_block_invoke.3151 + 48 
14 UIKit       0x000000018e28253c -[UIApplication workspaceDidEndTransaction:] + 168 
15 FrontBoardServices    0x0000000189a7b884 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 36 
16 FrontBoardServices    0x0000000189a7b6f0 -[FBSSerialQueue _performNext] + 176 
17 FrontBoardServices    0x0000000189a7baa0 -[FBSSerialQueue _performNextFromRunLoopSource] + 56 
18 CoreFoundation     0x0000000187e81424 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24 
19 CoreFoundation     0x0000000187e80d94 __CFRunLoopDoSources0 + 540 
20 CoreFoundation     0x0000000187e7e9a0 __CFRunLoopRun + 744 
21 CoreFoundation     0x0000000187daed94 CFRunLoopRunSpecific + 424 
22 UIKit       0x000000018e06c45c -[UIApplication _run] + 652 
23 UIKit       0x000000018e067130 UIApplicationMain + 208 
24 resiShare      0x00000001000cb1d0 main (main.m:16) 
25 libdyld.dylib     0x0000000186dbd59c start + 4 

回答

1

我已经张贴在这里一个解决方法 - https://github.com/facebook/react-native/issues/10187在希望有人更好地与Objective-C和URL装载人员将看看,并把在适当的修补程序。希望这可以帮助。谢谢。

问题是,在加载时从主线程发出同步请求,以确定是否可以访问反应包装程序(在同一网络上运行的远程服务器)。这可能需要一段时间,因为我的知识之外的原因(如果有人可以对此进行阐述,我会很感激),但如果这需要超过19秒(约),苹果会崩溃应用程序。

0

根据this文章,这是node_modules/react-native/scripts/react-build-xcode.sh脚本的问题。该脚本假定运行Xcode的Mac和运行该应用程序的iOS设备都在同一个(wi-fi?)网络中。正因为如此,同步请求到Mac的http://[mac IP].xip.io:8081/status做可能需要很长的时间来恢复,因为它挂起超过10秒(见RCTBundleURLProvider.misPackagerRunning法)

因此,要解决这个问题,确保MAC和iPhone在同一个网络上。

相关问题