Estamos recibiendo un registro de bloqueo de conexión de iTunes que es un poco extraño.Error de aplicación de iPhone en el lanzamiento
Previamente teníamos problemas con nuestra aplicación que tardaba mucho en volver de ApplicationDidFinishLaunching. Esto fue causado por hacer demasiado trabajo dentro de applicationDidFinishLaunching y excedimos el tiempo de espera de 20 segundos en dispositivos más lentos.
Para solucionar esto, hemos movido todo nuestro código de configuración fuera de ApplicationDidFinishLaunching y lo hemos movido a un controlador de carga secundaria especial. Además de eso, movimos el código de configuración dentro de ese controlador a un hilo separado.
Sin embargo, todavía estamos viendo registros de fallos que dicen que nuestra aplicación no se pudo iniciar a tiempo aunque el registro de fallos muestra una llamada al [UIApplication _reportAppLaunchFinished]
. Para mí, esto indica que la aplicación ha terminado de ejecutarse y que podemos tomar el tiempo que deseamos para ejecutar nuestro código de configuración. A continuación se muestra el registro de bloqueo.
Gracias por cualquier ayuda que pueda ofrecer.
Incident Identifier: 429360D5-6B02-49BE-9A0F-164DC521BE36
Hardware Model: iPod2,1
Process: XYZ [357]
Path: /var/mobile/Applications/D5038F26-CC5B-48E5-824E-090163B5C0C4/XYZ.app/XYZ
Identifier: XYZ
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2010-09-28 13:35:25.138 -0700
OS Version: iPhone OS 4.0 (8A293)
Report Version: 104
Exception Type: 00000020
Exception Codes: 0x8badf00d
Highlighted Thread: 0
Application Specific Information:
com.xyz.xyz failed to launch in time
elapsed total CPU time (seconds): 20.180 (user 15.910, system 4.270), 100% CPU
elapsed application CPU time (seconds): 10.960, 54% CPU
Thread 0:
0 libobjc.A.dylib 0x3523a50c objc_msgSend + 44
1 CoreFoundation 0x363bf568 -[__NSArrayM addObject:]
2 XYZ 0x0000a152 -[Database fetchDrinks:] + 290
3 XYZ 0x0000677c -[Database getAllDrinks] + 136
4 XYZ 0x0003a164 -[SecondaryLoadingViewController viewDidLoad] + 208
5 UIKit 0x323e582c -[UIViewController view]
6 UIKit 0x323f9628 -[UIViewController viewControllerForRotation]
7 UIKit 0x323f9574 -[UIViewController _visibleView]
8 UIKit 0x323f94fc -[UIViewController rotatingContentViewForWindow:]
9 UIKit 0x3249a514 -[UIClientRotationContext initWithClient:toOrientation:duration:andWindow:]
10 UIKit 0x32499314 -[UIWindow _setRotatableClient:toOrientation:duration:force:]
11 UIKit 0x32497d78 -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:]
12 UIKit 0x32497534 -[UIViewController presentModalViewController:withTransition:]
13 UIKit 0x324977fc -[UIViewController _tryRecursivelyPresentModalViewController:withTransition:]
14 UIKit 0x324977c0 -[UIViewController _tryRecursivelyPresentModalViewController:withTransition:]
15 UIKit 0x32496e00 -[UIViewController presentModalViewController:withTransition:]
16 UIKit 0x3249699c -[UIViewController presentModalViewController:animated:]
17 XYZ 0x000044a2 -[HomeViewController viewDidLoad] + 82
18 UIKit 0x323e582c -[UIViewController view]
19 UIKit 0x323fd68c -[UIViewController contentScrollView]
20 UIKit 0x323fd4ac -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:]
21 UIKit 0x323fd358 -[UINavigationController _layoutViewController:]
22 UIKit 0x323fccb8 -[UINavigationController _startTransition:fromViewController:toViewController:]
23 UIKit 0x323fca1c -[UINavigationController _startDeferredTransitionIfNeeded]
24 UIKit 0x323fc90c -[UINavigationController viewWillLayoutSubviews]
25 UIKit 0x323fc43c -[UILayoutContainerView layoutSubviews]
26 UIKit 0x32370ab0 -[UIView(CALayerDelegate) _layoutSublayersOfLayer:]
27 CoreFoundation 0x363c85ba -[NSObject(NSObject) performSelector:withObject:]
28 QuartzCore 0x30c8c61c 0x30c82000 + 42524
29 QuartzCore 0x30c8c2a4 0x30c82000 + 41636
30 QuartzCore 0x30c8bbb0 0x30c82000 + 39856
31 QuartzCore 0x30c8b7d8 0x30c82000 + 38872
32 QuartzCore 0x30c8b684 0x30c82000 + 38532
33 UIKit 0x323d99d4 -[UIApplication _reportAppLaunchFinished]
34 UIKit 0x3251d77c -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:]
35 UIKit 0x323d87b8 -[UIApplication handleEvent:withNewEvent:]
36 UIKit 0x323d7eb4 -[UIApplication sendEvent:]
37 UIKit 0x323d77e8 _UIApplicationHandleEvent
38 GraphicsServices 0x33c4dedc PurpleEventCallback
39 CoreFoundation 0x364142ac __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__
40 CoreFoundation 0x364161d6 __CFRunLoopDoSource1
41 CoreFoundation 0x3641718e __CFRunLoopRun
42 CoreFoundation 0x363be0bc CFRunLoopRunSpecific
43 CoreFoundation 0x363bdfca CFRunLoopRunInMode
44 UIKit 0x32363b18 -[UIApplication _run]
45 UIKit 0x32361fb8 UIApplicationMain
46 XYZ 0x00002b20 main + 36
47 XYZ 0x00002af0 start + 32
ACTUALIZACIÓN Estoy intentando ejecutar el código de importación que consume tiempo (sólo ocurre en una actualización de la aplicación) en un hilo separado. Incluso estoy actualizando la GUI usando AlertView con una barra de progreso incrustada para que el usuario sepa que algo está pasando. Durante nuestro proceso de prueba, esto funciona bien. Debajo está el código del hilo que parece no estar funcionando. El registro de bloqueo parece indicar que todo el trabajo se está realizando en el hilo principal.
if ([database appDidUpdate] == YES) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
dbImportThread = [[NSThread alloc] initWithTarget:self selector:@selector(import) object:nil];
[dbImportThread start];
[pool release];
- (void)import {
//do importing work and update the gui with the progress
}
¿Toda la información que está cargando se necesita inmediatamente en la aplicación?la carga diferida debe ser tu amigo en dispositivos móviles. –
+1 para @Jesse Naugher. Tienes problemas mayores que el colapso si tu diseño para una aplicación móvil requiere que tus usuarios permanezcan más de 20 segundos mientras se inicia la aplicación. Eso es solo un mal diseño. Puede resolver todos sus problemas y mejorar la aplicación en general cargando solo los datos que necesita para su visualización inmediata. – TechZen
Esta carga realmente solo ocurre en una actualización. Tenemos muchos datos ingresados por el usuario que guardamos en los valores predeterminados del usuario. Si la actualización viene con una nueva base de datos, entonces tenemos que importar esos datos de usuario en el nuevo db. Entonces, este caso no ocurre con demasiada frecuencia, pero en una actualización, las personas con dispositivos más lentos siempre tienen problemas. – jmurphy