2012-04-16 18 views
5

Tengo una aplicación que ha sido rechazada dos veces en la tienda de aplicaciones y ¡realmente podría necesitar ayuda!Aplicación rechazada, temporizador de vigilancia o derechos perdidos

Se ha rechazado para que el temporizador Watchdog lo obligue a cerrar cuando se abre por primera vez. Sin embargo, no he podido reproducir esto en ninguno de mis dispositivos. Lleva mucho tiempo construir en un dispositivo cuando se usa xcode (sé que cuando se construye desde xcode el watchdog está desconectado). Pero tengo un par de preguntas que podrían ayudarme a solucionar esto.

  1. ¿El organismo de control tiene en cuenta solamente didFinishLaunchingWithOptions: o son sus otros métodos que se llama?

  2. ¿Tiene algo que ver el número de marcos utilizados por el programa? y si es así, ¿hay 11 marcos demasiados?

  3. Una vez que la aplicación está instalada en un dispositivo, y desenchufa el dispositivo, ¿el temporizador de vigilancia está habilitado?

  4. ¿Qué otras cosas se pueden agregar al temporizador de vigilancia?

Apple dijo que otra posibilidad podría ser Another possibility could be a missing entitlement. Podría alguien explicar lo que esto significa, que hav'nt visto esto antes con mis otras aplicaciones, pero que tal vez era algo nuevo? ¿Y tiene que instalarse en todas las aplicaciones para la tienda de aplicaciones?

Perfil de tiempo para los primeros segundos

enter image description here

+1

AFAIK el watchdog timer no solo está activo para el inicio de una aplicación sino también durante toda su vida útil. Cualquier cosa que bloquee el hilo principal por mucho tiempo hará que se mate tu aplicación -> ¡usa el enhebrado! La cantidad de marcos en uso no es un problema. – Till

+0

¿Podría explicarme qué es el enhebrado? Intento correr lo menos posible durante el inicio de la aplicación. ¿Qué pasa si hay una gran cantidad de archivos de imagen? –

Respuesta

4

Está bloqueando el hilo de la interfaz de usuario por mucho tiempo. Para resolver este problema, primero tendrá que averiguar qué código tomó tanto tiempo. Podría valer la pena perfilar tu aplicación. Tenga en cuenta que el simulador no emula el dispositivo, solo emula la API. Podría correr mucho más rápido que el dispositivo real porque su computadora es más poderosa que un iPhone. Intente hacer clic y mantener presionado Run en la parte superior izquierda de Xcode, y elija Profile. Elija Time Profiler y ejecútelo durante unos segundos. Detenga el generador de perfiles para analizar el tiempo en las llamadas a funciones. Tenga en cuenta que puede necesitar profundizar, encontrar algunos tutoriales o libros para comprender realmente los perfiles.

Cuando sepa qué partes se han estado ejecutando lentamente. Puedes ponerlos en un hilo. La manera más fácil sería usar Grand Central Dispatch. Para comenzar, visite this tutorial. Puede omitir la primera mitad y enfocarse en los bloques de hilos reales. Las API son dispatch_queue_create, dispatch_async y dispatch_release.

Esto desbloqueará su IU.

+0

He agregado una foto de mi Time Profiler después de unos segundos. ¿Ves algo extraño aquí? –

+0

Intenta marcar "Ocultar bibliotecas del sistema" a la izquierda y vuelve a cargar tu imagen. Inmediatamente verá los problemas usted mismo. –

+0

Ok, así que creo que puedo haber descubierto dónde se estaban agotando muchos datos. 229.0ms se estaba utilizando para ejecutar una comprobación de diccionario en AppDelegate.m 'didFinishLaunchingWithOptions:' Ahora lo he movido a mi primer 'viewcontroller' y lo he agregado al método' viewDidLoad: '. ¿Debería liberar algo de espacio de inicio, o aún lo estoy perdiendo? –

3

¿Usted hace una gran cantidad de procesamiento en

application:didFinishLaunchingWithOptions, 
applicationDidBecomeActive, 
applicationDidEnterBackground, 
applicationWillResignActive or 
applicationWillTerminate? 

Cosas como acceso múltiple de archivos, datos de carga/ahorro, acceso a la red síncrona puede haga que su aplicación se congele al inicio o cuando el usuario salga, y podría causar que el perro guardián mate su aplicación.

Esta nota técnica de Apple sugiere que el perro guardián solo está mirando los eventos de inicio, suspensión, reanudación y finalización de la interfaz de usuario, por lo que diría que primero debe consultarlos y quizás publicar algunos detalles más de su aplicación lo hace en los métodos enumerados anteriormente. http://developer.apple.com/library/ios/#qa/qa1693/_index.html

11 frameworks is fine. He usado 11 en una aplicación sin problemas.

Si inicia la aplicación tocando el ícono en la pantalla de inicio, los temporizadores de vigilancia estarán activos y monitoreando su aplicación. Si inicia la aplicación presionando ejecutar o depurar en Xcode, entonces el perro guardián no controlará su aplicación.

Cuestiones relacionadas