La aplicación para iOS desarrollada en Xcode 4.5 funciona bien en iOS 6, pero falla en iOS 5

Tengo una aplicación de iOS que se desarrolló con Xcode Versión 4.5.1. Mi objective de implementación de iOS se establece en 5.0 ya que me gustaría que la aplicación se ejecutara en iOS 5.0, 5.1 y 6.0.

Cuando ejecuto la aplicación en un dispositivo iOS 6 (o simulador) todo funciona bien. Cuando ejecuto la aplicación en un dispositivo iOS 5 (o simulador), la aplicación falla en UIApplicationMain. Puedo avanzar paso a paso a través de la aplicación: didFinishLaunchingWithOptions: y parece que se está ejecutando con éxito. Aquí está el seguimiento de stack:

imagen de rastreo de pila

Aquí están los loggings si ayuda:

(lldb) register read General Purpose Registers: eax = 0x06e5f590 ebx = 0x01226f9c "class" ecx = 0x0733fb8c edx = 0x0733fb90 edi = 0x0011d814 (void *)0x0011d800: TRAppDelegate esi = 0xbffff310 ebp = 0xbffff2e8 esp = 0xbffff2a0 eflags = 0x00000286 eip = 0x00002b3d Messenger`main + 141 at main.m:16 6 registers were unavailable. (lldb) 

backtrace:

  (lldb) bt * thread #1: tid = 0x1c03, 0x01211caa libobjc.A.dylib`objc_exception_throw, stop reason = breakpoint 1.3 2.3 frame #0: 0x01211caa libobjc.A.dylib`objc_exception_throw frame #1: 0x015cda48 CoreFoundation`+[NSException raise:format:arguments:] + 136 frame #2: 0x015cd9b9 CoreFoundation`+[NSException raise:format:] + 57 frame #3: 0x006954a3 UIKit`UINibDecoderDecodeObjectForValue + 281 frame #4: 0x0069567b UIKit`UINibDecoderDecodeObjectForValue + 753 frame #5: 0x00695383 UIKit`-[UINibDecoder decodeObjectForKey:] + 117 frame #6: 0x0059516d UIKit`-[UINib instantiateWithOwner:options:] + 921 frame #7: 0x0043b1fc UIKit`-[UIViewController _loadViewFromNibNamed:bundle:] + 286 frame #8: 0x0043b779 UIKit`-[UIViewController loadView] + 302 frame #9: 0x0043b99b UIKit`-[UIViewController view] + 53 frame #10: 0x0039a401 UIKit`-[UIWindow addRootViewControllerViewIfPossible] + 45 frame #11: 0x0039a670 UIKit`-[UIWindow _setHidden:forced:] + 280 frame #12: 0x0039a836 UIKit`-[UIWindow _orderFrontWithoutMakingKey] + 49 frame #13: 0x003a172a UIKit`-[UIWindow makeKeyAndVisible] + 35 frame #14: 0x00372596 UIKit`-[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1820 frame #15: 0x00373274 UIKit`-[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 524 frame #16: 0x00382183 UIKit`-[UIApplication handleEvent:withNewEvent:] + 1027 frame #17: 0x00382c38 UIKit`-[UIApplication sendEvent:] + 68 frame #18: 0x00376634 UIKit`_UIApplicationHandleEvent + 8196 frame #19: 0x02314ef5 GraphicsServices`PurpleEventCallback + 1274 frame #20: 0x015f9195 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53 frame #21: 0x0155dff2 CoreFoundation`__CFRunLoopDoSource1 + 146 frame #22: 0x0155c8da CoreFoundation`__CFRunLoopRun + 2218 frame #23: 0x0155bd84 CoreFoundation`CFRunLoopRunSpecific + 212 frame #24: 0x0155bc9b CoreFoundation`CFRunLoopRunInMode + 123 frame #25: 0x00372c65 UIKit`-[UIApplication _run] + 576 frame #26: 0x00374626 UIKit`UIApplicationMain + 1163 frame #27: 0x00002b3d Messenger`main + 141 at main.m:16 (lldb) 

Preguntas

  1. ¿Alguna idea de lo que podría estar pasando aquí?
  2. ¿Es posible desarrollar una aplicación iOS 5 usando Xcode 4.5? Supongo que la respuesta es sí.
  3. ¿Cómo veo el contenido de los loggings? He tratado de search algunas cosas desde aquí, pero no he podido ver nada útil.
  4. ¿En qué loggings debo centrarme?
  5. ¿Cuál es la pregunta que debería estar preguntando que no estoy preguntando?

Solución:

Deshabilitar el layout automático

  1. Es posible que esté utilizando funciones que solo están disponibles en iOS 6, como AutoLayout. Abra los files de su interfaz y asegúrese de que AutoLayout esté desmarcado:
    introduzca la descripción de la imagen aquí
    Este cambio de AutoLayout se puede encontrar en el inspector de utilidades (panel en el lado derecho de Xcode) y luego debajo de la primera pestaña del Inspector de Utilidades (el Inspector de files). También puede cambiar la configuration de Despliegue de control de documentos a la versión más baja de iOS que admite su aplicación. Después de hacerlo, Xcode mostrará advertencias sobre las características de su interfaz que están en desuso o que no se admitirán en algunas versiones de iOS.

  2. Sí, por supuesto, puedes desarrollar aplicaciones para versiones anteriores de iOS con Xcode 4.5. Solo asegúrese de que su destino de implementación esté configurado correctamente en la configuration de su proyecto.

  3. La sugerencia de DrummerB para 3 y 4 debería funcionar bien:

    No creo que eso sea de ayuda. Tal vez podría intentar ejecutar bt en la console de debugging cuando su aplicación se bloquee para get un rastro.

Además, para mejorar la respuesta de DrummerB, está bien usar classs / API iOS 6 pero debe verificar su disponibilidad antes de usarlas:

 if ([UIClassName class] != nil) { //UIClassName is available, you can now set it up } else { //UIClassName is not available, use a different class or prompt the user } 
  1. Probablemente uses una iOS 6 API. Tal vez estás usando Auto-Layout. Compruebe en todos los files xib que ha desactivado el layout automático. Mira esta respuesta .
  2. Ciertamente, es posible desarrollar aplicaciones iOS 5 con Xcode 4.5. Debe establecer el objective de implementación en consecuencia (lo que hizo) y no usar ninguna característica o API de iOS 6.
  3. & 4: No creo que eso sea de ayuda. Tal vez podría intentar ejecutar bt en la console de debugging cuando su aplicación se bloquee para get un rastro.

Me encontré con un problema similar en la construcción de Xcode 4.5: se aclaró con xCode 4.5.1

Espero que esto ayude.