2010-01-16 4 views
8

si heres l'histoire, Apple a récemment rejeté mon application, disant qu'il s'est écrasé sur leurs téléphones, (iPhone 3G et ipod touch 2g), et envoyez-moi deux journaux d'accident. Ni de quoi je peux donner un sens.Apple m'a rejeté, aucune idée pourquoi, ou comment y remédier

Les voici.

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** 

ils ont dit que même après un redémarrage, il n'y a pas de différence. Heres le kicker, il fonctionne parfaitement sur mon iPhone 3GS, et dans le simulateur sans fuites de mémoire.

Alors, qu'est-ce que je fais?

MISE À JOUR: [. Session a commencé à 2010-01-16 20:01:44 +1300]

Connectez-vous dans le simulateur GNU gdb 6.3.50-20050815 (Apple Version gdb-1346) (Fri Sep 18 20:40:51 UTC 2009) Copyright 2004 Free Software Foundation, Inc. GDB est un logiciel libre, couvert par la GNU General Public License, et vous êtes le bienvenue pour le changer et/ou en distribuer des copies sous certaines conditions. Tapez "show copy" pour voir les conditions. Il n'y a absolument aucune garantie pour GDB. Tapez "show warranty" pour plus de détails. Cette GDB a été configuré comme "x86_64-apple-darwin" .sharedlibrary apply-charge toutes les règles Fixation pour traiter 1152. dyld: Impossible de charger la bibliothèque inséré: /usr/lib/libgmalloc.dylib

données Formateurs temporairement indisponible, ré-essayer après un «continuer». avertissement: Impossible de trouver le symbole minimal pour "_sigtramp" - les backtraces peuvent ne pas être fiables Impossible d'accéder à la mémoire à l'adresse 0x0 Impossible d'accéder à la mémoire à l'adresse 0x0 (gdb)

+0

MISE À JOUR: J'ai 2,8 mbs d'images stockées dans un tableau dans l'application - serait-ce mauvais? J'ai sumbmitted, et ai traversé une application semblable, qui utilise juste de plus petites images. –

+0

2,8 Mo sur le système de fichiers (comme dans la taille JPG)? Parce qu'une fois chargés, ils sont beaucoup plus gros en mémoire. Vous pouvez avoir des images plus grandes, mais vous devrez peut-être retravailler votre application pour charger les images uniquement si nécessaire. –

+0

le dossier des images sur le bureau est de 2,8 megs. –

Répondre

5

Comme d'autres l'ont dit, vous utilisez trop de mémoire.

Si vous utilisez plusieurs pages de contrôleurs de vue, essayez ce test simple: exécutez votre application avec l'instrument ObjectAlloc. Cliquez sur quelque chose pour faire apparaître une sous-vue, vous devriez voir votre mémoire augmenter - maintenant rejeter cette vue et revenir à la principale, la mémoire devrait baisser. Si ce n'est pas le cas, c'est votre problème (ou l'un d'entre eux de toute façon, mais c'est un point de départ likley).

Pour essayer de suivre ce point, placez des points d'arrêt dans dealloc pour chacun de vos contrôleurs de vue et voyez ce qui est réellement appelé.Pour les contrôleurs de vue qui ne sont pas libérés comme vous le souhaitez, dans ObjectAlloc, vous pouvez voir où chacun conserve un objet, et décider ce qui a retenu l'objet alors qu'il n'aurait pas dû le faire.

En général, le flux ObjectAlloc doit ressembler à un graphique qui monte et descend tout le temps, sans augmenter constamment.

De même, si vous utilisez beaucoup d'images, pensez à les redimensionner à la taille exacte dont vous avez besoin au lieu de commencer avec une taille et une échelle beaucoup plus grandes. Utiliser autant de mémoire doit être dû à l'utilisation d'images et ne pas les libérer. Les fuites ne signaleront rien si vous avez toujours des références à la mémoire que vous retenez.

De plus, achetez une ancienne Touch pour tester.

+0

"Aussi, si vous utilisez beaucoup d'images, pensez à les redimensionner à la taille exacte dont vous avez besoin au lieu de commencer avec une taille et une échelle beaucoup plus grandes." Je pense que cela pourrait être le problème .. lire le commentaire sur la question que je viens d'écrire. –

+0

J'ai commenté cela. Il n'y a vraiment aucune raison que vous deviez tous les charger, vous devriez vraiment le changer pour ne charger que les images dont vous avez besoin, et vous débarrasser de celles que vous n'utilisez pas. –

+0

Je recommanderais quand même d'avoir un Touch pour l'essayer ... mais je parie que ça m'a beaucoup aidé. Je suis content que cela semble être le problème principal. –

3

Votre application utilisait trop de mémoire. Vérifiez votre application avec Instruments (Allocations ou Fuites d'objets) et voyez si vous pouvez réduire l'allocation de mémoire.

+0

Quels sont les bons moyens de réduire les allocations de mémoire? et est-il préférable de laisser le système le gérer (NSString * string = @ "hello";) ou faites-le vous-même (NSString * string = [[NSString alloc] init];) –

+0

Pour les chaînes, 'NSString * const string = @ "bonjour"; si possible. Si vous le faites vous-même, n'oubliez pas de le «libérer». – kennytm

2

Votre application utilise beaucoup trop de mémoire. Il ne fonctionnera jamais sur les appareils plus anciens avec 128 Mo de RAM.

+1

pouvez-vous simplement spécifier que vous avez besoin d'un périphérique plus récent pour l'exécuter? ils vont seulement aller de plus en plus vite. –

+0

Voulez-vous vraiment faire tomber 10 à 20 millions de personnes de la course pour acheter votre application alors que vous pourriez juste passer du temps à l'optimiser et à la faire fonctionner pour tout le monde? Pour un jeu, je pourrais peut-être voir cet argument si vous vouliez utiliser uniquement les dernières fonctionnalités OpenGL. –

+0

nah .. je vais essayer d'optimiser. –

5

Voir "pages libres: 309"? pas bon, signifie que vous utilisez un tas de mémoire, puis quand tout est utilisé, il se bloque. Et les pages purgeables = 0 est une mémoire qui ne peut pas être récupérée, c'est donc un problème de mémoire. Faites un «Build and Analyze» et lancez des «fuites» pour trouver des fuites de mémoire et des endroits où vous pouvez courir plus efficacement.

+0

Je n'ai pas de fuite cependant. La mémoire ALl semble être/comptabilisée/pour. –

3

Votre iPhone 3GS et le simulateur disposent de beaucoup plus de mémoire que les autres appareils iPhone OS. Pour fonctionner sur tous les appareils, vous ne devez pas utiliser plus de 20 Mo de mémoire.

+0

comment dites-vous si combien son utilisation maintenant? –

+0

Avez-vous essayé d'exécuter vos applications dans Instruments (Exécuter -> Exécuter avec les outils de performance ...) – kennytm

+0

oui j'ai. et pense que ça me va. (même si cela ne veut pas dire grand chose) –

Questions connexes