-
Notifications
You must be signed in to change notification settings - Fork 211
feat: add kscrash reporter #1003
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
b5ca2a8 to
3d11d8f
Compare
3d11d8f to
34609a7
Compare
nachoBonafonte
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks really good, clean and effective.
Wow, thanks Nacho! |
naftaly
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good. Just a few comments here and there.
The biggest thing I'd do right away is to decide what code runs on what queue, make it obvious, document it and assert it.
| KSCrashInstrumentation.install() | ||
| } | ||
|
|
||
| public static func install() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If this is truly public, you'll need to have make this much more atomic than it is since a lot can happen between checking isInstalled and when you actually set isInstalled. If it's private, make it private and you own the call so you can handle it how you want, just document what's going on and why.
|
|
||
| do { | ||
| let config = KSCrashConfiguration() | ||
| config.enableSigTermMonitoring = false |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a good default since SIGTERM is not directly actionable in most cases, it's not a programmer error or a "real" issue visible to users.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@williazz why don't you add a optional KSCrashConfiguration parameter that this instrumentation will default to use if set?
| do { | ||
| let config = KSCrashConfiguration() | ||
| config.enableSigTermMonitoring = false | ||
| config.enableSwapCxaThrow = false |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Turning this off can lead to C++ exceptions having a useless stacktrace. On the other hand, it does add a bit of startup time. It's probably a good idea to make it configurable somehow for those who do have a lot of C++ in their apps and need them to be actionable.
| // Get stack trace in Apple format and emit log event in async callback | ||
| // If the iOS application was built with `strip styles` set to `debugging symbols`, then KSCrash will | ||
| // also perform on-device symbolication. | ||
| CrashReportFilterAppleFmt().filterReports([crashReport]) { reports, _ in |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is likely what a lot of users will want, but is also probably the least performant since it'll try and symbolicate everything and turn the log into a large String. Often times, backends receiving the data will prefer arrays of addresses with metadata. Something to think about in future iterations based on how collectors are interested in received and using the data.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
on-device symbolication should probably be user-configurable, and the default should be to disable the auto-symbolication if possible. Will this be a performance hit in production iOS if enabled?
| } | ||
|
|
||
| /// Get exception code information for the crash message. This is useful for grouping | ||
| static func extractCrashMessage(from stackTrace: String) -> String { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As is, this is ok, but it's probably not the way dashboards that show the data will want to group.
We have two things here. The first is the displayed message to users. The second is what is used to group crashes. The two can be different.
It's good to have a default for both, but more advanced use cases will want to form their own, and this usually on the backend so it can be changed as new information appears.
The message is definitely something very similar to what you have here. A small addition that could be nice is to move the "crashed line" to not just be the first frame, but instead the first frame in the apps image. The apps image is usually the first in the list.
The group can be formed from similar pieces but will also often contain some other metadata (or whatever you use to group by). It'll often then be hashed instead of keeping it human readable.
None of this needs to be done now, what you have is a great start, just some ideas for the future.
| } | ||
| } | ||
|
|
||
| reporter.userInfo = userInfo |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure this is thread safe so you might want to make sure it's always called on the same queue or protected in some fashion.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
++ we need to add a mutex here
Co-authored-by: Alex Cohen <[email protected]>
|
Let's add a README.md |
vvydier
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
much asked feature, awesome contribution Billy! @williazz
Summary
Adding crash support for KSCrash using the generic semantic convention for exceptions, following implementation here aws-observability/aws-otel-swift#54
Warning
This depends on #1000 since there is the improvement in thread safety prevents crashes #1000
Implementation
I've imported KSCrash into Instrumentation/Crash under scope
io.opentelemetry.kscrash, in case we want to expand to other reporters in the future.On SessionEvent notification, we cache the current session id in kscrash user info. When the crashes are recovered, then the original timestamps and session ids are used.
When recording crash event, I follow this schema:
exception.messagefollow format "(TYPE) detected on thread (x) at (module) (offset)" - for exampleattributes.exception.message: "EXC_BREAKPOINT (SIGTRAP) detected on thread 0 at AwsHackerNewsDemo + 63552. This was the most optimal strategy that I found to group related crashes.exception.stacktracefollow standard apple format, and by default capped at 25KB to follow best practices regarding attribute size limitsTests
Updated unit tests and performed end-to-end manual test against AwsHackerNewsDemo app via TestFlight release against this branch https://github.com/williazz/aws-otel-swift/tree/dev/kscrash-upstream
And you can see the original timestamp is recovered

Logs
{ "account_id": "775344198257", "application_id": "e5b88e3e-e0c9-4ae5-8c3e-316fd9493153", "application_name": "billyzh-kscrash-upstream", "sessionId": "7B1F3CA2-1E0E-437C-99D3-B8DD12075320", "userId": "82E85CD0-1CD5-4726-B2A9-7127C9CA9A1C", "event_timestamp": 1764747918015, "traceId": "", "spanId": "", "flags": 0, "attributes": { "session.previous_id": "08840555-0C69-43E4-BA31-5FC9A3280256", "screen.name": "HackerNewsViewController", "user.id": "82E85CD0-1CD5-4726-B2A9-7127C9CA9A1C", "hw.battery.charge": 0.65, "exception.type": "crash", "process.memory.usage": 91.313, "exception.message": "EXC_BREAKPOINT (SIGTRAP) detected on thread 0 at AwsHackerNewsDemo + 63552", "process.cpu.utilization": 0.978, "exception.stacktrace": "Incident Identifier: AA045A5B-6283-4145-B237-CACE24540A51\nCrashReporter Key: c20e441eb6b7d2f065ce13a79ebd2068935284ca\nHardware Model: iPhone17,2\nProcess: AwsHackerNewsDemo [16797]\nPath: /private/var/containers/Bundle/Application/56D27E23-F6DA-43AF-94FD-857D261B7858/AwsHackerNewsDemo.app/AwsHackerNewsDemo\nIdentifier: AwsHackerNewsDemo\nVersion: 1.0 (35)\nCode Type: ARM-64 (Native)\nRole: Foreground\nParent Process: launchd [1]\n\nDate/Time: 2025-12-02 23:45:18.015 -0800\nOS Version: iOS 18.6.2 (22G100)\nReport Version: 104\n\nException Type: EXC_BREAKPOINT (SIGTRAP)\nException Codes: KERN_INVALID_ADDRESS at 0x000000010283058c\nTriggered by Thread: 0\n\nThread 0 Crashed:\n0 AwsHackerNewsDemo \t0x000000010283058c __swift_memcpy176_8 + 63552\n1 AwsHackerNewsDemo \t0x00000001027fa0e4 0x1027f4000 + 24804\n2 AwsHackerNewsDemo \t0x00000001027fa0e4 0x1027f4000 + 24804\n3 libdispatch.dylib \t0x00000001a94e8584 0x1a94cd000 + 112004\n4 libdispatch.dylib \t0x00000001a94d3560 0x1a94cd000 + 25952\n5 libdispatch.dylib \t0x00000001a94e6348 0x1a94cd000 + 103240\n6 libdispatch.dylib \t0x00000001a94e5020 0x1a94cd000 + 98336\n7 libdispatch.dylib \t0x00000001a95054ec 0x1a94cd000 + 230636\n8 libdispatch.dylib \t0x00000001a94ddd30 0x1a94cd000 + 68912\n9 libdispatch.dylib \t0x00000001a94ddc6c _dispatch_main_queue_callback_4CF + 44\n10 CoreFoundation \t0x00000001a159ec30 0x1a1532000 + 445488\n11 CoreFoundation \t0x00000001a1542394 0x1a1532000 + 66452\n12 CoreFoundation \t0x00000001a1543adc CFRunLoopRunSpecific + 572\n13 GraphicsServices \t0x00000001ee369454 GSEventRunModal + 168\n14 UIKitCore \t0x00000001a3f65274 0x1a3e30000 + 1266292\n15 UIKitCore \t0x00000001a3f30a28 UIApplicationMain + 336\n16 UIKitCore \t0x00000001a4012168 0x1a3e30000 + 1974632\n17 AwsHackerNewsDemo \t0x0000000102817dc8 main + 116\n18 (null)\t0x00000001c7fd5f08 0x0 + 7650238216\n\nThread 1:\n0 libsystem_kernel.dylib \t0x00000001f23a3438 __psynch_cvwait + 8\n1 libsystem_pthread.dylib \t0x000000022b9ede7c 0x22b9ec000 + 7804\n2 Foundation \t0x00000001a02ffbcc 0x1a01ab000 + 1395660\n3 AwsHackerNewsDemo \t0x000000010289fb98 __swift_memcpy48_8 + 4888\n4 AwsHackerNewsDemo \t0x000000010289fc64 __swift_memcpy48_8 + 5092\n5 Foundation \t0x00000001a0220804 0x1a01ab000 + 481284\n6 libsystem_pthread.dylib \t0x000000022b9ef344 _pthread_start + 136\n\nThread 2:\n0 libsystem_kernel.dylib \t0x00000001f23a3438 __psynch_cvwait + 8\n1 libsystem_pthread.dylib \t0x000000022b9ede7c 0x22b9ec000 + 7804\n2 Foundation \t0x00000001a02ffbcc 0x1a01ab000 + 1395660\n3 AwsHackerNewsDemo \t0x000000010285bb1c __swift_memcpy16_8 + 31884\n4 AwsHackerNewsDemo \t0x000000010285bbe8 __swift_memcpy16_8 + 32088\n5 Foundation \t0x00000001a0220804 0x1a01ab000 + 481284\n6 libsystem_pthread.dylib \t0x000000022b9ef344 _pthread_start + 136\n\nThread 3:\n0 libsystem_kernel.dylib \t0x00000001f239da90 __workq_kernreturn + 8\n1 libsystem_pthread.dylib \t0x000000022b9eca58 _pthread_wqthread + 368\n\nThread 4:\n0 libsystem_kernel.dylib \t0x00000001f23a3658 __semwait_signal + 8\n1 libsystem_c.dylib \t0x00000001a95269ac nanosleep + 220\n2 libsystem_c.dylib \t0x00000001a953bd10 sleep + 52\n3 AwsHackerNewsDemo \t0x0000000102a6e494 monitorThreadCache + 748\n4 libsystem_pthread.dylib \t0x000000022b9ef344 _pthread_start + 136\n\nThread 5 name: KSCrash Exception Handler (Secondary)\nThread 5:\n0 libsystem_kernel.dylib \t0x00000001f239dce4 mach_msg2_trap + 8\n1 libsystem_kernel.dylib \t0x00000001f23a139c mach_msg2_internal + 76\n2 libsystem_kernel.dylib \t0x00000001f23a12b8 mach_msg_overwrite + 428\n3 libsystem_kernel.dylib \t0x00000001f23a1100 mach_msg + 24\n4 AwsHackerNewsDemo \t0x0000000102a70254 exceptionHandlerThreadMain + 84\n5 libsystem_pthread.dylib \t0x000000022b9ef344 _pthread_start + 136\n\nThread 6 name: KSCrash Exception Handler (Primary)\nThread 6:\n0 (null)\t0x0000000000000000 0x0 + 0\n\nThread 7 name: com.apple.uikit.eventfetch-thread\nThread 7:\n0 libsystem_kernel.dylib \t0x00000001f239dce4 mach_msg2_trap + 8\n1 libsystem_kernel.dylib \t0x00000001f23a139c mach_msg2_internal + 76\n2 libsystem_kernel.dylib \t0x00000001f23a12b8 mach_msg_overwrite + 428\n3 libsystem_kernel.dylib \t0x00000001f23a1100 mach_msg + 24\n4 CoreFoundation \t0x00000001a15437a0 0x1a1532000 + 71584\n5 CoreFoundation \t0x00000001a1542090 0x1a1532000 + 65680\n6 CoreFoundation \t0x00000001a1543adc CFRunLoopRunSpecific + 572\n7 Foundation \t0x00000001a01ba79c 0x1a01ab000 + 63388\n8 Foundation \t0x00000001a01c0020 0x1a01ab000 + 86048\n9 UIKitCore \t0x00000001a3f4f56c 0x1a3e30000 + 1176940\n10 Foundation \t0x00000001a0220804 0x1a01ab000 + 481284\n11 libsystem_pthread.dylib \t0x000000022b9ef344 _pthread_start + 136\n\nThread 8:\n0 libsystem_kernel.dylib \t0x00000001f239da90 __workq_kernreturn + 8\n1 libsystem_pthread.dylib \t0x000000022b9eca58 _pthread_wqthread + 368\n\nThread 9 name: com.apple.NSURLConnectionLoader\nThread 9:\n0 libsystem_kernel.dylib \t0x00000001f239dce4 mach_msg2_trap + 8\n1 libsystem_kernel.dylib \t0x00000001f23a139c mach_msg2_internal + 76\n2 libsystem_kernel.dylib \t0x00000001f23a12b8 mach_msg_overwrite + 428\n3 libsystem_kernel.dylib \t0x00000001f23a1100 mach_msg + 24\n4 CoreFoundation \t0x00000001a15437a0 0x1a1532000 + 71584\n5 CoreFoundation \t0x00000001a1542090 0x1a1532000 + 65680\n6 CoreFoundation \t0x00000001a1543adc CFRunLoopRunSpecific + 572\n7 CFNetwork \t0x00000001a2b71db8 0x1a2ad2000 + 654776\n8 Foundation \t0x00000001a0220804 0x1a01ab000 + 481284\n9 libsystem_pthread.dylib \t0x000000022b9ef344 _pthread_start + 136\n\nThread 10:\n0 libsystem_kernel.dylib \t0x00000001f239da90 __workq_kernreturn + 8\n1 libsystem_pthread.dylib \t0x000000022b9eca58 _pthread_wqthread + 368\n\nThread 11:\n0 libsystem_kernel.dylib \t0x00000001f239da90 __workq_kernreturn + 8\n1 libsystem_pthread.dylib \t0x000000022b9eca58 _pthread_wqthread + 368\n\nThread 12:\n0 (null)\t0x0000000000000000 0x0 + 0\n\nThread 0 crashed with ARM-64 Thread State:\n x0: 0x0000000000000000 x1: 0x0000000000000003 x2: 0x0000000000080008 x3: 0x000000020c095040 \n x4: 0x000000000000320b x5: 0x0000320b00000000 x6: 0x0000000000000002 x7: 0x0000000000000000 \n x8: 0x0000000000000000 x9: 0x0000000200000000 x10: 0x0000000000000003 x11: 0x0000000200000003 \n x12: 0x0000000000002000 x13: 0x0000000000000006 x14: 0x0060000000000000 x15: 0x0000000000000000 \n x16: 0x000000019ff7bec0 x17: 0x000000020e9aa740 x18: 0x0000000000000000 x19: 0x00000001028476e0 \n x20: 0x00000001117b90c0 x21: 0x0000000000000000 x22: 0x0000000000000110 x23: 0x0000000000000000 \n x24: 0x0000000000000000 x25: 0x000000020c0988a0 x26: 0x000000020c095040 x27: 0xffe00040fffffffc \n x28: 0x000000020c0988a0 cpsr: 0x0000000080000000 fp: 0x000000016d60a1a0 lr: 0x00000001027fa0e4 \n pc: 0x000000010283058c sp: 0x000000016d60a190 \n\nBinary Images:\n0x1027f4000 - 0x102b9bfff AwsHackerNewsDemo arm64 <b5ad78c224fd35958bb32d83f6a3bfe8> /var/containers/Bundle/Application/56D27E23-F6DA-43AF-94FD-857D261B7858/AwsHackerNewsDemo.app/AwsHackerNewsDemo\n0x104068000 - 0x104073fff libobjc-trampolines.dylib arm64e <def9fca06da1332796903b879ffc755c> /private/preboot/Cryptexes/OS/usr/lib/libobjc-trampolines.dylib\n0x19eab4000 - 0x19eb05bb3 libobjc.A.dylib arm64e <e8825548d1483ee2807639ea9cb11129> /usr/lib/libobjc.A.dylib\n0x19eb06000 - 0x19fbe467f MetalPerformanceShadersGraph arm64e <a017ca39559b3e398eececa17c2181da> /System/Library/Frameworks/MetalPerformanceShadersGraph.framework/MetalPerformanceShadersGraph\n0x19fbe5000 - 0x1a014e29f libswiftCore.dylib arm64e <4a7bace5ee57375ab860cd7f1ca9e6af> /usr/lib/swift/libswiftCore.dylib\n0x1a014f000 - 0x1a0176fff libswiftPrespecialized.dylib arm64e <d9d0e8b9809a3bf0861f605735d6c20f> /usr/lib/libswiftPrespecialized.dylib\n0x1a0177000 - 0x1a01aaf7f CoreServicesInternal arm64e <c974747eeb2932d5bc2416090ad79d08> /System/Library/PrivateFrameworks/CoreServicesInternal.framework/CoreServicesInternal\n0x1a01ab000 - 0x1a0e1f05f Foundation arm64e <c031896b2ef13d89966a0b52d54bceee> /System/Library/Frameworks/Foundation.framework/Foundation\n0x1a0e20000 - 0x1a1091c3f WebGPU arm64e <600d242653293382857b7e1768c26f5b> /System/Library/PrivateFrameworks/WebGPU.framework/WebGPU\n0x1a1092000 - 0x1a12ec67f Metal arm64e <1bf8c468258d302fb1edfab3291b90f7> /System/Library/Frameworks/Metal.framework/Metal\n0x1a12ed000 - 0x1a1531f7f CoreServices arm64e <40effdfff21c3ff3b8b0a1275591d31d> /System/Library/Frameworks/CoreServices.framework/CoreServices\n0x1a1532000 - 0x1a1aaefff CoreFoundation arm64e <ae3c93380166397a9643356b14f6ee58> /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation\n0x1a1aaf000 - 0x1a2ad175f Network arm64e <d722be9e094c3f07a0b2045b9538f523> /System/Library/Frameworks/Network.framework/Network\n0x1a2ad2000 - 0x1a2e9735f CFNetwork arm64e <271cab2fd622384c8a7f2b5857119e0d> /System/Library/Frameworks/CFNetwork.framework/CFNetwork\n0x1a2e98000 - 0x1a30b883f CoreTelephony arm64e <075772c9f3df3f2f8d53008eed17d8b5> /System/Library/Frameworks/CoreTelephony.framework/CoreTelephony\n0x1a30b9000 - 0x1a347369f QuartzCore arm64e <84083889ad8a3201a2683e06b01014f9> /System/Library/Frameworks/QuartzCore.framework/QuartzCore\n0x1a3474000 - 0x1a366addf CoreText arm64e <dc78990aa3843d7da28d077c218af501> /System/Library/Frameworks/CoreText.framework/CoreText\n0x1a366b000 - 0x1a3d71e5f CoreGraphics arm64e <fb10b1178497383aa37ff4a4cc275ae3> /System/Library/Frameworks/CoreGraphics.framework/CoreGraphics\n0x1a3e30000 - 0x1a5d7255f UIKitCore arm64e <5e794caa41623ff6861e45f29f6b8ac0> /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore\n0x1a5d73000 - 0x1a6ff67bf SwiftUI arm64e <431499857d90345d8c31b764e66e9c4e> /System/Library/Frameworks/SwiftUI.framework/SwiftUI\n0x1a6ff7000 - 0x1a75cbb1f ImageIO arm64e <ac0dcb11913c375eb6979ca038d34330> /System/Library/Frameworks/ImageIO.framework/ImageIO\n0x1a75cc000 - 0x1a790a3cf vImage arm64e <bf3c5537d43039c1adce3a39f1dbb81a> /System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/vImage\n0x1a790b000 - 0x1a94cc03f GeoServices arm64e <0cf2ccb19c2437e7b09ad1689b4da118> /System/Library/PrivateFrameworks/GeoServices.framework/GeoServices\n0x1a94cd000 - 0x1a9512b3f libdispatch.dylib arm64e <b62778f758273a7ba96da24f7be95416> /usr/lib/system/libdispatch.dylib\n0x1a9513000 - 0x1a95926c3 libsystem_c.dylib arm64e <335cd87d234b3fc182db943350d31a88> /usr/lib/system/libsystem_c.dylib\n0x1a9593000 - 0x1a9595fcf libsystem_coreservices.dylib arm64e <477e7f30ddb632b2a9de418669eade6e> /usr/lib/system/libsystem_coreservices.dylib\n0x1a9596000 - 0x1a959711f AggregateDictionary arm64e <7abadd23ba0f3a7ca887bfb89365e067> /System/Library/PrivateFrameworks/AggregateDictionary.framework/AggregateDictionary\n0x1a9598000 - 0x1a9635a9f BackBoardServices arm64e <4352a6e9a4fa30a29bf166c69b9d6e26> /System/Library/PrivateFrameworks/BackBoardServices.framework/BackBoardServices\n0x1a9636000 - 0x1a970f43f BaseBoard arm64e <c7b632dc3e053a77becb951986fd7284> /System/Library/PrivateFrameworks/BaseBoard.framework/BaseBoard\n0x1a9710000 - 0x1a9b0897f CoreData arm64e <80d683c7b7913f9398f7e53306d5f056> /System/Library/Frameworks/CoreData.framework/CoreData\n0x1a9b09000 - 0x1a9e9575f CloudKit arm64e <2decd965a6e03fecaab3b3aa40d00811> /System/Library/Frameworks/CloudKit.framework/CloudKit\n0x1a9e96000 - 0x1aa07083f Security arm64e <8a4b0e75c8f33bcba4f64794061054fa> /System/Library/Frameworks/Security.framework/Security\n0x1aa071000 - 0x1aa135c3f IOKit arm64e <04f7d95643f83abe9fe1029087d6c97d> /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit\n0x1aa136000 - 0x1aa22dadf SpringBoardFoundation arm64e <bbf1d57dd5253132aff20b0b1b72ab12> /System/Library/PrivateFrameworks/SpringBoardFoundation.framework/SpringBoardFoundation\n0x1aa22e000 - 0x1aa6e291f ContactsUI arm64e <41e7904a44a53c5993f9d23928fc4ab2> /System/Library/Frameworks/ContactsUI.framework/ContactsUI\n0x1aa6e3000 - 0x1aaa1973f MapKit arm64e <d6d595cdc9f93d77848599481b73ce99> /System/Library/Frameworks/MapKit.framework/MapKit\n0x1aaa1a000 - 0x1aabac78b ColorSync arm64e <cfd33aa36ef53090863fb27839b79959> /System/Library/Frameworks/ColorSync.framework/ColorSync\n0x1aabad000 - 0x1aabc3560 libswiftDispatch.dylib arm64e <28babaed25ca3448be8a30aff6324646> /usr/lib/swift/libswiftDispatch.dylib\n0x1aac88000 - 0x1aad7da07 Combine arm64e <9520be0dd3bb3bdc85e11232228f9074> /System/Library/Frameworks/Combine.framework/Combine\n0x1aad7e000 - 0x1aad9b4df SharedWithYouCore arm64e <06598bb859993654974fdb370fae28f7> /System/Library/Frameworks/SharedWithYouCore.framework/SharedWithYouCore\n0x1aaf34000 - 0x1ab3bcd9f MobileSafari arm64e <3fc397432786373ba9cfb042dd56117c> /System/Library/PrivateFrameworks/MobileSafari.framework/MobileSafari\n0x1ab3bd000 - 0x1ab3bd367 libswiftUIKit.dylib arm64e <07032fdb352532678ee7ea5c33821bf2> /usr/lib/swift/libswiftUIKit.dylib\n0x1ab3be000 - 0x1ab683dd3 libicucore.A.dylib arm64e <743d6e3267613b43ad2f8a9d45cb067a> /usr/lib/libicucore.A.dylib\n0x1ab684000 - 0x1ab70ccbf PersonalizationPortrait arm64e <3983079661d83eb69ec9b215ca6e9a1c> /System/Library/PrivateFrameworks/PersonalizationPortrait.framework/PersonalizationPortrait\n0x1ab70d000 - 0x1abce4a9f Intents arm64e <91841049a2a939be85d8eb4c3a0e43ee> /System/Library/Frameworks/Intents.framework/Intents\n0x1abce5000 - 0x1abe0e5df CoreSpotlight arm64e <038d9c394f6f3938b4e81499d425ded6> /System/Library/Frameworks/CoreSpotlight.framework/CoreSpotlight\n0x1abe0f000 - 0x1abe4813f Pasteboard arm64e <49a923338b2e334781df703c656bc898> /System/Library/PrivateFrameworks/Pasteboard.framework/Pasteboard\n0x1abe49000 - 0x1abf1ad9f TextInput arm64e <9b3452b48f41375eb75bd6cad668c750> /System/Library/PrivateFrameworks/TextInput.framework/TextInput\n0x1abf1b000 - 0x1ac09423f AccessibilityUtilities arm64e <389f847a4e67305f98ca4311a2aeafec> /System/Library/PrivateFrameworks/AccessibilityUtilities.framework/AccessibilityUtilities\n0x1ac17a000 - 0x1ac98981f AppleMediaServices arm64e <8bdba75181343d06a45ed299bc3bb355> /System/Library/PrivateFrameworks/AppleMediaServices.framework/AppleMediaServices\n0x1ac98a000 - 0x1acd28bcb CoreNavigation arm64e <07ed43420805304ba017c44d7adbcfe5> /System/Library/PrivateFrameworks/CoreNavigation.framework/CoreNavigation\n0x1acd29000 - 0x1acdb2507 SystemConfiguration arm64e <d40e499cd89d38339b3ad67d21309d5f> /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration\n0x1acdb3000 - 0x1acf2fa9f CoreUtils arm64e <cbdabcd0bce73884aabc611d03e07cb3> /System/Library/PrivateFrameworks/CoreUtils.framework/CoreUtils\n0x1acf30000 - 0x1acfaffff libswift_Concurrency.dylib arm64e <7d7ad359d240391b8e01a01153d84033> /usr/lib/swift/libswift_Concurrency.dylib\n0x1acfb0000 - 0x1ad11277f UIFoundation arm64e <07dc72b48cd7374d86c6934b01ba4017> /System/Library/PrivateFrameworks/UIFoundation.framework/UIFoundation\n0x1ad113000 - 0x1ad1443ff CoreEmoji arm64e <614b6cf8ec403b6eb4bf569dd0a694e1> /System/Library/PrivateFrameworks/CoreEmoji.framework/CoreEmoji\n0x1ad145000 - 0x1ad6cfd1f BiomeStreams arm64e <327082d3509838f29fc5b1dd7df75880> /System/Library/PrivateFrameworks/BiomeStreams.framework/BiomeStreams\n0x1ad6d0000 - 0x1ad72039f CoreDuetContext arm64e <816bc260a659304bbc23c3db86b2ddb0> /System/Library/PrivateFrameworks/CoreDuetContext.framework/CoreDuetContext\n0x1ad721000 - 0x1ad94e31f CoreDuet arm64e <ea1926ecd3b63588984281cbf73ef964> /System/Library/PrivateFrameworks/CoreDuet.framework/CoreDuet\n0x1ad94f000 - 0x1ae5716df ChatKit arm64e <51d6d9871b753119bb64eff23eadec22> /System/Library/PrivateFrameworks/ChatKit.framework/ChatKit\n0x1ae572000 - 0x1ae5c481f SharedWithYou arm64e <005dbf9d80d33174a3f626cb6268813a> /System/Library/Frameworks/SharedWithYou.framework/SharedWithYou\n0x1ae5c5000 - 0x1ae5d79bf PointerUIServices arm64e <6d4bd2dad1eb3dcfaa96c926aea6457e> /System/Library/PrivateFrameworks/PointerUIServices.framework/PointerUIServices\n0x1ae5d8000 - 0x1ae61d87f AppSupport arm64e <14288933152b35bc885821b06d684b55> /System/Library/PrivateFrameworks/AppSupport.framework/AppSupport\n0x1ae61e000 - 0x1ae6c955f SpringBoardServices arm64e <919187a287db3063b01dbba94833cde8> /System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices\n0x1ae6ca000 - 0x1ae783d7f AXCoreUtilities arm64e <847c2299bbf33bfe9c7ca5527cb1fa71> /System/Library/PrivateFrameworks/AXCoreUtilities.framework/AXCoreUtilities\n0x1ae784000 - 0x1ae90c09f CoreMedia arm64e <903218ad21573e889abdd106dbaf46f1> /System/Library/Frameworks/CoreMedia.framework/CoreMedia\n0x1ae90d000 - 0x1aecb833f AudioToolboxCore arm64e <9c7fa16dfcb631aa8560cdd62b1650a6> /System/Library/PrivateFrameworks/AudioToolboxCore.framework/AudioToolboxCore\n0x1aecb9000 - 0x1aecd09bf libAudioStatistics.dylib arm64e <00ea5adb487d35f7be625c5f96f34b6c> /usr/lib/libAudioStatistics.dylib\n0x1aecd1000 - 0x1aed0bebf libAccessibility.dylib arm64e <2c3179cc6eee3435a060bb1e6fac2bc8> /usr/lib/libAccessibility.dylib\n0x1aed0c000 - 0x1af129b7f CoreMotion arm64e <b73a47a293db3101aaecbf4e17ed83bb> /System/Library/Frameworks/CoreMotion.framework/CoreMotion\n0x1af12a000 - 0x1af39991f CoreLocation arm64e <67670b77bbef3690aa0f27954d349ced> /System/Library/Frameworks/CoreLocation.framework/CoreLocation\n0x1af39a000 - 0x1af45fc5f ContactsFoundation arm64e <9ea7c74d1e69312e8bfd70adfe76d444> /System/Library/PrivateFrameworks/ContactsFoundation.framework/ContactsFoundation\n0x1af460000 - 0x1af67e87f Contacts arm64e <a36d365cf60f3c33b29d99826144eb31> /System/Library/Frameworks/Contacts.framework/Contacts\n0x1af67f000 - 0x1af6b599f ProactiveEventTracker arm64e <0db4787ca7bb38c1a00ef0e766bd4198> /System/Library/PrivateFrameworks/ProactiveEventTracker.framework/ProactiveEventTracker\n0x1af6b6000 - 0x1af6ec7bf UserManagement arm64e <013442dd65e6387aa5a99a2c3c656631> /System/Library/PrivateFrameworks/UserManagement.framework/UserManagement\n0x1af6ed000 - 0x1af80a79f ChronoServices arm64e <3636af8d41a03aca875006dd2a90a9c1> /System/Library/PrivateFrameworks/ChronoServices.framework/ChronoServices\n0x1af80b000 - 0x1af89305f CalendarFoundation arm64e <a7db4c8c23fe38e9ba3604040186fe6f> /System/Library/PrivateFrameworks/CalendarFoundation.framework/CalendarFoundation\n0x1af894000 - 0x1b030d49f PassKitCore arm64e <7183877ca3fc3b48a2debe5e4fcc2faa> /System/Library/PrivateFrameworks/PassKitCore.framework/PassKitCore\n0x1b030e000 - 0x1b03872df IMFoundation arm64e <1d42b988b12a3dabadd202b45d68d1e0> /System/Library/PrivateFrameworks/IMFoundation.framework/IMFoundation\n0x1b0388000 - 0x1b053e0ff IDS arm64e <38db25633b7f3569800130162e207e91> /System/Library/PrivateFrameworks/IDS.framework/IDS\n0x1b053f000 - 0x1b057421f UIKitServices arm64e <d8c8e941c8973b08baa34460a1034db9> /System/Library/PrivateFrameworks/UIKitServices.framework/UIKitServices\n0x1b0575000 - 0x1b077d8df WidgetKit arm64e <b17d606fce0636248888ebdeb9e18509> /System/Library/Frameworks/WidgetKit.framework/WidgetKit\n0x1b077e000 - 0x1b09557ff TeaFoundation arm64e <bc5d9f51cdff3ec5b5e3013476b1847f> /System/Library/PrivateFrameworks/TeaFoundation.framework/TeaFoundation\n0x1b0956000 - 0x1b0a1267f ExtensionFoundation arm64e <99c73055abe7351685244f91f084a567> /System/Library/Frameworks/ExtensionFoundation.framework/ExtensionFoundation\n0x1b0a13000 - 0x1b0a727bf RunningBoardServices arm64e <dde2ab2c3d81388e850707030fd4fdc9> /System/Library/PrivateFrameworks/RunningBoardServices.framework/RunningBoardServices\n0x1b0a73000 - 0x1b0b076ff libTelephonyUtilDynamic.dylib arm64e <69bd09ef986b394199ff4575abe81584> /usr/lib/libTelephonyUtilDynamic.dylib\n0x1b0b08000 - 0x1b19c49df Espresso arm64e <db30856fdc093f14b954c3d8de1f1e16> /System/Library/PrivateFrameworks/Espresso.framework/Espresso\n0x1b1ab8000 - 0x1b1bd059f CoreNLP arm64e <689e9ddb773f33588e69537cd5a905a1> /System/Library/PrivateFrameworks/CoreNLP.framework/CoreNLP\n0x1b1bd1000 - 0x1b1c10fef libsystem_malloc.dylib arm64e <23c37642b23b34a8bd542ac0b5f36047> /usr/lib/system/libsystem_malloc.dylib\n0x1b1c11000 - 0x1b1c29a7f libswiftos.dylib arm64e <5ea9383eaa24328e81f28923c69a6a32> /usr/lib/swift/libswiftos.dylib\n0x1b1c2a000 - 0x1b1e6e9ff MapsUI arm64e <c84918c9127f31d5a7889078b08182f8> /System/Library/PrivateFrameworks/MapsUI.framework/MapsUI\n0x1b1e6f000 - 0x1b1e98d1f libsystem_info.dylib arm64e <9aa5d2ab42c63a38ab25af6ce947e7dd> /usr/lib/system/libsystem_info.dylib\n0x1b1e99000 - 0x1b1f28ff7 libc++.1.dylib arm64e <2fbf38d8e5a53ffe9f8736a797ea4cdb> /usr/lib/libc++.1.dylib\n0x1b1f29000 - 0x1b206a5bf AuthKit arm64e <185a67dd9ba33cc496c5fb3248ddb737> /System/Library/PrivateFrameworks/AuthKit.framework/AuthKit\n0x1b206b000 - 0x1b20e787f TrialProto arm64e <490bc34f8b22395791f481d83d53dd01> /System/Library/PrivateFrameworks/TrialProto.framework/TrialProto\n0x1b20e8000 - 0x1b211157f RTCReporting arm64e <3efb3881d31c341d88d2ca8a2d9c3c47> /System/Library/PrivateFrameworks/RTCReporting.framework/RTCReporting\n0x1b2112000 - 0x1b24dc93f CoreImage arm64e <76fdd773dd013b86923fcda1cc81cea2> /System/Library/Frameworks/CoreImage.framework/CoreImage\n0x1b24dd000 - 0x1b292181f VideoToolbox arm64e <543f6c2e483c3af68702d24fe17d8912> /System/Library/Frameworks/VideoToolbox.framework/VideoToolbox\n0x1b2922000 - 0x1b347b33f MediaToolbox arm64e <c84f787e680b35a29579efc783b9fd65> /System/Library/Frameworks/MediaToolbox.framework/MediaToolbox\n0x1b347c000 - 0x1b3704f1f AVFCore arm64e <c0729e589a623798a6efc603c77d6119> /System/Library/PrivateFrameworks/AVFCore.framework/AVFCore\n0x1b3705000 - 0x1b3957c5f MediaExperience arm64e <596251590bc235eb831e9aa9c7066941> /System/Library/PrivateFrameworks/MediaExperience.framework/MediaExperience\n0x1b3958000 - 0x1b3d0ed5f MediaRemote arm64e <aa4942c6521e3219b0fda3ff2802d47c> /System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote\n0x1b3d0f000 - 0x1b419eaff MediaPlayer arm64e <ed67ee2b5b833d90b7a2ccca7282dc65> /System/Library/Frameworks/MediaPlayer.framework/MediaPlayer\n0x1b419f000 - 0x1b74e3cdf WebCore arm64e <594b96178dce30e2b40e97ce8511ea34> /System/Library/PrivateFrameworks/WebCore.framework/WebCore\n0x1b75a0000 - 0x1b8aa9d9f WebKit arm64e <38f840de4cb93015b3cb931934d315b8> /System/Library/Frameworks/WebKit.framework/WebKit\n0x1b8aaa000 - 0x1ba3bd17f JavaScriptCore arm64e <a8879ed504303775bf58e2e1efcc8ed1> /System/Library/Frameworks/JavaScriptCore.framework/JavaScriptCore\n0x1ba3be000 - 0x1ba3f589f RemoteTextInput arm64e <a69da4af2c04369fbb6faf932d0e4517> /System/Library/PrivateFrameworks/RemoteTextInput.framework/RemoteTextInput\n0x1ba3f6000 - 0x1ba40a17f UniformTypeIdentifiers arm64e <566c9cc1034230e7b2b08887fbde5821> /System/Library/Frameworks/UniformTypeIdentifiers.framework/UniformTypeIdentifiers\n0x1ba40b000 - 0x1ba79d97f Photos arm64e <09b225f678fa39879ccd22683f87760a> /System/Library/Frameworks/Photos.framework/Photos\n0x1ba79e000 - 0x1bb0e971f PhotoLibraryServices arm64e <3f166ea8c0743e50951441a4f0bb0433> /System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices\n0x1bb0ea000 - 0x1bb20b8ff PhotoLibraryServicesCore arm64e <eff70aca04a2348c8fdb4583c168135b> /System/Library/PrivateFrameworks/PhotoLibraryServicesCore.framework/PhotoLibraryServicesCore\n0x1bb20c000 - 0x1bb301eff SocialLayer arm64e <ed5fe0b11fec35878a0662d2b15001a8> /System/Library/PrivateFrameworks/SocialLayer.framework/SocialLayer\n0x1bb302000 - 0x1bb3606ff OnBoardingKit arm64e <6d526e5b3d343acf8e84313de01a3a1a> /System/Library/PrivateFrameworks/OnBoardingKit.framework/OnBoardingKit\n0x1bb361000 - 0x1bb41bb3f AppStoreDaemon arm64e <d06ca1068b5e31e084e9509532e4b458> /System/Library/PrivateFrameworks/AppStoreDaemon.framework/AppStoreDaemon\n0x1bb8a7000 - 0x1bba9317f TelephonyUtilities arm64e <4c94be794d3c3a18b539320f833b4c78> /System/Library/PrivateFrameworks/TelephonyUtilities.framework/TelephonyUtilities\n0x1bba94000 - 0x1bbb678bf FrontBoardServices arm64e <1d4f7bf8ca623218a0749187a2d191ae> /System/Library/PrivateFrameworks/FrontBoardServices.framework/FrontBoardServices\n0x1bbb68000 - 0x1bbbcefff BoardServices arm64e <6aa038f1a87e33eba560f3476e816207> /System/Library/PrivateFrameworks/BoardServices.framework/BoardServices\n0x1bbbcf000 - 0x1bbbfe5ff OctagonTrust arm64e <5019ff70f7df33729a369a19159e6b0a> /System/Library/PrivateFrameworks/OctagonTrust.framework/OctagonTrust\n0x1bbbff000 - 0x1bbcf8cff CoreParsec arm64e <09db78e5ac10390bae9bddb49c8aae85> /System/Library/PrivateFrameworks/CoreParsec.framework/CoreParsec\n0x1bbdc3000 - 0x1bbf0eaff LinkMetadata arm64e <e0f8bcf3b8f037e487a7e817efed94b2> /System/Library/PrivateFrameworks/LinkMetadata.framework/LinkMetadata\n0x1bbf0f000 - 0x1bbf77b1f DoNotDisturb arm64e <0789c728854d39c6a79cb92e4d551bd3> /System/Library/PrivateFrameworks/DoNotDisturb.framework/DoNotDisturb\n0x1bc07f000 - 0x1bc21847f ", "session.id": "7B1F3CA2-1E0E-437C-99D3-B8DD12075320" }, "resource": { "attributes": { "service.name": "AwsHackerNewsDemo", "cloud.region": "us-east-1", "geo.region.iso_code": "US-CA", "device.model.identifier": "iPhone17,2", "os.type": "darwin", "aws.rum.appmonitor.name": "billyzh-kscrash-upstream", "device.id": "0664F696-0D18-40D7-9200-476123CB7D03", "aws.rum.appmonitor.id": "e5b88e3e-e0c9-4ae5-8c3e-316fd9493153", "geo.locality.name": "Palo Alto", "telemetry.sdk.name": "opentelemetry", "os.version": "18.6.2", "cloud.provider": "aws", "telemetry.sdk.language": "swift", "service.version": "1.0.0", "os.description": "iOS Version 18.6.2 (Build 22G100)", "device.model.name": "iPhone 16 Pro Max", "os.name": "iOS", "rum.sdk.version": "1.0.0", "geo.country.iso_code": "US", "telemetry.sdk.version": "2.3.0", "cloud.platform": "aws_rum" } }, "scope": { "name": "io.opentelemetry.kscrash" }, "timestampUnixNano": 1764747918015000000, "observedTimestampUnixNano": 1764747919761751300, "eventName": "device.crash" }