macOS application random crash inside system Contacts framework

Hi,

I encountered a crash that happens randomly on certain macOS. Here's the crash log. For clarity, only the crashed queue's stack trace is added.

Process:               Engage [6891]
Path:                  /Applications/Engage.app/Contents/MacOS/Engage
Identifier:            com.mycompany.engage
Version:               2.0.1 (20111120)
Code Type:             X86-64 (Native)
Parent Process:        ??? [1]
Responsible:           Engage [6891]
User ID:               2123560928

Date/Time:             2021-11-17 16:36:20.753 +0800
OS Version:            Mac OS X 10.14.6 (18G9323)
Report Version:        12
Anonymous UUID:        C642EE95-AF30-723E-91B8-A1C9D4ECD9A6

Sleep/Wake UUID:       B95DB75A-69E8-4F19-B735-CEC7A698AE00

Time Awake Since Boot: 40000 seconds
Time Since Wake:       910 seconds

System Integrity Protection: enabled

Crashed Thread:        5  Dispatch queue: Contacts fetching queue

Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes:       0x0000000000000001, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Illegal instruction: 4
Termination Reason:    Namespace SIGNAL, Code 0x4
Terminating Process:   exc handler [6891]

Application Specific Information:
API MISUSE: Resurrection of an object

Thread 0:: Dispatch queue: com.apple.main-thread
...
Thread 1:
...
Thread 2:
...
Thread 3:
...
Thread 4:: Dispatch queue: com.apple.root.background-qos
...
Thread 5 Crashed:: Dispatch queue: Contacts fetching queue
0   libdispatch.dylib             	0x00007fff703929a6 _os_object_retain + 34
1   com.apple.AppKit              	0x00007fff41bbc6da -[_NSWorkspaceFileOperation initWithQueue:URLs:operation:completionHandler:] + 111
2   com.apple.AppKit              	0x00007fff41bbc5a0 -[NSWorkspace recycleURLs:completionHandler:] + 726
3   com.apple.AddressBook.core    	0x00007fff53cd5004 -[ABPersistentStoreBuilder removeDotNewPathForDatabasePath] + 212
4   com.apple.AddressBook.core    	0x00007fff53cd42f3 -[ABPersistentStoreBuilder addPersistentStoreAtDatabasePath:] + 61
5   com.apple.AddressBook.core    	0x00007fff53cd3da4 -[ABPersistentStoreCoordinatorFactory addStoresForAccounts:withStoreBuilder:] + 333
6   com.apple.AddressBook.core    	0x00007fff53cccd7f -[ABPersistentStoreCoordinatorFactory pool_makeCoordinatorForAllAvailableSources] + 114
7   com.apple.AddressBook.core    	0x00007fff53ccccc1 ABResultWithAutoreleasePool + 59
8   com.apple.AddressBook.core    	0x00007fff53cccc80 -[ABPersistentStoreCoordinatorFactory makeCoordinatorForAllAvailableSources] + 65
9   com.apple.AddressBook.core    	0x00007fff53ccca4c -[ABPersistentStoreCoordinatorMap nts_coordinatorForAllSourcesAndDidUpdateMap:] + 114
10  com.apple.AddressBook.core    	0x00007fff53ccc99d -[ABPersistentStoreCoordinatorCache coordinatorForAllSources] + 55
11  com.apple.AddressBook.core    	0x00007fff53ccc777 -[ABAddressBook(ABAddressBook_CoreData_Private) nts_managedObjectContextWithStoreDescription:databasePath:loadFailure:] + 288
12  com.apple.AddressBook.core    	0x00007fff53ccc377 -[ABAddressBook(ABAddressBook_CoreData_Private) managedObjectContext] + 109
13  com.apple.AddressBook.core    	0x00007fff53ccc2c0 __38+[ABAddressBook nts_SharedAddressBook]_block_invoke + 24
14  com.apple.AddressBook.core    	0x00007fff53ccc257 ABRunWithLock + 32
15  com.apple.AddressBook.core    	0x00007fff53cc8873 +[ABAddressBook nts_SharedAddressBook] + 137
16  com.apple.AddressBook.core    	0x00007fff53cc8747 +[ABAddressBook nts_CreateSharedAddressBook] + 47
17  com.apple.AddressBook.core    	0x00007fff53cc817e +[ABAddressBook sharedAddressBook] + 81
18  com.apple.contacts.ContactsPersistence	0x00007fff572427ee -[CNCDPersistenceStack makePersistenceContext] + 27
19  com.apple.contacts            	0x00007fff43d048dd __71+[CNCDContactFetcher contactsForFetchRequest:inPersistenceStack:error:]_block_invoke + 73
20  com.apple.AddressBook.ContactsFoundation	0x00007fff571e407a +[CNEither eitherWithBlock:] + 63
21  com.apple.contacts            	0x00007fff43d047e1 +[CNCDContactFetcher contactsForFetchRequest:inPersistenceStack:error:] + 147
22  com.apple.contacts            	0x00007fff43d0462a -[CNCoreDataMapperX contactObservableForFetchRequest:] + 137
23  com.apple.contacts            	0x00007fff43d03fc3 __91-[CNDataMapperContactStore enumerateContactsAndMatchInfoWithFetchRequest:error:usingBlock:]_block_invoke + 172
24  libsystem_trace.dylib         	0x00007fff705f6724 os_activity_apply_f + 66
25  com.apple.contacts            	0x00007fff43d03ed8 -[_CNContactsLogger fetchingContacts:] + 225
26  com.apple.contacts            	0x00007fff43d03cee -[CNDataMapperContactStore enumerateContactsAndMatchInfoWithFetchRequest:error:usingBlock:] + 304
27  com.apple.contacts            	0x00007fff43d16d6e -[CNContactStore enumerateContactsWithFetchRequest:error:usingBlock:] + 149
28  com.mycompany.engage          	0x00000001076181f4 0x1074c6000 + 1384948
29  com.mycompany.engage          	0x00000001076548ce 0x1074c6000 + 1632462
30  libdispatch.dylib             	0x00007fff703925f8 _dispatch_call_block_and_release + 12
31  libdispatch.dylib             	0x00007fff7039363d _dispatch_client_callout + 8
32  libdispatch.dylib             	0x00007fff703998e0 _dispatch_lane_serial_drain + 602
33  libdispatch.dylib             	0x00007fff7039a396 _dispatch_lane_invoke + 385
34  libdispatch.dylib             	0x00007fff703a26ed _dispatch_workloop_worker_thread + 598
35  libsystem_pthread.dylib       	0x00007fff705d3611 _pthread_wqthread + 421
36  libsystem_pthread.dylib       	0x00007fff705d33fd start_wqthread + 13

Thread 6:
...

In the stack trace, two lines that are related to my app

28  com.mycompany.engage          	0x00000001076181f4 0x1074c6000 + 1384948
29  com.mycompany.engage          	0x00000001076548ce 0x1074c6000 + 1632462

It just call the enumerateContacts(with: fetchRequest) on the instance of CNContactStore, and the fetchRequest is created using CNContactFetchRequest(keysToFetch: keysToFetch). Pretty straightforward.

The stack trace goes into he Contacts framework, and then goes into the AddressBook framework, and eventually crashed. What could be the possible cause of the crash?