In a team environment, it is a bit more complicated. Since documentation from Apple and elsewhere on Internet is lacking in this area, I felt it might be useful to share what I've figured out.
For my project we have a build server that performs nightly builds of the project, as well as builds on demand. In order to symbolicate crash reports, developers need to copy the build artifacts (the application and associated debug symbols) from the build server to their workstations. I doesn't matter where you save the files on your workstation as long as Spotlight can index them.
Our automated build produces a .zip file containing something like this:
ios/cmMobile_src.zip
ios/debug/cmMobile.app.dSYM/Contents/Info.plist
ios/debug/cmMobile.app.dSYM/Contents/Resources/DWARF/cmMobile
ios/debug/cmMobile.ipa
ios/distribution/cmMobile.app.dSYM/Contents/Info.plist
ios/distribution/cmMobile.app.dSYM/Contents/Resources/DWARF/cmMobile
ios/distribution/cmMobile.ipa
ios/release/cmMobile.app.dSYM/Contents/Info.plist
ios/release/cmMobile.app.dSYM/Contents/Resources/DWARF/cmMobile
ios/release/cmMobile.ipa
Once this .zip file is uncompressed, the .ipa file must also be uncompressed. Despite the .ipa suffix, these files are just .zip files with a top-level folder called "Payload" which contains all of the files for the application. After the .zip and .ipa files are uncompressed, you can speed Spotlight along by typing 'mdimport .' in a parent folder.
That's all there is to it. Once you've done that you should be able to symbolicate crash reports from users running the corresponding build.
Thanks to your great post, I have finally been able to symbolicate crash reports from versions built by our build server!
ReplyDeleteIt's a shame that official documentation about symbolication is around a single developer model.