Après la lecture de toutes ces réponses ici afin de symbolicate un crash (et, finalement, de réussite), je pense qu'il y a certains points qui manque ici qui sont vraiment important afin de déterminer pourquoi l'invocation de symbolicatecrash ne produit pas un symbolicated de sortie.
Il y a 3 actifs devant tenir ensemble quand symbolicating un crash:
- Le crash du fichier journal lui-même (
example.crash
), soit exporté à partir de XCode de l'organisateur ou reçus à partir d'iTunes Connect.
- L'
.app
package (c - example.app
) qui contient lui-même l'application binaires appartenant au crash. Je vous avez un .ipa
package (c - example.ipa
), alors vous pouvez extraire l' .app
paquet par décompresser l' .ipa
package (c - unzip example.ipa
). Ensuite, l' .app
package se trouve dans l'extrait Payload/
le dossier.
- L'
.dSYM
colis contenant les symboles de débogage (c - example.app.dSYM
)
Avant de commencer symbolication vous devriez vérifier si tous ces objets correspondent, ce qui signifie que le rapport de crash appartient à la binaire que vous avez et que les symboles de débogage sont ceux produits lors de la compilation des binaires.
Chaque binaire est visé par un UUID qui peut être vu dans le crash du fichier journal:
...
Binary Images:
0xe1000 - 0x1f0fff +example armv7 <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example
0x2febf000 - 0x2fedffff dyld armv7s <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld
...
Dans cet extrait, le rapport de crash appartient à une application de l'image binaire nommé exemple.app/exemple avec l'UUID aa5e633efda8346cab92b01320043dc3
.
Vous pouvez vérifier l'UUID du paquet binaire que vous avez avec dwarfdump:
dwarfdump --uuid example.app/example
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example
Ensuite, vous devez vérifier si les symboles de débogage vous avez appartiennent également à cette binaires:
dwarfdump --uuid example.app.dSYM
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example
Dans cet exemple, tous les actifs de l'ajustement ensemble et vous devriez être en mesure de symbolicate votre stacktrace.
De procéder à l' symbolicatecrash
script:
Dans le dernier XCode version, vous devriez être en mesure d'invoquer le script via
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log
Si elle n'est pas là, vous pouvez exécuter une find . -name symbolicatecrash
dans votre XCode.répertoire app pour le trouver.
Comme vous pouvez le voir il n'y a plus de paramètres donné. Ainsi, le script a pour trouver votre exécutable de l'application et les symboles de débogage en exécutant une recherche spotlight. Il recherche les symboles de débogage avec un index spécifique appelé com_apple_xcode_dsym_uuids
. Vous pouvez faire la recherche vous-même:
mdfind 'com_apple_xcode_dsym_uuids = *'
resp.
mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"
Le premier coup de projecteur invocation vous donne tous les dSYM paquets et le second vous donne la .dSYM
forfaits avec un UUID spécifique. Si les projecteurs ne trouvez pas votre .dSYM
forfait puis, symbolicatecrash
ne sera ni. Si vous faites tout ce genre de choses, par exemple dans un sous-dossier de votre ~/Desktop
spot devrait être en mesure de trouver tout.
Si symbolicatecrash
recherche .dSYM
package il devrait y avoir une ligne comme la suivante, en symbolicate.log
:
@dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example )
Pour trouver votre .app
package d'une recherche spotlight comme la suivante est invoquée par symbolicatecrash
:
mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'example.app' || kMDItemDisplayName == 'example' || kMDItemDisplayName == 'example.app')"
Si symbolicatecrash
recherche .app
ensemble devrait être l'extrait suivant en symbolicate.log
:
Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884
Found executable <SOME_PATH>/example.app/example
-- MATCH
Si toutes ces ressources sont trouvés en symbolicatecrash
il doit imprimer le symbolicated version de votre rapport de crash.