2010-01-16 15 views
8

Así que aquí está la historia, Apple rechazó recientemente mi aplicación, diciendo que se colgó en sus teléfonos (iPhone 3G e iPod touch 2g) y me envió dos registros de fallos. NI de lo cual puedo entender.Apple me rechazó, ni idea de por qué, ni cómo solucionarlo

Aquí están.

Incident Identifier: BA4382DD-DA6A-47F7-800D-43AD30919064 
CrashReporter Key: 53e41ca2a52f91affddc86f49ce9c4be851fcfd6 
OS Version:   iPhone OS 3.1.2 (7D11) 
Date:    2010-01-14 15:59:57 -0800 

Free pages:  317 
Wired pages:  11274 
Purgeable pages: 0 
Largest process: iConicCars 

Processes 
     Name     UUID     Count resident pages 
     amfid <b4f3e5a61456edf85b6ada59064ec311>  93 
    iConicCars <851d264eb074e465891dcd67b67a8e79> 5928 (jettisoned) (active) 
    MobileMail <0798395dde43ca46317db6e674dfbbfd>  503 (jettisoned) 
MobilePhone <82c9bd8583f4b09706a16b08e641a4b9>  464 (jettisoned) 
    notifyd <d6b12a4e424e10e5ce91efd8d39f22af>  77 
    BTServer <c940c4c7252113a7303cc1f7d1429c17>  253 
    CommCenter <b1d6c4fe3ce2bc0374471196ab15b8d4>  313 
SpringBoard <c5c29b56a2bb445fc73203e03f67fa78> 1954 (active) 
    accessoryd <32ceed5c3c32625ac23cd870f61364af>  107 
    configd <aae411e8289912124271f109ceee8f85>  290 
    fairplayd <cdce5393153c3d69d23c05de1d492bd4>  156 
    mDNSResponder <db98efaea94329959789f73a16f9f46e>  123 
mediaserverd <612fbbfa0546609cf6c6b13ae6f333cf>  767 (jettisoned) 
    lockdownd <171865bfe3725c3d5047df8c00ed5d77>  294 
    syslogd <1cb3e9f2375fad9e345bd16655be4a50>  66 (jettisoned) 
    launchd <c5bc115d47313218505394f96770782a>  76 

**End** 

Incident Identifier: 8E52889B-0260-4AAD-A39C-FC170FB637D4 
CrashReporter Key: 45d118e8a4be9b3163eab905af870f05dfddb12d 
OS Version:   iPhone OS 3.1.2 (7D11) 
Date:    2010-01-14 13:41:31 -0800 

Free pages:  309 
Wired pages:  12550 
Purgeable pages: 0 
Largest process: iConicCars 

Processes 
     Name     UUID     Count resident pages 
     iConicCars <851d264eb074e465891dcd67b67a8e79> 5641 (jettisoned) (active) 
     SCHelper <b87bd080a670f9512426e8721dc1f03c>  103 
      misd <a41e5d5f4b8922ab272c55df84aec4fd>  140 
    installd <620ede129454bcd824f0b6cec13b15d3>  212 
SpringBoard <c5c29b56a2bb445fc73203e03f67fa78> 1545 (jettisoned) (active) 
     iapd <fea164e93479b90e1dd39a293dd3865c>  251 (jettisoned) 
    syslogd <1cb3e9f2375fad9e345bd16655be4a50>  83 (jettisoned) 
mediaserverd <612fbbfa0546609cf6c6b13ae6f333cf>  302 (jettisoned) 
    BTServer <c940c4c7252113a7303cc1f7d1429c17>  345 
    lockdownd <171865bfe3725c3d5047df8c00ed5d77>  279 
    notifyd <d6b12a4e424e10e5ce91efd8d39f22af>  104 
    CommCenter <b1d6c4fe3ce2bc0374471196ab15b8d4>  151 
    configd <aae411e8289912124271f109ceee8f85>  264 
    fairplayd <cdce5393153c3d69d23c05de1d492bd4>  517 
    mDNSResponder <db98efaea94329959789f73a16f9f46e>  100 
    launchd <c5bc115d47313218505394f96770782a>  67 

**End** 

dijeron que incluso después de un reinicio, no hay diferencia. Heres the kicker, funciona perfectamente en mi iPhone 3GS, y en el simulador SIN pérdidas de memoria.

Entonces, ¿qué demonios hago?

ACTUALIZACIÓN: [. Sesión comenzó a las 2010-01-16 20:01:44 1300]

Entrar en el simulador GNU GDB 6.3.50-20050815 (Apple versión GDB-1346) (Vie sep 18 20:40:51 UTC 2009) Copyright 2004 Free Software Foundation, Inc. GDB es software libre, cubierto por la Licencia Pública General de GNU, y usted es invitamos a cambiarlo y/o distribuir copias de él bajo ciertas condiciones. Escribe "mostrar copia" para ver las condiciones. No hay absolutamente ninguna garantía para GDB. Escriba "mostrar garantía" para más detalles. Este GDB se ha configurado como "x86_64-manzana-Darwin" .sharedlibrary aplica carga-gobierna todo Colocación de procesar 1152. dyld: no se pudo cargar la biblioteca insertada: /usr/lib/libgmalloc.dylib Formateadores

