PyObjC 7.0 released

Finally…. A bit later than I had expected I’ve uploaded PyObjC 7.0 to PyPI.

This release includes support for new APIs introduced in macOS 11 (Big Sur), as well as support for arm64.

The binary wheels on PyPI are only for x86_64 for now, I’ll add “universal2” wheels once I’ve resolved some issues with the packaging ecosystem.

The release was cut from the branch “pyobjc-7-branch”. Because of this the website has not been updated.


  • Added support for arm64 (aka “Apple Silicon”)

  • Existing framework bindings were updated for the macOS 11.0 SDK

  • Added bindings for the following frameworks:

    • Accessibility (introduced in macOS 11.0)
    • AppTrackingTransparency (introduced in macOS 11.0)
    • CallKit (introduced in macOS 11.0)
    • ClassKit (introduced in macOS 11.0)
    • KernelManagement (introduced in macOS 11.0)
    • MetalPerformanceShaders (introduced in macOS 10.13)
    • MetalPerformanceShadersGraph (introduced in macOS 11.0)
    • MLCompute (introduced in macOS 11.0)
    • PassKit (introduced in macOS 11.0)
    • ReplayKit (introduced in macOS 11.0)
    • ScreenTime (introduced in macOS 11.0)
    • UniformTypeIdentifiers (introduced in macOS 11.0)
    • UserNotificationsUI (introduced in macOS 11.0)
    • Virtualization (introduced in macOS 11.0)
  • Dropped the bindings to the QTKit framework. This framework was removed in macOS 10.15.

  • Dropped the bindings for the XgridFoundation framework. This framework was removed in macOS 10.8.

  • This version drops support for 32-bit executables, both the core bridge and the framework wrappers only support 64-bit executables going forward

  • PyObjC is now always build with the system libffi.

  • issue 301: pyobjc-framework-Metal build failed on macOS mojave

  • Python 3.10 support: Don’t assume the result of Py_REFCNT, Py_SIZE and Py_TYPE are an lvalue.

  • Python 3.10 support: Completely phase out use of old buffer API, which will be removed in Python 3.10. As a side effect of this a number of extensions that used the limited ABI once again use the regular ABI.

  • Removed remnants of support for i386, ppc and ppc64 from pyobjc-core.

  • Added type to manage Py_buffer lifetimes to the internal API in pyobjc-core, to be used by framework wrappers.

  • Add objc._C_BYREF. This definition was missing, but isn’t used in modern ObjC code.

  • PR 323: Remove leading slashes from detected SDK patch to avoid miscalculating the version. Patch by GitHub user linuxfood.

  • PR 322: Avoid None error in PyObjCTools.AppHelper. Patch by github user mintho

  • PR 321: Fix typo in documentation. Patch by github user russeldavis

A personal note

The changelog is fairly long, but shorter than I had hoped after WWDC. I’ve had a hard time to find the energy to spent a lot of time on PyObjC in the current state of the world. I’ve been working from home since March, and even now video meetings are pretty draining. It also doesn’t help that my main hobby away from the computer is a full contact sport that’s on hold for most of that time without a clear indication on when that will change (and when I’ll feel comfortable with this).

On a more positive note: A different distraction from my own projects is working on CPython again, in particular working with Ned Deily and Lawrence D’Anna on supporting arm64 and “Universal 2” to CPython. The first visible result of that is an experimental “Univeral 2” build of the upcoming Python 3.9.1 release.

Ronald Oussoren @ronaldoussoren