Pyobjc

Latest version: v10.2

Safety actively analyzes 619231 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 7

10.1

* Upgrade framework bindings for the macOS 14.2 SDK

* 579: Make sure the ``install.py`` and ``develop.py`` scripts in the
repository work when run out of tree.

* 577: ``os.fspath(someURL)`` will not work with Cocoa URLs (NSURL, CFURLRef) that
refer to local filesystem paths. ``TypeError`` will be raised for other URLs.

This enables using regular Python filesystem APIs with URLs that refer to
local filesystem paths.

* 572: Fix compilation issue when building on macOS 13 or earlier

* Fix build error on ancient macOS versions where clang doesn't support
``-flto=thin``.

* Add a workaround for a crash in pyobjc-core when running the testsuite
on macOS 10.14.

* Fix some issues found while running the testsuite on macOS 10.9 to
macOS 13, instead of only testing on the latest macOS version. Most
issues found where problems in the testsuite itself, but not all.

Some of the changes skip tests on older macOS versions (10.12, 10.13
and 10.14) due to running into what appears to be crashing
platform bugs.

* 581: Fix dependencies between framework binding packages

* Fix build error with the current Python 3.13 alpha release (3.13a2).

10.0

* Update bindings for macOS 14

Symbols newly introduced in macOS 14 were added to the existing bindings,
and the following new bindings were introduced:

* Cinematic

* MediaExtension

* SensitiveContentAnalysis

* Symbols

* The "IMServicePlugIn" bindings are no longer available

The entire framework was deprecated in macOS 10.13 and removed in macOS 14.
The bindings can not be build using the latest SDK, and had (at best) limited
use.

* 542: PyObjC 10 requires Python 3.8 and no longer supports Python 3.7

* 547: Removed all ``MAC_OS_X_VERSION*`` constants from ``objc``.

These constants are needed in practice (switch to :func:`objc.available` to
check for platform availability), and caused unnecessary code churn.

* The value for ``objc.options.deprecation_warnings`` is now a string
instead of an integer.

* 555: Fix unintended incompatibility with pytest in PyObjCTools.TestSupport

* 295: The lazy loading machinery by default no longer uses
``objc.ObjCLazyModule``, but uses module level ``__dir__`` and
``__getattr__`` instead. The class :class:`objc.ObjCLazyModule` is still
available, but is deprecated

As a side effect of this ``objc`` is no longer an attribute of framework
binding packages (e.g ``Foundation.objc`` is no longer a valid attribute).

Another side effect of this is that all attributes added by the import system
are now correctly present in the packages for framework bindings.

