2025-02-05 09:05:44 by Adam Ciarcinski | Files touched by this commit (303) | ![]() |
Log message: py-pyobjc: updated to 11.0 Version 11.0 The major change in this release is experimental support for free-threading (PEP \ 703) 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 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. Struct wrappers now support a number of functions from copy: copy.replace() (new \ in Python 3.13), copy.copy() and copy.deepcopy(). The __pyobjc_copy__ method has been removed from struct wrappers. This was never \ a public API. Use copy.deepcopy() instead. objc.FSRef.from_path`() now supports os.PathLike values as its arguments (as \ well as strings). 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 alloc and init and calling init multiple times concurrently. E.g.: 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 TypeError raised 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_Fast in 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 not None is 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._sizeOfType because 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 than init... 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) Fix manual bindings for AVAudioPCMBuffer methods for getting channel data \ (floatChannelData, int16ChannelData and int32ChannelData) fix broken bindings for CGWindowListCreateImageFromArray. The private __is_magic attribute on objc.objc_object has been renamed to \ __pyobjc_magic_coookie__. Various fixes to edge case behaviour that were found while improving test coverage. |
2024-06-11 18:10:28 by Adam Ciarcinski | Files touched by this commit (150) | ![]() |
Log message: py-pyobjc*: updated to 10.3.1 Version 10.3.1 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. |
2024-04-02 19:26:02 by Adam Ciarcinski | Files touched by this commit (150) | ![]() |
Log message: py-pyobjc*: updated to 10.2 Version 10.2 Fix a number of warnings found by adding -Wpendantic to 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 the OC_PythonNumber implementation as these are \ unavoidable when matching NSNumber behaviour. Switch to using memcpy instead 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 obj.registerPathType() to register a Python type as a path like type with \ PyObjC. By default only pathlib.Path is registered as such. A minor backward compatibility issue is that instances of the registered types \ will be written to NSArchive and NSKeyArchive archives as instances of NSURL and \ won’t roundtrip back to the original Python type. This might change in future \ versions of PyObjC, at least for pathlib.Path. Instances of pathlib.Path (and other types registered with \ objc.registerPathType) are bridged into Objective-C as instances of NSURL. This means that these types can be used as values passed to APIs expecting a \ filesystem URL, e.g.: ```python 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 NSBezierPathElementQuadraticCurveTo in \ NSBezierPath.elementAtIndex_associatedPoints_. Fix compilation error in pyobjc-framework-Cocoa with a recent deployment target. |
2024-01-23 23:15:03 by Adam Ciarcinski | Files touched by this commit (154) | ![]() |
Log message: py-pyobjc*: updated to 10.1 Version 10.1 Upgrade framework bindings for the macOS 14.2 SDK Make sure the install.py and develop.py scripts in the repository work when run \ out of tree. 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. 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. Fix dependencies between framework binding packages Fix build error with the current Python 3.13 alpha release (3.13a2). |
2023-11-19 18:03:09 by Adam Ciarcinski | Files touched by this commit (457) | ![]() |
Log message: py-pyobjc*: updated to 10.0 Version 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. PyObjC 10 requires Python 3.8 and no longer supports Python 3.7 Removed all MAC_OS_X_VERSION* constants from objc. These constants are needed in practice (switch to 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. Fix unintended incompatibility with pytest in PyObjCTools.TestSupport The lazy loading machinery by default no longer uses objc.ObjCLazyModule, but \ uses module level __dir__ and __getattr__ instead. The 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. Introduce objc.createFrameworkDirAndGetattr() to create module level __dir__ and \ __getattr__ for use by framework bindings. 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. 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. Xcode 15 has a bug when using weak symbols and targeting older macOS versions. \ Switch to the old linker when detecting Xcode 15. |