v8.5
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 thesetup.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 insetup.py
now includes the command-line option from the standaard
command, which meanspython 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
commandsetup.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 withCGPDFArrayGetObject
. -
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.