Data temporalmente no disponible, se volverá a intentar después de un 'continuar'. (No se puede llamar al cargador en este momento, está bloqueado.) advertencia: No se pudo encontrar el símbolo mínimo para "_sigtramp" - las trazas pueden no ser confiables No se puede acceder a la memoria 0x0 No se puede acceder a la memoria 0x0 (gdb)

+0

ACTUALIZACIÓN: Tengo 2,8 mbs de imágenes almacenadas en una matriz en la aplicación. ¿Sería malo? He subestimado, y obtuve una aplicación similar, que solo usa imágenes más pequeñas. –

+0

2.8MBs en el sistema de archivos (como en tamaño JPG)? Porque una vez cargados, son MUCHO más grandes en la memoria. Puede tener imágenes más grandes, pero es posible que necesite volver a trabajar su aplicación para cargar imágenes solo según sea necesario. –

+0

la carpeta de imágenes en el escritorio es de 2,8 megas. –

Respuesta

5

Como han dicho otros, está usando demasiada memoria.

Si está utilizando varias páginas de controladores de vista, intente con esta simple prueba: ejecute su aplicación con el ObjectAlloc Instrument. Haga clic en algo para mostrar una subvista, debería ver cómo aumenta su memoria: ahora desestime esa vista y vuelva a la principal, la memoria debería bajar. Si no es así, ese es su problema (o uno de ellos de todos modos, pero ese es un punto de partida muy probable).

Para tratar de rastrear esto, coloque los puntos de interrupción en dealloc para cada uno de sus controladores de vista y vea lo que realmente se llama.Para los controladores de vista que no se lanzan como espera, en ObjectAlloc puede ver dónde se emitió cada retención contra un objeto y decidir qué retuvo el objeto cuando no debería haberlo hecho.

En general, el flujo de ObjectAlloc debe verse como un gráfico que sube y baja todo el tiempo, no subiendo constantemente.

Además, si utiliza muchas imágenes, considere cambiar el tamaño del tamaño exacto que necesita en lugar de comenzar con un tamaño y escalamiento mucho mayores. Usar esa cantidad de memoria debe ser debido al uso de imágenes y no liberarlas. Las fugas no informarán nada si todavía tiene referencias a la memoria que está reteniendo.

Además, compre un Touch antiguo para probar.

+0

"Además, si está utilizando muchas imágenes, considere redimensionarlas al tamaño exacto que necesita en lugar de comenzar con un tamaño y escalamiento mucho mayores". Creo que ese podría ser el problema ... lea el comentario sobre la pregunta que acabo de escribir. –

+0

Comenté sobre eso. En realidad, no hay ninguna razón por la que deba tenerlos cargados, realmente debe cambiarlo para cargar solo las imágenes que necesite y deshacerse de las que no esté usando. –

+0

Aún recomiendo obtener un toque para probarlo ... aunque apostaría que ayudó mucho. Me alegro de que ese sea el principal problema. –

3

Su aplicación usaba demasiada memoria. Verifique su aplicación con instrumentos (Asignación de objetos o fugas) y vea si puede reducir la asignación de memoria.

+0

¿Cuáles son buenas formas de reducir las asignaciones de memoria? y es mejor dejar que el sistema lo administre (NSString * string = @ "hello";) o hágalo usted mismo como (NSString * string = [[NSString alloc] init];) –

+0

Para cadenas, 'NSString * const string = @ "hola"; 'si es posible. Si lo haces, recuerda "liberarlo". – kennytm

2

Tu aplicación está usando demasiado, demasiada memoria. Nunca se ejecutará en dispositivos más antiguos con 128 MB de RAM.

+1

¿puede especificar que necesita un dispositivo más nuevo para ejecutarlo? solo se volverán más y más rápidos. –

+0

¿De verdad quiere dejar fuera de carrera a 10-20 millones de personas para comprar su aplicación cuando podría simplemente dedicar un tiempo a optimizarla y hacer que funcione para todos? Para un juego, quizás podría VER este argumento si quisiera usar solo las últimas características de OpenGL. –

+0

nah ... intentaré optimizarlo. –

5

Ver "páginas gratuitas: 309"? no es bueno, significa que estás usando un montón de memoria y luego, cuando todo se usa, se bloquea. Y las páginas purgables = 0 son memorias que no pueden recuperarse, así que es un problema de memoria.

Realice una "compilación y análisis" y ejecute "Fugas" para encontrar fugas de memoria y lugares que puede ejecutar de manera más eficiente.

+0

No tengo filtraciones. Toda la memoria parece ser/contada/para. –

3

Su iPhone 3GS y el simulador tienen mucha más memoria que otros dispositivos con sistema operativo de iPhone. Para trabajar en todos los dispositivos, debe usar no más de 20 MB de memoria.

+0

¿cómo se sabe si está usando mucho? –

+0

¿Ha intentado ejecutar sus aplicaciones en Instrumentos (Ejecutar -> Ejecutar con herramientas de rendimiento ...) – kennytm

+0

sí, tengo. y piensa que me parece bien. (aunque, eso no dice mucho) –

Cuestiones relacionadas