Releases: ronaldoussoren/pyobjc
v12.1
-
#661: 12.0 incorrectly has support for Python 3.9 in
packaging metadata. -
Update framework bindings for the macOS 26.1 SDK
-
Instances of :type:
bytearraycan be used as the argument for
a function or selector that expects a null-terminated C char array. -
Automatically disable KVO usage for subclasses of NSProxy defined
in Python. -
Fix
SystemErrorwhen callingobjc.propertiesForClass(objc.objc_object). -
objc.classAddMethodsno longer supports callable's whose__name__
attribute is a byte string. -
Clearer error messages when an entry in the methods added with
objc.classAddMethodis invalid. -
Using
objc.classAddMethodsto add a method for which a custom
IMP helper has been registered now works correctly (previously
the default libffi IMP implementation was used in these cases),
and likewise for using :funcsetattrto assign methods. -
It is no longer possible to use :func:
objc.classAddMethodsto
override an existing method with an incompatible Objective-C signature,
and likewise for using :func:setattrto do the same.It was already not possible to override a method from a super class
with an incompatible Objective-C signature. -
It is now possible to use an :class:
objc.objc_methodinstance
in the method list argument for :func:objc.classAddMethod. -
-[OC_PythonObject copy]now actually copies the value if the
value is not known to be immutable (such as subclasses of the
builtin number types).
v12.0
-
Drop support for Python 3.9, which will go out of support
before PyObjC 3.12 is released. -
Added
AVFAudioas a separate toplevel package, instead of keeping
it merged in intoAVFoundation.The package is included in the
pyobjc-framework-AVFoundationdistribution. -
Updated metadata for the macOS 26 SDK.
As part of this introduce bindings for the following new framework bindings:
- ARKit
- CompositorServices
- GameSave
There are no bindings for the
MetalPerformancePrimitivesat this time, it is
a low-level C++ library that would require a lot of work to create bindings. -
In macOS 26 a number of type encodings for block arguments include a signature
for the block interface. Update PyObjC runtime introspection to ignore that
information. -
Dropped old metadata scans. That is, all framework bindings are now created
from the most recent macOS SDK headers with some manual additions and annotations.This change required adding manual entries for, in particular, constants that were
renamed in by now old versions of macOS and have been removed from Apple's headers
by now. These will be removed from PyObjC in a future update as well (but after
a transition period where using them will raise a warning).This has the following user visible side effects (as far as they are
visible, most of the the changes below affect versions of macOS that are long gone):-
Accounts: The following constants are no longer available (on the old versions
of macOS where these were available):ACFacebookAppVersionKey,
ACFacebookPermissionGroupKey,ACFacebookPermissionGroupRead,
ACFacebookPermissionGroupReadWrite, andACFacebookPermissionGroupWrite. -
AppKit: The NSFileWrapper class no longer supports with keyword arguments
path,
andserializedRepresentation, and the keyword set(URL, options, error). -
AuthenticationServices: The classes
ASAccountAuthenticationModificationReplacePasswordWithSignInWithAppleRequest
andASAccountAuthenticationModificationUpgradePasswordToStrongPasswordRequest
no longer have a keyword argument set named(user, serviceIdentifier). -
Automator: class
AMBundleActionno longer accepts the keyword set(definition, fromArchive). -
CFNetwork: The following functions were deprecated before macOS 10.6 and were removed
in the macOS 10.15 SDK:CFHTTPReadStreamSetRedirectsAutomatically, and
CFNetServiceSetProtocolSpecificInformation. -
CloudKit:
CKDiscoverUserInfosOperationno longer recognizes the keyword
set(emailAddresses, userRecordIDs).CKFetchDatabaseChangesOperation
no longer recognizes the keyword argumentpreviousServerChangeToken.
CKShareno longer recognizes the keyword argumentsrecordZoneID,
rootRecord, and the keyword set(rootRecord, shareID).
CKSubscriptionno longer recognizes the keyword argumentcoder,
and the keyword sets(recordType, predicate, options),
(recordType, predicate, subscriptionID, options),
(zoneID, options)andzoneID, subscriptionID, options). -
CoreAudio: The following functions are no longer available (all were deprecated between
macOS 10.5 and 10.8, and removed from the macOS 10.15 SDK):
AudioHardwareClaimAudioDeviceID,AudioHardwareDevicesDied,
AudioHardwareDevicePropertyChanged,AudioHardwareDevicesCreated,AudioObjectCreate,
AudioHardwareStreamPropertyChanged,AudioHardwareClaimAudioStreamID,AudioObjectPropertiesChanged,
AudioHardwareStreamsCreated,AudioObjectsPublishedAndDied,
AudioHardwareStreamsDied.The following constants are no longer available because they are not useful
in python code:CA_PREFER_FIXED_POINTandCOREAUDIOTYPES_VERSION. -
CoreData: The constant
NSFetchRequestExpressionTypeis no longer available. -
CoreLocation:
CLBeaconIdentityConstraintno longer supports the
keywordUUIDand the keyword sets(UUID, major)and(UUID, major, minor). -
CoreServices: The following functions are no longer available (all were removed
in the macOS 10.7 SDK):LSInitandLSTerm. -
CoreText: The constant
kCTVersionNumber10_6_7is no longer available. -
CryptoTokenKit: The following constants are no longer available. Use the modern
names instead:TKSmartCardNoSlot,TKSmartCardSlotEmpty,
TKSmartCardSlotProbing,TKSmartCardSlotMuteCard, andTKSmartCardSlotValidCard. -
DiscRecording: The following constants are no longer available:
DRCDTextEncodingASCII,kDRCDTextEncodingASCII,
DRCDTextEncodingISOLatin1Modified, andkDRCDTextEncodingISOLatin1Modified. -
DiskArbitration: The following constants are no longer available:
kDADiskOptionEjectUponLogout,kDADiskOptionMountAutomatic,
kDADiskOptionMountAutomaticNoDefer, andkDADiskOptionPrivate. -
GameController: The struct type registration
GCExtendedGamepadValueChangedHandler
is gone (the existence of this type was a bug). -
ImageCaptureCore: Constant
ICCameraDeviceSupportsFastPTPis no longer
available (only affects macOS 10.11). -
Intents: Removed constant
INMessageReactionTypeEmojiReaction, use
INMessageReactionTypeEmojiinstead. -
Intents:
INAggregatedMessageReactionno longer accepts the keyword set
reactionType, emoji, reactionCount).INMessageno longer accepts
the keyword sets(identifier, conversationIdentifier, content, dateSent, sender, recipients, groupName, serviceName, messageType, referencedMessage, reaction, aggregatedReactions)
and
(identifier, conversationIdentifier, content, dateSent, sender, recipients, groupName, serviceName, messageType, referencedMessage, sticker, reaction, aggregatedReactions). It
does accept these keyword sets without theaggregatedReactionskeyword though. -
Intents: The
INColorclass no longer accepts the keyword set(read, green, blue). -
Intents: The
INHeadUnitclass no longer accepts the keyword set(bluetoothIdentifier, iap2Identifier). -
Intents: The
INMediaSearchclass no longer accepts the keyword set
(mediaType, sortOrder, mediaName, artistName, albumName, genreNames, moodNames, activityNames, releaseDate, reference, mediaIdentifier). -
Intents: The
INStartCallIntentclass no longer accepts the keyword set
(audioRoute, destinationType, contacts, callCapability). -
JavaScriptCore: Constants
WEBKIT_VERSION_*are no longer available. -
LocalAuthentication: The following constants are no longer available:
kLAOptionAuthenticationReasonandkLAOptionUserFallback. -
Metal: The constant
MTLStitchedLibraryOptionStoreLibraryInMetalScript
is no longer available (was only present in a beta SDK) -
MLCompute: Class
MLCOptimizerno longer has a keyword argument nameddescriptor. -
PassKit: The following constants are no longer available:
PKDisbursementRequestScheduleFutureandPKDisbursementRequestScheduleOneTime.Because of this the type
PKDisbursementRequestSchedulehas been removed as well.The metadata for
PKDisbursementAuthorizationControllerhas been removed.Class
PKShareablePassMetadataPreviewno longer accepts the
keyword set(passThumbnail, localizedDescription). -
PubSub: Class
PSFeedno longer accepts the keywordURLand
the keyword set(data, URL).Note that the entire framework was removed in macOS 10.15, and the Python
bindings will be removed in PyObjC 13 at the latest. -
Quartz: The following constants are no longer available:
CGFLOAT_EPSILON,
CA_TEST,CA_TESTABLE_CLASS,CA_TESTABLE,kCGErrorLast. -
Quartz: The following structs are no longer available (all of them contain
callback pointers which aren't used in PyObjC's bindings for the APIs that use
those structs):CGFunctionCallbacks,CGDataProviderCallbacks,
CGPatternCallbacks,CGDataConsumerCallbacks,CGDataProviderDirectAccessCallbacks,
CGDataProviderSequentialCallbacks, andCGPSConverterCallbacks. -
Quartz: The CIColor class no longer accepts the keyword argument
CGColor. -
Quartz: The CIFilterGenerator class no longer accepts the keyword argument
contentsOfURL. -
Quartz: The CIFilterShape class no longer accepts the keyword argument
rect. -
Quartz: The CImage class no longer accepts the keyword sets
(bitmapData, bytesPerRow, size, format, colorSpace),
(CGImage, options),(CGLayer, options),(CVImageBuffer, options),(CVPixelBuffer, options),
(contentsOfURL, options),(data, options),(IOSurface, options),(IOSurface, plance, format, options),
(imageProvider, size, format, colorSpace, options),(texture, size, flipped, colorSpace),
(texture, size, flipped, options),
and keywordsCGImage,CGLayer,CVImageBuffer,CVPixelBuffer,color,contentsOfURL,
dataandIOSurface. -
Quartz: The CIImageAcculator class no longer accepts the keyword set
(extent, format, colorSpace). -
Quartz: The CISampler class no longer accepts the keyword sets
(image, keysAndValues),(image, options),(values, count),(x, y),
(x, y, z),(x, y, z, w),
and keywordsimage,CGAfineTransform,CGPoint,CGRect,string,
andx. -
ScreenSaver: Class
ScreenSaverViewno longer acceptsframeas its
sole keyword argument (always use it in combination with ``isP...
-
v11.1
The major change in this release is aligning behaviour of the core bridge
with clang's documentation for automatic reference counting <https://clang.llvm.org/docs/AutomaticReferenceCounting.html>_
for initializer methods. In particular, PyObjC now correctly models
that methods in the "init" family steal a reference to self and return
a new reference.
In previous version of PyObjC the proxy for [NSObject alloc] would be
marked as 'partially initialized' and would be cleared when the -init method
returns something else then self.
This has two problems:
-
Behaviour is incorrect when
+allocreturns a singleton whose
-initmethod(s) are factory methods (such asNSArrayin
recent versions of macOS) -
The proxy for Objective-C objects needs to contain mutable state.
This in turn requires locking in the implementation to work
correctly with free-threading.
This version drops the concept of "uninitialized" values and correctly models
how reference counts are handled by -init methods.
-
Update framework bindings for the macOS 15.5 SDK
-
Added bindings for the
SecurityUIframework -
Restructure the PyObjC website
The theme of the PyObjC websites is now shibuya
to give a more modern look and feel to the website.The actual content is mostly still the same, with some minor restructuring
of pages. Restructuring will continue in future updates. -
:class:
objc.FSRefnow implements :class:os.PathLike. -
:issue:
642: Fix concurrency issue when creatingNSArrayinstances
usingNSArray.alloc().init....In previous versions the following would fail on recent versions of macOS:
.. sourcecode:: python
value1 = NSArray.alloc()
value2 = NSArray.alloc()value1 = value1.init()
value2 = value2.init()That's a unrealistic code pattern, but the same can be triggered using
NSArray.alloc().init()when run concurrently in multiple threads,
especially when using free-threading. -
Fixing the previous issue required rearchitecting the way partially
initialized objects (e.g. the result ofSomeClass.alloc()are handled,
and has some other user visible behaviour changes (none of which should
affect normal code):-
:class:
objc.UninitializedDeallocWarningis now soft deprecated because
this warning will never be emitted. -
Bit
0x1will never be set in the__flags__attribute of
Objective-C objects. -
The proxied value of an :class:
objc.objc_objectinstance will never
benil, all exceptions about accessing attributes or methods
of a NIL object are gone. -
It is now possible to call methods on a partially initialized object,
in previous versions that would often result in setting the proxied value
tonil. -
It is now possible to call an
initmethod multiple times an an
partially initialized value, e.g.:.. sourcecode:: python
part = SomeClass.alloc()
value1 = part.init()
value2 = part.init()Whether or not this is safe depends on the implementation of the
Objective-C class. In general it is advised to not use this pattern,
but always callSomeClass.alloc().init...()or the more pythonic
SomeClass(...)introduced in PyObjC 10.3. -
The following code accidentally worked in previous versions of PyObjC
and will now crash. Handling of partially initialized objects in previous
versions hides the reference counting bug in this code... sourcecode:: python
class NilObject(NSObject):
def init(self):
self.release()
return None -
The
isAllocattribute of :class:objc.selectoris deprecated and
will be removed in PyObjC 12. -
The bridge no longer uses
CFRetainandCFReleaseto maintain
the reference counts of Objective-C values. The original reason to do
this is no longer needed, there are edge cases where mixing native ObjC
retain count updates with these functions causes problems.
-
-
Python 3.14: Use
PyUnstable_Object_IsUniquelyReferencedto check if the
dealloc helper is uniquely referenced when trying to release it instead of
manually checking the reference count.This fixes an unlikely edge case in the free threading build where checking
the reference count like this is not correct. -
Deprecated :attr:
objc.objc_object.pyobjc_ISA. -
Implement
__class_getitem__for :class:objc.function,
:class:objc.selector. :class:objc.varlist. and
:class:objc.WeakRefThis allows for treating these classes a generic in type annotations.
-
Add some methods to :class:
PyObjCTools.TestSupport.TestCase, in
particular
:meth:assertIsInitializer <PyObjCTools.TestSupport.TestCase.assertIsInitializer,
:meth:assertIsNotInitializer <PyObjCTools.TestSupport.TestCase.assertIsNotInitializer,
:meth:assertDoesFreeResult <PyObjCTools.TestSupport.TestCase.assertDoesFreeResult,
:meth:assertDoesNotFreeResult <PyObjCTools.TestSupport.TestCase.assertDoesNotFreeResult. -
Add implementation for
NSMutableData.resizeto match :meth:bytearray.resizethat
was introduced in Python 3.14. -
Using a instance of a Python class with an
__call__method as
an Objective-C block is now possible. -
Change PyObjC's internal assertions in C code from
PyObjC_Asserttoassert
(and only enable them using debug builds of CPython). This is slightly more efficient
and enables removing error return paths in a number of functions due to internal
APIs that could only fail due to assertion errors. -
Removed some helper code that was used when subclassing a number of
NSDecimalNumber
methods. This should have no effect because overriding these methods is effectifly
impossible anyway on recent versions of macOS. -
Fix some free-threaded race conditions
-
Classes
NSStringandNSMutableStringare marked as "final", which
means these classes can no longer be subclassed.Reason for this is that Cocoa strings have special handling in PyObjC
and trying to subclass these classes in Python will result in crashes. -
The
objc._objcextension no longer performs imports from native code,
all external dependencies are passed in as (private) options from Python
code.This simplifies PyObjC's code, and avoids having imports that are hidden
from analysis tools. -
Remove usage of
pkg_resourcesin PyObjC's setup.py files.This is needed because this library is deprecated in setuptools and will
be removed. -
:issue:
651: Fix build issue on macOS 10.12 by changing the invocation
of sw_vers(1).
PyObjC 11: Support for macOS 15
Version 11.0
The major change in this release is experimental support for free-threading
(PEP 703 <https://peps.python.org/pep-0703/>_) which was introduced
as an experimental feature in Python 3.13.
This required fairly significant changes in the core of PyObjC to change
C Python API use and PyObjC internal APIs (mostly related to the use of
borrowed references).
-
Dropped support for Python 3.8. PyObjC 11 supports Python 3.9 and later.
-
Updated metadata for the macOS 15.2 SDK, including bindings
for the following frameworks:- MediaExtension
- DeviceDiscoveryExtension
-
:issue:
249: Added minimal bindings to the Carbon framework.At this time only some functions and constants related to hotkeys
are available. Please file an issue if you have a usecase for other APIs. -
:issue:
249: Added minimal bindings to the Carbon framework.At this time only some functions and constants related to hotkeys
are available. Please file an issue if you have a usecase for other APIs. -
:issue:
615: Struct wrappers now support a number of functions from
:mod:copy: :func:copy.replace(new in Python 3.13), :func:copy.copy
and :func:copy.deepcopy. -
The
__pyobjc_copy__method has been removed from struct wrappers. This
was never a public API. Use :func:copy.deepcopyinstead. -
:meth:`objc.FSRef.from_path
now supportsos.PathLike`` values as its
arguments (as well as strings). -
:issue:
608: Experimental support for the free-threading mode
introduced in Python 3.13.The core bridge and framework bindings claim compatibility with free-threading
as introduced as an experimental feature in Python 3.13.The support in PyObjC is also an experimental feature: I've reviewed
code for free-threading issues and adjusted it where needed, but the
code has seen only light testing w.r.t. concurrency.Some functionality that's explicitly not thread-safe:
-
Defining an Objective-C class with the same name in multiple threads concurrently.
-
Splitting calls to
allocandinitand callinginitmultiple
times concurrently. E.g.:.. sourcecode:: python
import threading from Cocoa import NSObject v = NSObject.alloc() t_list = [] for _ in range(2): t = threading.Thread(target=lambda: v.init()) t_list.append(t) t.start() for t in t_list: t.join()
-
-
The internal mapping from Python values to their active Objective-C
proxy value now uses weak references. This should not affect user code,
other than being a bit more efficient. -
The internal interfaces for updating this mapping, and the reverse mapping
from Objective-C values to their active Python proxy was changed to remove
a small race condition. This was required for free threading support, but
could in theory also bit hit when using the GIL. -
The data structure for mapping Python values to their Objective-C proxy
has been rewritten to support free threading. This also simplifies the
code, and should be small performance improvement for the regular build
of Python. -
The :exc:
TypeErrorraised when passing a non-sequence value to
some APIs implemented in C now has a__cause__with more detailed
information.This is a side effect of dropping the use of
PySequence_Fastin the
implementation of PyObjC. -
Removed
objc.options._nscoding_version, a private option that is no
longer used. -
Changing the
__block_signature__of a block value when the current
value of the signature is notNoneis no longer possible.Please file an issue if you have a use case for changing the signature
of a block. -
Fix compatibility with Python 3.14 (alpha 3)
-
Removed private function
objc._sizeOfTypebecause its unused. -
Fix memory leak when using Python callables as blocks.
The memory leak also resulted in leaking a reference to the callable
(and hence anything kept alive by that reference). -
The generic
__new__implementation now works as intended when
registering methods that other thaninit...methods. -
Dropped '%n' support in handling printf-format strings for variadic
functions and methods.Two reasons for that: 1) supporting this properly should return the
value writing to the %n location (requiring significant changes) and
2) Apple's libraries require using static strings for '%n' to work (at
least on some platforms and versions of the OS) -
:issue:
633: Fix manual bindings forAVAudioPCMBuffermethods for
getting channel data (floatChannelData,int16ChannelDataand
int32ChannelData) -
:issue:
632: fix broken bindings forCGWindowListCreateImageFromArray. -
The private
__is_magicattribute on :class:objc.objc_objecthas
been renamed to__pyobjc_magic_coookie__. -
Various fixes to edge case behaviour that were found while improving
test coverage.
v10.3.2
-
Fix a number of test failures on macOS 15 These are all documentation and test updates.
-
#593: PyObjCTools.AppHelper.runConsoleEventLoop no longer exits the process on macOS 14 or later when stopping the event loop.
-
#613: Actually expose protocols
KHTTPCookieStoreObserver,WKURLSchemeTask, andWKURLSchemeHandlerin the WebKit bindings. -
Remove workaround for a linker problem in early versions of Xcode 15, which restores support for building with Xcode Command Line tools.
-
The release contains wheels for the free-threaded build of Python 3.13.
Note that PyObjC does not support running without the GIL at this time.
-
Fix for running test suite with recent versions of setuptools
Recent versions of setuptools broke the "test" command, the full command has been reimplemented as part of PyObjC.
-
#627: Fix build issue when deployment target is 15.0 or later.
-
#623: Don't lowercase the first character of the first keyword argument for
__new__when the segment only contains upper case characters.Before this change
initWithURL:mapped to anuRLkeyword argument, with this fix the keyword argument is namedURL.Fix by user @rndblnch on github
-
#625: Fix crash for calling
NSIndexSet.alloc().initWithIndex_(0)This "fix" is a workaround for what appears to be a bug in Foundation.
-
#569: Actually remove the workaround for Xcode 15.0
-
#619: Fix race condition in creating proxy objects for Objective-C classes.
v10.3.1
-
#610: Ensure
__init__can be used when user implements__new__.Version 10.3 dropped support for calling
__init__, but that breaks
a number of popular projects. Reintroduce the ability to use__init__
when a class or one of its super classes contains a user implemenentation
of__new__.Code relying on the
__new__provided by PyObjC still cannot use
__init__for the reason explained in the 10.3 release notes.
v10.3
-
The release contains binary wheels for Python 3.13
PyObjC does at this time not support the experimental free threading
support in Python 3.13. -
#569: Removed the workaround for a bug in Xcode 15.0
The workaround is no longer necessary, and caused problems when
building with the Command Line Tools development tools from Apple. -
Updated SDK bindings for macOS 14.5
-
A minor change in the (currently private) tooling I use for
collecting the raw metadata resulted in minor fixes to the framework
bindings, in particular for metadata for a number of block and function
typed arguments and return values. -
#275: It is now possible to create instances of Objective-C
classes by calling the class, e.g.NSObject()instead of
NSObject.alloc().init().The implementation of
__new__forwards calls to the underlying
SomeClass.alloc().init...()pattern. In particular, all public init
methods are translated into sets of keyword arguments:- Remove
initorinitWithfrom the start of the selector name - Lowercase the first character of what's left over
- The strings before colons are acceptable keywords, in that order
For example, given a selector
initWithX:y:the__new__method
will acceptx, yas keyword arguments, in that order.Framework bindings have been updated with additional metadata to support
this pattern, and the sets of keyword arguments are automatically calculated
for subclasses in written in Python.The limitation on the order of keyword arguments may be lifted in a future
version, it is currently present to keep the code closer to the Objective-C
spelling which should make it easier to look up documentation on Apple's
website. - Remove
-
For some Objective-C classes some of the
initandnewmethods are not
available even if they are available in super classes. Those methods are
marked withNS_UNAVAILABLEin Apple's headers.As of this version these methods are also not available in Python code,
trying to call them will result in an exception.To make methods unavailable in Python classes set these methods to
None,
e.g.:class MyObject(NSObject): init = None # NS_UNAVAILABLE
-
Added :func:
objc.registerUnavailableMethod,
:func:objc.registerNewKeywordsFromSelectorand
:func:objc.registerNewKeywordsto support the generic__new__
in framework bindings.A limitation for
registerUnavailableMethodis that it is currently
not supported to reintroduce the method in a subclass, primarily because
that functionality is not needed for framework bindings. -
Instantiating an Objective-C class by calling the class (e.g. invoking
__new__) will not call__init__even if one is defined.The implementation of a subclass of
NSObjectshould always follow
the Objective-C convention for initializing using one or more
methods with a name starting withinit.This can affect code that manually defines a
__new__method for
an Objective-C class, in previous versions that was the only way
to create instances in a Pythontic way. -
NSArray,NSMutableArray,NSSetandNSMutableSetaccepted
asequencekeyword argument in previous versions. This is no longer supported.It is still supported to create instances using a positional argument
for a sequence, e.g.NSArray([1, 2, 3]). -
NSData,NSMutableData,NSDecimal,NSStringandNSMutableString
accepted avaluekeyword argument in previous versions. This is no longer supported.It is still supported to create instances using a positional argument,
e.g.NSData(b"hello"). -
NSDictionaryandNSMutableDictionarydo not support the
generic new interface because this conflicts with having a similar
interface todictfor creating instances.That is,
NSDictionary(a=4, b=5)is the same asNSDictionary({"a":4, "b":5}),
and not likeNSDictionary.alloc().initWithA_b_(4, 5).
v10.2
-
Fix a number of warnings found by adding
-Wpendanticto the CFLAGS for
pyobjc-core -
Fix undefined behaviour warnings:
-
Suppress the undefined behaviour warning about out of range values in
double to (unsigned) long long in theOC_PythonNumberimplementation
as these are unavoidable when matchingNSNumberbehaviour. -
Switch to using
memcpyinstead of direct assignment in converting
plain C values to/from Python because "packed" structs might result
in accessing values through unaligned pointers.
-
-
Updated bindings for the macOS 14.4 SDK (Xcode 15.3)
-
Added bindings for the "BrowserEngineKit" framework on macOS 14.4 or later.
-
Add :func:
obj.registerPathTypeto register a Python type as a path like
type with PyObjC. By default only :class:pathlib.Pathis registered as such.A minor backward compatibility issue is that instances of the registered types
will be written toNSArchiveandNSKeyArchivearchives as instances
ofNSURLand won't roundtrip back to the original Python type. This might
change in future versions of PyObjC, at least for :class:pathlib.Path. -
#589: Instances of :class:
pathlib.Path(and other types registered with
objc.registerPathType) are bridged into Objective-C as instances ofNSURL.This means that these types can be used as values passed to APIs expecting
a filesystem URL, e.g.:path = pathlib.Path("/Applications/Numbers.app") bundle = NSBundle.bundleWithURL_(path)
-
Fix some warnings in pyobjc-core when testing with Python 3.13a4.
-
Add support for
NSBezierPathElementQuadraticCurveToinNSBezierPath.elementAtIndex_associatedPoints_. -
#595: Fix compilation error in
pyobjc-framework-Cocoawith a recent
deployment target.
v10.1
-
Upgrade framework bindings for the macOS 14.2 SDK
-
#579: Make sure the
install.pyanddevelop.pyscripts 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.TypeErrorwill 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).
v10.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 fromobjc.These constants are needed in practice (switch to :func:
objc.availableto
check for platform availability), and caused unnecessary code churn. -
The value for
objc.options.deprecation_warningsis 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.ObjCLazyModuleis still
available, but is deprecatedAs a side effect of this
objcis no longer an attribute of framework
binding packages (e.gFoundation.objcis 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
thefrom 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.createFrameworkDirAndGetattrto
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.getClassListnow 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 ofNSArrayandNSDictionary.
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 (fromNSObjectto 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 returningid. -
Remove old 32-bit support in metadata override files.
-
Restructure
objc.simd: The matrix types are now namedsimd_float3x3
instead ofmatrix_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_tis renamed todispatch.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.