And a final side effect is that private symbols (prefixed with underscore) are
no longer imported from dependencies of framework bindings (more closely matching
the ``from dependency import *`` behaviour that the lazy importer emulates.

* Add attribute ``__framework_identifier__`` to all framework bindings with the
identifier of the corresponding system framework.

* 295: Introduce :func:`objc.createFrameworkDirAndGetattr` to
create module level ``__dir__`` and ``__getattr__`` for use by
framework bindings.

* 561: Tests now validate the bundle identifier value used in framework bindings.

This resulted in a number of changes to framework bindings with incorrect
bundle identifier values. This shouldn't affect user code because the
bundle loader falls back on the framework path when the identifier cannot be found.

* 559: Avoid test failures in pyobjc-core when pyobjc-framework-Quartz is
not installed.

* A number of classes can no longer be subclasses in Python because they are marked as non-subclassable
in the macOS 14 SDK (either directly or as "subclassing is deprecated":
``CKAllowedSharingOptions``,
``CKAsset``,
``CKContainer``,
``CKDatabase``,
``CKDatabaseNotification``,
``CKDatabaseSubscription``,
``CKFetchRecordZoneChangesConfiguration``,
``CKNotification``,
``CKNotificationID``,
``CKNotificationInfo``,
``CKOperationConfiguration``,
``CKOperationGroup``,
``CKQuery``,
``CKQueryCursor``,
``CKQueryNotification``,
``CKQuerySubscription``,
``CKRecord``,
``CKRecordID``,
``CKRecordZone``,
``CKRecordZoneID``,
``CKRecordZoneNotification``,
``CKRecordZoneSubscription``,
``CKReference``,
``CKServerChangeToken``,
``CKShare``,
``CKShareMetadata``,
``CKShareParticipant``,
``CKSubscription``,
``CKSyncEngine``,
``CKSyncEngineAccountChangeEvent``,
``CKSyncEngineConfiguration``,
``CKSyncEngineDidFetchChangesEvent``,
``CKSyncEngineDidFetchRecordZoneChangesEvent``,
``CKSyncEngineDidSendChangesEvent``,
``CKSyncEngineEvent``,
``CKSyncEngineFailedRecordSave``,
``CKSyncEngineFailedZoneSave``,
``CKSyncEngineFetchChangesOptions``,
``CKSyncEngineFetchedDatabaseChangesEvent``,
``CKSyncEngineFetchedRecordDeletion``,
``CKSyncEngineFetchedRecordZoneChangesEvent``,
``CKSyncEngineFetchedZoneDeletion``,
``CKSyncEnginePendingDatabaseChange``,
``CKSyncEnginePendingRecordZoneChange``,
``CKSyncEnginePendingZoneDelete``,
``CKSyncEnginePendingZoneSave``,
``CKSyncEngineRecordZoneChangeBatch``,
``CKSyncEngineSendChangesContext``,
``CKSyncEngineSendChangesOptions``,
``CKSyncEngineSentDatabaseChangesEvent``,
``CKSyncEngineSentRecordZoneChangesEvent``,
``CKSyncEngineState``,
``CKSyncEngineStateSerialization``,
``CKSyncEngineStateUpdateEvent``,
``CKSyncEngineWillFetchChangesEvent``,
``CKSyncEngineWillFetchRecordZoneChangesEvent``,
``CKSyncEngineWillSendChangesEvent``,
``CKSystemSharingUIObserver``,
``CKUserIdentity``,
``CKUserIdentityLookupInfo``.

* The encoding of a number of basic types changes, in particular those
of CoreFoundation struct types and SIMD struct types. None of this
should affect user code.

* ``objc.getClassList`` now has an optional positional argument to
ignore classes with a name that aren't identifiers.

* Some of the functionality in CoreFoundation was rewritten in Swift
in macOS 14, with Swift subclasses of ``NSArray`` and ``NSDictionary``.
Those classes break an invariant of PyObjC: the superclass of the root
of the Swift class hierarchy changes when the class is instantiated
for the first time (from ``NSObject`` to the correct superclass).

PyObjC 10 contains a workaround for this by ignoring these classes
unless they are needed to create a proxy for an instance (FB12286520).

* Fix crash when the method signature retrieved from the Objective-C runtime
contains the class name for a method returning ``id``.

* Remove old 32-bit support in metadata override files.

* Restructure ``objc.simd``: The matrix types are now named ``simd_float3x3``
instead of ``matrix_float3x3``, with the older name as an alias (to match
older system headers).

* Fix crash when loading the libdispatch bindings on recent macOS versions
(at least macOS 13, possibly earlier)

* ``dispatch.dispatch_source_t`` is renamed to ``dispatch.dispatch_source_type_t``
to match the type name in C code.

* 569: Xcode 15 has a bug when using weak symbols and targeting older macOS
versions. Switch to the old linker when detecting Xcode 15.

9.2

* 549: Added warning ``objc.ObjCSuperWarning`` that is used
to warn about classes that use argument-less super without binding that
name to ``objc.super``.

The correct code pattern is:


python3
from Foundation import NSObject
from objc import super


class MyObject(NSObject):
def init(self):
self = super().init()
if self is None:
return None

...
return self


* 549: Document that ``objc.super`` must be used instead of
``builtin.super`` when calling superclass methods in a Cocoa subclass.

See `the documentation <(https://pyobjc.readthedocs.io/core/super.html>`_
for more details.

* 550: Add minimal ``pyproject.toml`` to all subprojects

Recent versions of pip give a deprecation warning for projects without
a ``pyproject.toml``, and version 23.1 enabled the ``pyproject.toml``
backend by default. Add a minimal ``pyproject.toml`` to get a consistent
build regardless of the version of pip

* 551: Fix crash in pyobjc-core when using Python 3.12a7.

* 449: Added explicit tests for dealing with Objective-C categories
that are loaded while using classes from Python.

* 552: Fix the version of macOS where the SafariServices framework is
present.

* 552: Fixed some issues found by testing on a macOS 10.11 system

* Trying to implement a method with SIMD types as arguments or return value
will now give a more useful error when the bridge does not support the
signature.

* 554: Fix incomplete metadata for ``CoreMediaIO.CMIOObjectSetPropertyData``

* Fix incorrect metadata for
``xpc.xpc_uuid_create``,
``xpc.xpc_dictionary_set_uuid`` ,
``xpc.xpc_array_set_uuid``,
``JavaScriptCore.JSObjectMakeDeferredPromise``,
``JavaScriptCore.JSValueIsEqual``,
``JavaScriptCore.JSValueIsInstanceOfConstructor``,
``JavaScriptCore.JSValueCreateJSONString``,
``JavaScriptCore.JSValueToNumber``,
``JavaScriptCore.JSValueToStringCopy``,
``JavaScriptCore.JSValueToObject``,
``Quartz.CGImageCreateWithJPEGDataProvider``,
``Quartz.CGImageCreateWithPNGDataProvider``,
``Quartz.CGImageMaskCreate``,
``Quartz.CVBufferCopyAttachment``,
``Quartz.CVMetalTextureCacheCreate``,
``Quartz.CVMetalTextureCacheCreateFromImage``,
``Quartz.CVOpenGLTextureCacheCreate``,
``CoreMedia.CMAudioClockCreate``,
``CoreMedia.CMAudioFormatDescriptionCreate``,
``CoreMedia.CMBlockBufferGetDataPointer``,
``CoreMedia.CMBlockBufferAccessDataBytes``,
``CoreMedia.CMBlockBufferGetDataPointer``,
``CoreMedia.CMAudioFormatDescriptionGetMostCompatibleFormat``,
``CoreMedia.CMAudioFormatDescriptionGetRichestDecodableFormat``,
``CoreMedia.CMSampleBufferCreateWithMakeDataReadyHandler``,
``CoreMedia.CMSampleBufferCreateForImageBufferWithMakeDataReadyHandler``,
``CFNetwork.CFNetServiceBrowserSearchForDomains``,
``CFNetwork.CFNetServiceBrowserStopSearch``,
``CFNetwork.CFNetServiceMonitorStop``,
``CFNetwork.CFNetServiceRegister``,
``CFNetwork.CFNetServiceResolve``,
``CoreText.CTFontCreateCopyWithSymbolicTraits``,
``CoreText.CTFontCreateCopyWithFamily``,
``CoreText.CTFontCreateCopyWithAttributes``,
``CoreMIDI.MIDISourceCreateWithProtocol``,
``CoreMIDI.MIDISourceCreate``,
``CoreMIDI.MIDISetupCreate``,
``CoreMIDI.MIDIDestinationCreate``,
``CoreMIDI.MIDIClientCreate``,
``CoreMIDI.MIDIClientCreateWithBlock``,
``CoreMIDI.MIDIOutputPortCreate``,
``CoreMIDI.MIDIObjectGetStringProperty``,
``CoreMIDI.MIDIObjectGetProperties``,
``CoreMIDI.MIDIObjectGetIntegerProperty``,
``CoreMIDI.MIDIObjectGetDictionaryProperty``,
``CoreMIDI.MIDIObjectGetDataProperty``,
``CoreMIDI.MIDIObjectFindByUniqueID``,
``CoreMIDI.MIDIDestinationCreateWithProtocol``,
``CoreMIDI.MIDIEndpointGetEntity``,
``CoreMIDI.MIDIEntityGetDevice``,
``CoreMIDI.MIDIEntityGetRefCons``,
``CoreMIDI.MIDIEntitySetRefCons``,
``DVDPlayback.DVDRegisterEventCallBack``,
``DiskArbitration.DADiskMountWithArguments``,
``GameController.NSDataFromGCExtendedGamepadSnapShotDataV100``,
``HealthKit.HKAppleWalkingSteadinessClassificationForQuantity``,
``IOSurface.IOSurfaceSetPurgeable``,
``Network.nw_ethernet_channel_send``,

* Removed ``Quartz.CGColorConversionInfoCreateFromListWithArguments``. This function
was already documented as unsupported, but was still present in the framework
wrapper.

* Removed ``Quartz.CVPixelBufferCreateWithPlanarBytes``. This function requires a
manual binding, but was still present with a generic (and non-working) binding.

* Removed ``CoreMedia.CMBufferQueueCreate``, ``CoreMedia.CMBufferQueueGetCallbacksForSampleBuffersSortedByOutputPTS``,
``CoreMedia.CMBufferQueueGetCallbacksForUnsortedSampleBuffers``, ``CoreMedia.CMVideoFormatDescriptionGetH264ParameterSetAtIndex``,
``CoreMedia.CMVideoFormatDescriptionGetHVECParameterSetAtIndex``,
These functions require a manual binding, but were still present with a generic (and non-working) binding.

* Explicitly exclude definitions from ``CMIOHardwarePlugIn.h`` from the CoreMediaIO
bindings.

* Added ``deref_result_pointer`` key to the metadata for a return value. Use this
when a callable returns a pointer to a single value (for example ``CMAudioFormatDescriptionGetMostCompatibleFormat``)

* Removed unsupported functions from the ApplicationServices bindings (not named individually
due to the size of the list). Also fixed annotations for other ApplicationServices bindings.

* Add manual binding for ``CFNetwork.CFNetServiceBrowserCreate``, ``CFNetwork.CFNetServiceSetClient``,
and ``CFNetwork.CFNetServiceMonitorCreate``.

* Fix incompatibility with Python 3.12 beta 1.

**warning:**

Due to changes to the bytecode compiler the bridge will (incorrectly)
deduce that a method does not return a value (``void`` return in Objective-C)
when a method only contains ``return None`` statements and no return
statements that return some other value (expressions or constants).

That is the following method is implied to return ``id`` for Python 3.11 or
earlier, but is implied to return ``void`` in Python 3.12.

python3

def mymethod(self):
return None

8.5.1

This release contains a small number of bug fixes, most import of which is support for Python 3.11

8.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 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.

8.4.1

This is a bug fix release.

* 455: ``pip install pyobjc`` on a macOS 12.2 machine tried
to install ``pyobjc-framework-ScreenCaptureKit``, which is
only can be installed on macOS 12.3 or later.

* 456: Fix bad metadata for ``HIServices.AXIsProcessTrustedWithOptions``

* Wheels were build with Xcode 13.3 RC

There are no changes in framework bindings relative to
PyObjC 8.4 because there are no relevant API changes in
Xcode 13.3 RC.

Page 1 of 7

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.