Registry / pyobjc-framework-discrecordingui
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.920 runs
build_error
glibcpy 3.10–3.920 runs
build_error
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
DRBurnSetup
✓ from DiscRecordingUI import DRBurnSetup
DRBurnSession
✓ from DiscRecordingUI import DRBurnSession
DRBurnSetupPanel
✓ from DiscRecordingUI import DRBurnSetupPanel
This quickstart demonstrates the basic structure of a PyObjC application, using `NSApplication` and `PyObjCTools.AppHelper` to manage the event loop. It shows how to import and instantiate a class from the `DiscRecordingUI` framework (e.g., `DRBurnSetupPanel`). In a full application, you would present UI elements and implement delegate methods to interact with them.
import objc
from Foundation import NSObject, NSApplication
from AppKit import NSApplicationActivationPolicyRegular
from PyObjCTools import AppHelper
from DiscRecordingUI import DRBurnSetupPanel, DRBurnSetup, DRBurnCompletionAction
class AppDelegate(NSObject):
def applicationDidFinishLaunching_(self, notification):
print("Application started.")
# Create a burn setup panel (example usage)
panel = DRBurnSetupPanel.new()
# In a real application, you'd present this panel and handle its delegate methods
# For demonstration, we'll just show its existence.
print(f"Created DRBurnSetupPanel: {panel}")
# To prevent the app from immediately quitting in a simple script,
# a real UI event loop is needed. For CLI demo, we can just let it exit.
# If you were to present a panel, you'd typically do something like:
# panel.beginSetupSheetForWindow_modalDelegate_didEndSelector_contextInfo_(
# None, self, 'burnSetupSheetDidEnd_returnCode_contextInfo:', None)
# For a truly minimal UI app to stay open:
# NSApp.run()
def applicationWillTerminate_(self, notification):
print("Application will terminate.")
if __name__ == '__main__':
# Initialize the NSApplication
app = NSApplication.sharedApplication()
app.setActivationPolicy_(NSApplicationActivationPolicyRegular)
# Create and set the delegate
delegate = AppDelegate.alloc().init()
app.setDelegate_(delegate)
# Run the application event loop
# For a real GUI app, this keeps it running.
# For this minimal example, it might exit quickly if no windows are shown.
AppHelper.runEventLoop()
Debug
Known issues
breakingPyObjC frequently drops support for older Python versions. Version 12.0 dropped support for Python 3.9, and version 11.0 dropped Python 3.8. Ensure your Python environment is compatible with the installed PyObjC version. Current releases generally support Python 3.10 and later.fixUpgrade your Python environment to 3.10 or newer, or use an older PyObjC version compatible with your Python interpreter (e.g., PyObjC 10.x for Python 3.9).
affects: >=11.0
breakingChanges in `__init__` and `__new__` behavior when subclassing Objective-C classes from Python. PyObjC 10.3 introduced changes that broke `__init__` for some user-implemented `__new__` patterns, partially reverted in 10.3.1. Complex interactions with Objective-C's two-step instantiation (alloc/init) require careful handling.fixConsult the PyObjC documentation on 'Instantiating Objective-C objects' for current best practices. If implementing `__new__`, ensure `__init__` methods are defined in an Objective-C style to work correctly with PyObjC's bridge.
affects: 10.3, 10.3.1
gotchaPyObjC 11.1 aligned its Automatic Reference Counting (ARC) behavior with `clang`'s documentation for initializer methods. Methods in the 'init' family now correctly model stealing a reference to `self` and returning a new reference. This might subtly change reference counting expectations in Python code interacting with Objective-C initializers.fixReview code interacting with Objective-C 'init' family methods, especially those that might involve manual memory management or specific retain/release patterns, to ensure compliance with ARC rules.
affects: >=11.1
gotchaSubclassing `NSString` or `NSMutableString` directly from Python is not supported and will lead to crashes. These classes are marked as 'final' in PyObjC due to their special handling in the bridge.fixAvoid subclassing `NSString` or `NSMutableString`. If you need custom string behavior, consider composition or using standard Python string manipulation and conversion to/from `objc.pyobjc_unicode`.
affects: All
gotchaObjective-C method names containing colons (`:`) are translated into Python method names with underscores (`_`). For example, `someMethod:withArg:` becomes `someMethod_withArg_`. This mangling is fundamental to PyObjC interaction.fixAlways use the underscore-mangled versions of Objective-C method names when calling them from Python. Arguments for the Objective-C method become positional arguments after the `self` parameter in the Python method.
affects: All
gotchaPyObjC 11.0 introduced experimental support for free-threading (PEP 703) in Python 3.13. However, PyObjC does not fully support running without the Global Interpreter Lock (GIL), and some functionality explicitly marked as not thread-safe (e.g., defining Objective-C classes concurrently in multiple threads) may lead to issues.fixExercise caution when using PyObjC in a free-threaded Python environment. Avoid operations identified as not thread-safe. For critical, thread-sensitive operations, consider falling back to GIL-protected execution or alternative concurrency models.
affects: >=11.0, specifically with Python 3.13+ free-threading
Upgrade
Version history
12.2latest on PyPI · released May 30, 2026
Audit
Dependencies
pyobjc-corerequiredCore bridge for Python and Objective-C interaction.
pyobjc-framework-CocoarequiredDiscRecordingUI relies on the fundamental Cocoa framework for UI elements and application services.
pyobjc-framework-DiscRecordingrequiredDiscRecordingUI provides UI for the DiscRecording framework's core functionality.