Skip to content

v8.5

Compare
Choose a tag to compare
@ronaldoussoren ronaldoussoren released this 19 Apr 13:06
· 521 commits to master since this release

This release continues the work on test coverage in pyobjc-core,
resulting in a number of minor bug fixes.

  • Added two options to the build_ext command in the setup.py
    of pyobjc-core:

    • --no-lto: Disable link time optimization

    • --no-warnings-as-errors: Disable -Werror

  • For struct bindings in frameworks the "in" operator no longer
    swallows exceptions raised by the __eq__ method.

  • Improved handing of invalid type encodings for struct types.

  • Fix crash while handling a struct wrapper with an invalid
    type encoding.

  • Fix handling of empty structs (such as struct foo { }; in
    :func:objc.repythonify.

  • The type for NSObject.pyobjc_instanceMethod and
    NSObject.pyobjc_classMethods now supports the GC protocol
    to avoid garbage collection issues when the value for these
    properties is stored as an attribute (which introduces a
    reference cycle)

  • PyObjC should work with Python 3.11 alpha release, starting
    at alpha 6. Earlier alpha's are not supported due to reverting
    a workaround for a bug that was fixed in alpha 6.

  • NSObject.alloc = 42 now fails. It was already impossible
    to replace a selector by something else through instances
    (NSObject.new().description = 42 raises).

  • Added :data:objc.ObjCPointer.typestr with the same
    value as :data:objc.ObjCPonter.type. The latter is now
    deprecated and will be removed in PyObjC 9.

  • Better error messages when a class implementing a protocol
    inherits a method of the wrong kind ("class" vs. "instance").

  • The value of __slots__ in a class definition is now
    kept in the created class (previous versions always set
    the attribute to an empty tuple).

    This is primarily useful when __slots__ is a :class:dict
    that is used to document attributes.

  • Raise the correct exception when the name of a method is
    not an ASCII string.

  • :func:objc.loadSpecialVar now better enforces that the
    module_globals argument is a Python dictionary.

  • Fixed a crash in :func:objc.loadSpecialVar due to a
    missing pointer dereference.

  • pip install pyobjc-framework-... for a framework
    that is not present on the current machine will now
    give a better error message when the "wheel" package
    is not installed.

  • Setting an integer option in :data:objc.options to
    a value of an incompatible type (such as a string) will
    now raise an exception as intended, instead of breaking
    the interpreter.

  • Trying to delete an attribute from :data:objc.options
    now raises :type:AttributeError instead of :type:TypeError.

  • :class:objc.selector now copies the default signature
    from its argument when that argument is another :class:objc.selector.

    Until now this would raise an exception.

  • Added some missing error checking in calls to :c:func:PyObject_New
    and :c:func:PyObject_GC_New.

  • It is now possible to create an :class:objc.selector from
    a callable that is not a function or bound method. This may
    require specifying the method signature in the call
    to :class:objc.selector.

  • For pyobjc-core the build_ext command in setup.py
    now includes the command-line option from the standaard
    command, which means python setup.py build_ext -j 4
    can now be used for parallel builds.

    On my M1 laptop using python setup.py build_ext -j 8
    halves the time needed to build the extension.

  • The test command setup.py now supports
    the -v option to print test cases while they are run,
    in previoius versions this required using the --verbosity
    option.

  • Improve error handling when dealing with "isHidden" selectors.

  • Added pyobjc_hiddenSelectors(classmethods) to :class:objc.objc_class

    This method returns a copy of the dictionary with "hidden" selectors,
    that is Objective-C selectors that are hidden from view.

    The method is primarily a debugging aid for development of
    PyObjC itself.

  • #456: ApplicationServices.AXIsProcessTrustedWithOptions and
    Quartrz.CGPDFArrayGetObject had incorrect metadata.

    The testsuites for the various framework bindings now have a test
    that does some basic checks on function and selector metadata. This
    test found the problem with CGPDFArrayGetObject.

  • Added :data:objc._C_ATOMIC and :data:objc._C_COMPLEX, both
    extracted from the clang sources after finding some type encodings
    that PyObjC could not decode.

    :data:objc._C_ATOMIC is ignored by PyObjC (for now), and
    :data:objc._C_COMPLEX is not yet supported.

  • #456: Fix internal error for _C_OUT argument markup on
    arguments that are CoreFoundation types.

    This can only happen with invalid metadata definitions in framework
    bindings, and earlier versions this resulted in an internal
    assertion error. With this change the "output" argument is always
    None in the result.

  • #463: Fix metadata for a number of functions with a C string argument

    The metadata for the following functions was changed to have
    the correct type encoding for string argument, to fix issues with
    using non-ASCII (byte) strings.

    • ApplicationServices.PMWorkflowSubmitPDFWithOptions
    • CoreServices.LocaleRefGetPartString
    • Foundation.NSGetSizeAndAlignment
    • Network.nw_advertise_descriptor_create_bonjour_service
    • Network.nw_browse_descriptor_create_bonjour_service
    • Network.nw_browse_descriptor_get_bonjour_service_domain
    • Network.nw_browse_descriptor_get_bonjour_service_type
    • Network.nw_connection_copy_description
    • Network.nw_content_context_create
    • Network.nw_content_context_get_identifier
    • Network.nw_endpoint_copy_address_string
    • Network.nw_endpoint_copy_port_string
    • Network.nw_endpoint_create_bonjour_service
    • Network.nw_endpoint_create_host
    • Network.nw_endpoint_create_url
    • Network.nw_endpoint_get_bonjour_service_domain
    • Network.nw_endpoint_get_bonjour_service_name
    • Network.nw_endpoint_get_bonjour_service_type
    • Network.nw_endpoint_get_hostname
    • Network.nw_framer_create_definition
    • Network.nw_framer_message_access_value
    • Network.nw_framer_message_copy_object_value
    • Network.nw_framer_message_set_object_value
    • Network.nw_framer_message_set_value
    • Network.nw_framer_options_set_object_value
    • Network.nw_listener_create_with_port
    • Network.nw_privacy_context_create
    • Network.nw_quic_get_application_error_reason
    • Network.nw_quic_set_application_error
    • Network.nw_txt_record_access_key
    • Network.nw_ws_options_add_additional_header
    • Network.nw_ws_options_add_subprotocol
    • Quartz.CGContextSelectFont
    • Quartz.CGContextShowText
    • Quartz.CGContextShowTextAtPoint
    • Quartz.CGDataProviderCreateWithFilename
    • Quartz.CGPDFArrayGetName
    • Quartz.CGPDFContentStreamGetResource
    • Quartz.CGPDFDictionaryGetArray
    • Quartz.CGPDFDictionaryGetBoolean
    • Quartz.CGPDFDictionaryGetName
    • Quartz.CGPDFDocumentUnlockWithPassword
    • Quartz.CGPDFScannerPopName
    • Quartz.CGPDFTagTypeGetName

    While fixing this issue I found problems with the metadata for these functions:

    • CoreMIDI.MIDIExternalDeviceCreate
    • CoreMedia.CMBlockBufferAccessDataBytes
    • CoreMedia.CMBlockBufferGetDataPointer
    • CoreMedia.CMBufferQueueInstallTriggerHandler
    • CoreMedia.CMBufferQueueInstallTriggerHandlerWithIntegerThreshold
    • CoreMedia.CMTextFormatDescriptionGetJustification
    • CoreServices.TECGetTextEncodingFromInternetNameOrMIB
    • DVDPlayback.DVDGetScanRate
    • MediaAccessibility.MACaptionAppearanceAddSelectedLanguage

    There's also a new test that checks for this problem in all
    exposed functions.

  • Fix incorrect reset of the "inline_list" attribute of the lazy importer,
    this could result in an incorrect TypeError when trying to access
    an non-existing attribute after looking at __all__.

  • Fix uniqueness of symbols exposed in the OpenDirectory bindings.

  • Unhide manual bindings for Security.SecKeychainFindGenericPassword and
    Security.SecKeychainFindInternetPassword.