# Introduction

The PyObjC project aims to provide a bridge between the Python and Objective-C programming languages on macOS. The bridge is intended to be fully bidirectional, allowing the Python programmer to take full advantage of the power provided by various Objective-C based toolkits and the Objective-C programmer transparent access to Python based functionality.

PyObjC not only includes the basic bridge, but also bindings to most Apple frameworks on macOS.

The most important usage of this is writing Cocoa GUI applications on macOS in pure Python. See our tutorial for an example of this.

## Release information

PyObjC 6.2.2 was released on 2020-07-08. See the changelog for more information. PyObjC 6.2.2 supports Python 3.6 and later.

PyObjC 5.3 was released on 2019-10-16. See the changelog for more information.

## Supported platforms

PyObjC supports Python 3.6 (“CPython”) or later on macO 10.9 or later.

The binary wheels support x86_64, building from source should still work for users that still require 32-bit code.

## Unsupported platforms

The following platforms are not supported:

- Operating systems other than macOS, such as Windows, Linux and iOS

  PyObjC provides interfaces for the system APIs on macOS and as such cannot support Linux and Windows.

  It might be possible to support iOS, but that will require significant engineering, as well as making sure that PyObjC’s implementation is compatible with AppStore rules (in particular the usage of dynamic code generation).

- Python 2.x

  The latest releaes of PyObjC that supports Python 2.7 is version 5.3. Note that this version is no longer maintained.

- Alternative Python implementations, like PyPy and Jython.

  PyObjC uses some low-level trickery that is not supported by those implementations.

# General documentation

- Installing PyObjC
- What’s new in PyObjC
- An introduction to PyObjC
- PyObjC protocol support
- PyObjC support for “blocks”
- PyObjC support for vector/SIMD types
- Converting values between Python and Objective-C
- Support for `FSRef` and `FSSpec`
- Generated types for C types
- Introspecting PyObjC
- Object-graph serialization
- Key-Value Observing and Python
- (Historical) Objective-C Garbage Collection
- PyObjC metadata system
- PyObjC Tutorials
- “import Quartz” or “import CoreGraphics”
- Examples overview
- Overview of macOS frameworks and their wrappers
- API Notes for PyObjC framework wrappers
- Dealing with API deprecations
- The PyObjC core team
- The release workflow for PyObjC
- PyObjC with InterfaceBuilder

# API documentation

- Python API
  - `objc` – The PyObjC bridge
  - `PyObjCTools` – Utilities
- Context Managers for CoreGraphics
- Utility methods for threading
  - Safe replacements for stock `NSObject` methods
  - Enhanced methods
- API Description for `PyObjCTools.AppCategories`
  - Introduction
  - Additional methods on `NSGraphicsContext`
  - Context-manager for `NSAnimationContext`
- API Description for `PyObjCTools.FndCategories`
  - Introduction
  - Additional methods on `NSAffineTransform`

# PyObjC Developement

PyObjC development is hosted at GitHub, in particular at <https://github.com/ronaldoussoren/pyobjc/>.

Important resources:

- Issue tracker

- PyObjC-dev mailing list

  A low-volume mailinglist for PyObjC development.

- Mailing list for the PythonMac SIG

  A mailing list for anyone developing with Python on macOS.

- Repository browser

- Creating a checkout of the respository:

      $ git clone https://github.com/ronaldoussoren/pyobjc

  You can then use the “install.py” at the root of the checkout to install this version of PyObjC.

- Coding style for PyObjC
- Developer Documentation
- Structure of the PyObjC package
- How to wrap an Objective-C class library

# Indices and tables

- Module Index

- Search Page