Registry /
communication / pyobjc-framework-imagecapturecore
Install & Compatibility
Where this runs
tested against v? · pip install
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
muslpy 3.10–3.940 runs
build_error
glibcpy 3.10–3.940 runs
build_error
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
ImageCaptureCore
✓ import ImageCaptureCore
The framework's classes are typically accessed as attributes of the imported module, e.g., `ImageCaptureCore.ICDeviceBrowser`.
ICDeviceBrowser
✓ from ImageCaptureCore import ICDeviceBrowser
This quickstart demonstrates how to use `ICDeviceBrowser` to discover image capture devices on macOS. It sets up a delegate to receive callbacks for device additions and removals and runs a console event loop to keep the application responsive. Note that `PyObjCTools.AppHelper` requires `pyobjc-framework-AppKit` to be installed.
import ImageCaptureCore
import objc
from PyObjCTools import AppHelper
class MyDeviceBrowserDelegate(objc.NSObject):
def deviceBrowser_didAddDevice_moreComing_(self, browser, device, moreComing):
print(f"[*] Found device: {device.name()} (UUID: {device.uuid()})")
# You can access device properties here, e.g., device.type(), device.icon().
def deviceBrowser_didRemoveDevice_moreComing_(self, browser, device, moreComing):
print(f"[-] Removed device: {device.name()} (UUID: {device.uuid()})")
def main():
browser = ImageCaptureCore.ICDeviceBrowser.alloc().init()
delegate = MyDeviceBrowserDelegate.alloc().init()
browser.setDelegate_(delegate)
print("Starting ImageCaptureCore device browser. Press Ctrl+C to exit.")
print("Detected devices will be printed as they are found or removed.")
browser.start()
# Run the Cocoa event loop indefinitely to receive delegate callbacks.
# This keeps the script alive and responsive to system events.
AppHelper.runConsoleEventLoop(installInterrupt=True)
if __name__ == "__main__":
main()
Debug
Known issues
breakingPyObjC versions are tightly coupled with supported Python versions. PyObjC 12.0 dropped support for Python 3.9, requiring Python 3.10 or newer. PyObjC 11.0 dropped support for Python 3.8.fixEnsure your Python environment is version 3.10 or newer. Always check the `requires_python` metadata for the PyObjC version you intend to use.
affects: <12.0 (for Python 3.9), <11.0 (for Python 3.8)
gotchaPyObjC framework bindings are macOS-specific. Attempting to import or use `pyobjc-framework-imagecapturecore` on non-macOS operating systems will result in import errors or runtime failures.fixRun PyObjC applications exclusively on macOS platforms.
affects: All
gotchaMany ImageCaptureCore operations are asynchronous and rely on delegate callbacks. To receive these callbacks and keep your application responsive, you must run a Cocoa event loop (e.g., using `PyObjCTools.AppHelper.runConsoleEventLoop()` for console apps or within a GUI application's main loop).fixIntegrate your ImageCaptureCore interactions within a running Cocoa event loop. For simple console scripts, `AppHelper.runConsoleEventLoop()` is the idiomatic way.
affects: All
gotchaWhen subclassing Objective-C classes in Python with PyObjC, the interaction between `__new__` and `__init__` can be nuanced. If your Python subclass (or one of its superclasses) explicitly defines `__new__`, then `__init__` will be called. However, if `__new__` is *not* explicitly overridden by the user, `__init__` will *not* be called. This can lead to objects not being initialized as expected.fixCarefully review the PyObjC documentation on subclassing Objective-C classes in Python, especially regarding `__new__` and `init` methods, to ensure correct object initialization and avoid uninitialized objects.
affects: 10.3.0 and >=10.3.1
gotchaPyObjC 11.1 introduced a change in how it models initializer methods to align with Clang's Automatic Reference Counting (ARC). Methods in the 'init' family (e.g., `init` methods) now correctly 'steal' the reference to `self` and return a new reference. This change can affect complex object graphs or manual reference counting scenarios in Python subclasses.fixIf you have complex Python subclasses that override Objective-C `init` methods, review their reference counting behavior to ensure it aligns with ARC semantics after the PyObjC 11.1 update.
affects: 11.1 and later
Upgrade
Version history
12.2latest on PyPI · released May 30, 2026
Audit
Dependencies
pyobjc-corerequiredThe fundamental bridge for Objective-C, required by all PyObjC framework bindings.
pyobjc-framework-AppKitoptionalNeeded for `PyObjCTools.AppHelper` to run Cocoa event loops, which are common for handling asynchronous ImageCaptureCore operations.
pyobjcoptionalA metapackage that installs `pyobjc-core` and all framework bindings (including ImageCaptureCore).