Symbolication not working for multi framework app

  • What agent version are you using? (click to see release notes)
    6.9.0

  • Please share which platform you have questions about: iOS, Android or hybrid?
    iOS

  • Are you seeing an error? Please paste the stack trace, or add a screenshot for us to review:
    Every time I want to check a stack trace of a crash, I see ‘This occurrence may not have symbolicated properly! To fix this,[ click here to symbolicate your crash occurrence](javascript:void(0))’
    and then ‘This occurrence was only partially symbolicated. It looks like you are missing one or more dSYMs for this build.’

Please describe what you are seeing:
I haven’t seen yet a symbolicated crash report for our app, which consists of a very small amount of files add to app target, and all business logic inside smaller frameworks.

When I use the default solution from here Relic Solution: iOS dSYM upload deep-dive, which is newrelic_postbuild.sh script, it finishes very quickly, while our dSyms weigh around 180 MB when zipped.

When I use the second solution, generate_map.py , it takes much more time to finish, which is expected, but it seems our Xcode generated dSym folder holds also internal frameworks that our app uses (for some reason), and the script tries to upload too many things. This happens because it tries to find files that have ‘Mach-O’ in their file description. ‘Mach-O 64-bit dynamically linked shared library arm64e’ and ‘Mach-O 64-bit dSYM companion file arm64’ both fits that criteria.

Even after fixes to generateMap.py to collect only debug symbol files, I was not able to symbolicate my manually-induced-test crash in NewRelic.

When I try to symbolicate the crash from command line, using symbolicatecrash --dsym=OneOfMyFrameworks.framework.dSYM path > result, I get the crash symbolicated for that framework.

We have a CD setup where we are creating release builds only from a defined job, so I would prefer a solution like with generateMap.py, when one zip file is created and it gets uploaded, because then I can isolate it to a separate stage of the build.
We are using Fastlane, and I have already setup a back-up dSym store on S3. I get the dSyms zip path in lane_context[SharedValues::DSYM_OUTPUT_PATH], after build_ios_app action. I tried to use it also with NewRelic, but still no luck.

If there is somewhere a definition how zip file with dSyms should look like for multi framework app, I would be able to dive deeper into the issue, but I can’t find it. It seems backend is accepting most of the zips with 201 code, but symbolication is not working when crashes happen.

  • How does that differ from what were you expecting to see?
    I would expect for dSyms to be uploaded to New Relic, and being able to see a symbolicated stack trace.

Best,
Michal

Hi @Michal.Laskowski,

Thanks for getting in touch with New Relic!

We are a bit limited in the official support we can offer for Fastlane as well as if you are making alterations to the python script. Also, multiframework apps such as Xamarin and React Native are not currently supported by the agents, so there may be some expected trouble there. However, if other members of the community have been able to get this working and have a working solution, that would be really helpful for everyone!

My best recommendation would be to run the unaltered python script on your dSYM files and then send them up using the manual upload process. This should get us the dSYM’s so that we can attempt to desymbolicate the crash reports that we do get.

Please let me know if that helps at all!