PyObjCClass_CheckMethodList gets selector information by calling method_getTypeEncoding, passes that result to PyObjCSelector_NewNative which then calls PyObjC_FindReplacementSignature.
When method_getTypeEncoding returns NULL (documented in the objc runtime headers as a valid return value), the data passed to PyObjCSelector_NewNative and then PyObjC_FindReplacementSignature will be NULL.
PyObjC_FindReplacementSignature correctly identifies that this selector is NULL, sets the error string "Selector with NULL or too long signature", returns NULL and then PyObjCSelector_NewNative returns that same NULL to PyObjCClass_CheckMethodList.
PyObjCClass_CheckMethodList does not check for this return value or the error, and tries to add this NULL as a value to a dictionary which subsequently causes Python to crash on a NULL dereference.
PyObjC should check this return value and skip this introspection when the selector is NULL to prevent the crash (and potentially log a warning somewhere).
This issue comes up when trying to load Swift frameworks that have ObjC interfaces, due to a Swift compiler bug described in https://bugs.swift.org/browse/SR-8356