pyobjc-framework-ScreenCaptureKit 12.2.2__tar.gz → 13.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/Lib/ScreenCaptureKit/__init__.py +4 -0
  2. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/Lib/ScreenCaptureKit/_metadata.py +156 -6
  3. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/Lib/pyobjc_framework_ScreenCaptureKit.egg-info/PKG-INFO +6 -6
  4. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/Lib/pyobjc_framework_ScreenCaptureKit.egg-info/SOURCES.txt +4 -2
  5. pyobjc_framework_screencapturekit-13.0/Lib/pyobjc_framework_ScreenCaptureKit.egg-info/pyobjc-build-info.txt +3 -0
  6. pyobjc_framework_screencapturekit-13.0/Lib/pyobjc_framework_ScreenCaptureKit.egg-info/requires.txt +3 -0
  7. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/Modules/_ScreenCaptureKit.m +9 -2
  8. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/Modules/_ScreenCaptureKit_protocols.m +14 -0
  9. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/Modules/pyobjc-api.h +18 -4
  10. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/Modules/pyobjc-compat.h +0 -18
  11. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/PKG-INFO +6 -6
  12. pyobjc_framework_screencapturekit-13.0/PyObjCTest/test_scclipbufferingoutput.py +17 -0
  13. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/PyObjCTest/test_sccontentsharingpicker.py +15 -2
  14. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/PyObjCTest/test_scerror.py +4 -3
  15. pyobjc_framework_screencapturekit-13.0/PyObjCTest/test_screcordingeditor.py +17 -0
  16. pyobjc_framework_screencapturekit-13.0/PyObjCTest/test_screcordingoutput.py +19 -0
  17. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/PyObjCTest/test_scscreenshotmanager.py +1 -1
  18. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/PyObjCTest/test_scshareablecontent.py +1 -1
  19. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/PyObjCTest/test_scstream.py +37 -10
  20. pyobjc_framework_screencapturekit-13.0/metadata/ScreenCaptureKit.fwinfo +14 -0
  21. pyobjc_framework_screencapturekit-12.2.2/metadata/raw/arm64-26.5.fwinfo → pyobjc_framework_screencapturekit-13.0/metadata/raw/arm64-27.fwinfo +981 -55
  22. pyobjc_framework_screencapturekit-12.2.2/metadata/raw/x86_64-26.5.fwinfo → pyobjc_framework_screencapturekit-13.0/metadata/raw/x86_64-27.fwinfo +981 -55
  23. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/pyobjc_setup.py +7 -7
  24. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/setup.py +1 -1
  25. pyobjc_framework_screencapturekit-12.2.2/Lib/pyobjc_framework_ScreenCaptureKit.egg-info/pyobjc-build-info.txt +0 -3
  26. pyobjc_framework_screencapturekit-12.2.2/Lib/pyobjc_framework_ScreenCaptureKit.egg-info/requires.txt +0 -3
  27. pyobjc_framework_screencapturekit-12.2.2/PyObjCTest/test_screcordingoutput.py +0 -9
  28. pyobjc_framework_screencapturekit-12.2.2/metadata/ScreenCaptureKit.fwinfo +0 -92
  29. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/Lib/pyobjc_framework_ScreenCaptureKit.egg-info/dependency_links.txt +0 -0
  30. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/Lib/pyobjc_framework_ScreenCaptureKit.egg-info/not-zip-safe +0 -0
  31. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/Lib/pyobjc_framework_ScreenCaptureKit.egg-info/top_level.txt +0 -0
  32. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/License.txt +0 -0
  33. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/MANIFEST.in +0 -0
  34. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/PyObjCTest/__init__.py +0 -0
  35. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/PyObjCTest/test_screencaputurekit.py +0 -0
  36. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/metadata/metadata.ini +0 -0
  37. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/pyproject.toml +0 -0
  38. {pyobjc_framework_screencapturekit-12.2.2 → pyobjc_framework_screencapturekit-13.0}/setup.cfg +0 -0
@@ -44,6 +44,10 @@ def _setup():
44
44
  ("SCShareableContent", b"new"),
45
45
  ("SCContentSharingPicker", b"init"),
46
46
  ("SCContentSharingPicker", b"new"),
47
+ ("SCRecordingEditor", b"init"),
48
+ ("SCRecordingEditor", b"new"),
49
+ ("SCVideoEffectOutput", b"init"),
50
+ ("SCVideoEffectOutput", b"new"),
47
51
  ):
48
52
  objc.registerUnavailableMethod(cls, sel)
49
53
 
@@ -1,7 +1,5 @@
1
1
  # This file is generated by objective.metadata
2
2
  #
3
- # Last update: Sun May 24 11:57:33 2026
4
- #
5
3
  # flake8: noqa
6
4
 
7
5
  import objc, sys
@@ -30,11 +28,12 @@ else:
30
28
 
31
29
 
32
30
  misc = {}
33
- constants = """$SCStreamErrorDomain$SCStreamFrameInfoBoundingRect$SCStreamFrameInfoContentRect$SCStreamFrameInfoContentScale$SCStreamFrameInfoDirtyRects$SCStreamFrameInfoDisplayTime$SCStreamFrameInfoPresenterOverlayContentRect$SCStreamFrameInfoScaleFactor$SCStreamFrameInfoScreenRect$SCStreamFrameInfoStatus$"""
34
- enums = """$RP_REPORTING_END_REASON_SUMMARY_EVENT@2$RP_REPORTING_SCREENSHOT_EVENT@3$RP_REPORTING_SUMMARY_EVENT@1$SCCaptureDynamicRangeHDRCanonicalDisplay@2$SCCaptureDynamicRangeHDRLocalDisplay@1$SCCaptureDynamicRangeSDR@0$SCCaptureResolutionAutomatic@0$SCCaptureResolutionBest@1$SCCaptureResolutionNominal@2$SCContentSharingPickerModeMultipleApplications@8$SCContentSharingPickerModeMultipleWindows@2$SCContentSharingPickerModeSingleApplication@4$SCContentSharingPickerModeSingleDisplay@16$SCContentSharingPickerModeSingleWindow@1$SCFrameStatusBlank@2$SCFrameStatusComplete@0$SCFrameStatusIdle@1$SCFrameStatusStarted@4$SCFrameStatusStopped@5$SCFrameStatusSuspended@3$SCPresenterOverlayAlertSettingAlways@2$SCPresenterOverlayAlertSettingNever@1$SCPresenterOverlayAlertSettingSystem@0$SCScreenshotDisplayIntentCanonical@0$SCScreenshotDisplayIntentLocal@1$SCScreenshotDynamicRangeHDR@1$SCScreenshotDynamicRangeSDR@0$SCScreenshotDynamicRangeSDRAndHDR@2$SCShareableContentStyleApplication@3$SCShareableContentStyleDisplay@2$SCShareableContentStyleNone@0$SCShareableContentStyleWindow@1$SCStreamConfigurationPresetCaptureHDRRecordingPreservedSDRHDR10@4$SCStreamConfigurationPresetCaptureHDRScreenshotCanonicalDisplay@3$SCStreamConfigurationPresetCaptureHDRScreenshotLocalDisplay@2$SCStreamConfigurationPresetCaptureHDRStreamCanonicalDisplay@1$SCStreamConfigurationPresetCaptureHDRStreamLocalDisplay@0$SCStreamErrorAttemptToConfigState@-3810$SCStreamErrorAttemptToStartStreamState@-3807$SCStreamErrorAttemptToStopStreamState@-3808$SCStreamErrorAttemptToUpdateFilterState@-3809$SCStreamErrorFailedApplicationConnectionInterrupted@-3805$SCStreamErrorFailedApplicationConnectionInvalid@-3804$SCStreamErrorFailedNoMatchingApplicationContext@-3806$SCStreamErrorFailedToStart@-3802$SCStreamErrorFailedToStartAudioCapture@-3818$SCStreamErrorFailedToStartMicrophoneCapture@-3820$SCStreamErrorFailedToStopAudioCapture@-3819$SCStreamErrorInternalError@-3811$SCStreamErrorInvalidParameter@-3812$SCStreamErrorMissingEntitlements@-3803$SCStreamErrorNoCaptureSource@-3815$SCStreamErrorNoDisplayList@-3814$SCStreamErrorNoWindowList@-3813$SCStreamErrorRemovingStream@-3816$SCStreamErrorSystemStoppedStream@-3821$SCStreamErrorUserDeclined@-3801$SCStreamErrorUserStopped@-3817$SCStreamOutputTypeAudio@1$SCStreamOutputTypeMicrophone@2$SCStreamOutputTypeScreen@0$SCStreamTypeDisplay@1$SCStreamTypeWindow@0$"""
31
+ constants = """$SCStreamErrorDomain$SCStreamFrameInfoBoundingRect$SCStreamFrameInfoContentRect$SCStreamFrameInfoContentScale$SCStreamFrameInfoDirtyRects$SCStreamFrameInfoDisplayTime$SCStreamFrameInfoPresenterOverlayContentRect$SCStreamFrameInfoScaleFactor$SCStreamFrameInfoScreenRect$SCStreamFrameInfoStatus$SCStreamFrameInfoVideoOrientation$"""
32
+ enums = """$RP_REPORTING_END_REASON_SUMMARY_EVENT@2$RP_REPORTING_SCREENSHOT_EVENT@3$RP_REPORTING_SUMMARY_EVENT@1$SCCaptureDynamicRangeHDRCanonicalDisplay@2$SCCaptureDynamicRangeHDRLocalDisplay@1$SCCaptureDynamicRangeSDR@0$SCCaptureResolutionAutomatic@0$SCCaptureResolutionBest@1$SCCaptureResolutionNominal@2$SCContentSharingPickerModeMultipleApplications@8$SCContentSharingPickerModeMultipleWindows@2$SCContentSharingPickerModeSingleApplication@4$SCContentSharingPickerModeSingleDisplay@16$SCContentSharingPickerModeSingleWindow@1$SCFrameStatusBlank@2$SCFrameStatusComplete@0$SCFrameStatusIdle@1$SCFrameStatusStarted@4$SCFrameStatusStopped@5$SCFrameStatusSuspended@3$SCPresenterOverlayAlertSettingAlways@2$SCPresenterOverlayAlertSettingNever@1$SCPresenterOverlayAlertSettingSystem@0$SCRecordingEditorModePreview@0$SCRecordingEditorModeShare@1$SCScreenshotDisplayIntentCanonical@0$SCScreenshotDisplayIntentLocal@1$SCScreenshotDynamicRangeHDR@1$SCScreenshotDynamicRangeSDR@0$SCScreenshotDynamicRangeSDRAndHDR@2$SCShareableContentStyleApplication@3$SCShareableContentStyleDisplay@2$SCShareableContentStyleNone@0$SCShareableContentStyleWindow@1$SCStreamConfigurationPresetCaptureHDRRecordingPreservedSDRHDR10@4$SCStreamConfigurationPresetCaptureHDRScreenshotCanonicalDisplay@3$SCStreamConfigurationPresetCaptureHDRScreenshotLocalDisplay@2$SCStreamConfigurationPresetCaptureHDRStreamCanonicalDisplay@1$SCStreamConfigurationPresetCaptureHDRStreamLocalDisplay@0$SCStreamErrorAttemptToConfigState@-3810$SCStreamErrorAttemptToStartStreamState@-3807$SCStreamErrorAttemptToStopStreamState@-3808$SCStreamErrorAttemptToUpdateFilterState@-3809$SCStreamErrorFailedApplicationConnectionInterrupted@-3805$SCStreamErrorFailedApplicationConnectionInvalid@-3804$SCStreamErrorFailedNoMatchingApplicationContext@-3806$SCStreamErrorFailedToStart@-3802$SCStreamErrorFailedToStartAudioCapture@-3818$SCStreamErrorFailedToStartMicrophoneCapture@-3820$SCStreamErrorFailedToStopAudioCapture@-3819$SCStreamErrorInsufficientStorage@-3822$SCStreamErrorInternalError@-3811$SCStreamErrorInvalidParameter@-3812$SCStreamErrorMissingBackgroundMode@-3824$SCStreamErrorMissingEntitlements@-3803$SCStreamErrorNoCaptureSource@-3815$SCStreamErrorNoDisplayList@-3814$SCStreamErrorNoWindowList@-3813$SCStreamErrorNotSupported@-3823$SCStreamErrorRemovingStream@-3816$SCStreamErrorSystemStoppedStream@-3821$SCStreamErrorUserDeclined@-3801$SCStreamErrorUserStopped@-3817$SCStreamOutputTypeAudio@1$SCStreamOutputTypeMicrophone@2$SCStreamOutputTypeScreen@0$SCStreamTypeDisplay@1$SCStreamTypeWindow@0$"""
35
33
  misc.update(
36
34
  {
37
35
  "SCStreamConfigurationPreset": NewType("SCStreamConfigurationPreset", int),
36
+ "SCRecordingEditorMode": NewType("SCRecordingEditorMode", int),
38
37
  "SCCaptureResolutionType": NewType("SCCaptureResolutionType", int),
39
38
  "SCCaptureDynamicRange": NewType("SCCaptureDynamicRange", int),
40
39
  "SCContentSharingPickerMode": NewType("SCContentSharingPickerMode", int),
@@ -55,6 +54,25 @@ misc.update({})
55
54
  r = objc.registerMetaDataForSelector
56
55
  objc._updatingMetadata(True)
57
56
  try:
57
+ r(
58
+ b"NSObject",
59
+ b"clipBufferingOutput:didFailWithError:",
60
+ {
61
+ "required": False,
62
+ "retval": {"type": b"v"},
63
+ "arguments": {2: {"type": b"@"}, 3: {"type": b"@"}},
64
+ },
65
+ )
66
+ r(
67
+ b"NSObject",
68
+ b"clipBufferingOutputDidStartBuffering:",
69
+ {"required": False, "retval": {"type": b"v"}, "arguments": {2: {"type": b"@"}}},
70
+ )
71
+ r(
72
+ b"NSObject",
73
+ b"clipBufferingOutputDidStopBuffering:",
74
+ {"required": False, "retval": {"type": b"v"}, "arguments": {2: {"type": b"@"}}},
75
+ )
58
76
  r(
59
77
  b"NSObject",
60
78
  b"contentSharingPicker:didCancelForStream:",
@@ -78,6 +96,15 @@ try:
78
96
  b"contentSharingPickerStartDidFailWithError:",
79
97
  {"required": True, "retval": {"type": b"v"}, "arguments": {2: {"type": b"@"}}},
80
98
  )
99
+ r(
100
+ b"NSObject",
101
+ b"outputVideoEffectDidFailForStream:withError:",
102
+ {
103
+ "required": False,
104
+ "retval": {"type": b"v"},
105
+ "arguments": {2: {"type": b"@"}, 3: {"type": b"@"}},
106
+ },
107
+ )
81
108
  r(
82
109
  b"NSObject",
83
110
  b"outputVideoEffectDidStartForStream:",
@@ -88,6 +115,20 @@ try:
88
115
  b"outputVideoEffectDidStopForStream:",
89
116
  {"required": False, "retval": {"type": b"v"}, "arguments": {2: {"type": b"@"}}},
90
117
  )
118
+ r(
119
+ b"NSObject",
120
+ b"recordingEditor:didFailWithError:",
121
+ {
122
+ "required": False,
123
+ "retval": {"type": b"v"},
124
+ "arguments": {2: {"type": b"@"}, 3: {"type": b"@"}},
125
+ },
126
+ )
127
+ r(
128
+ b"NSObject",
129
+ b"recordingEditorDidDismiss:",
130
+ {"required": False, "retval": {"type": b"v"}, "arguments": {2: {"type": b"@"}}},
131
+ )
91
132
  r(
92
133
  b"NSObject",
93
134
  b"recordingOutput:didFailWithError:",
@@ -139,9 +180,26 @@ try:
139
180
  b"streamDidBecomeInactive:",
140
181
  {"required": False, "retval": {"type": b"v"}, "arguments": {2: {"type": b"@"}}},
141
182
  )
183
+ r(
184
+ b"SCClipBufferingOutput",
185
+ b"exportClipToURL:duration:completionHandler:",
186
+ {
187
+ "arguments": {
188
+ 4: {
189
+ "callable": {
190
+ "retval": {"type": b"v"},
191
+ "arguments": {0: {"type": b"^v"}, 1: {"type": b"@"}},
192
+ }
193
+ }
194
+ }
195
+ },
196
+ )
142
197
  r(b"SCContentFilter", b"includeMenuBar", {"retval": {"type": b"Z"}})
198
+ r(b"SCContentFilter", b"isCameraEnabled", {"retval": {"type": b"Z"}})
199
+ r(b"SCContentFilter", b"isMicrophoneEnabled", {"retval": {"type": b"Z"}})
143
200
  r(b"SCContentFilter", b"setIncludeMenuBar:", {"arguments": {2: {"type": b"Z"}}})
144
201
  r(b"SCContentSharingPicker", b"isActive", {"retval": {"type": b"Z"}})
202
+ r(b"SCContentSharingPicker", b"isAvailable", {"retval": {"type": b"Z"}})
145
203
  r(b"SCContentSharingPicker", b"setActive:", {"arguments": {2: {"type": b"Z"}}})
146
204
  r(
147
205
  b"SCContentSharingPickerConfiguration",
@@ -153,7 +211,65 @@ try:
153
211
  b"setAllowsChangingSelectedContent:",
154
212
  {"arguments": {2: {"type": b"Z"}}},
155
213
  )
214
+ r(
215
+ b"SCContentSharingPickerConfiguration",
216
+ b"setShowsCameraControl:",
217
+ {"arguments": {2: {"type": b"Z"}}},
218
+ )
219
+ r(
220
+ b"SCContentSharingPickerConfiguration",
221
+ b"setShowsMicrophoneControl:",
222
+ {"arguments": {2: {"type": b"Z"}}},
223
+ )
224
+ r(
225
+ b"SCContentSharingPickerConfiguration",
226
+ b"showsCameraControl",
227
+ {"retval": {"type": b"Z"}},
228
+ )
229
+ r(
230
+ b"SCContentSharingPickerConfiguration",
231
+ b"showsMicrophoneControl",
232
+ {"retval": {"type": b"Z"}},
233
+ )
234
+ r(
235
+ b"SCRecordingEditor",
236
+ b"presentFromWindow:completionHandler:",
237
+ {
238
+ "arguments": {
239
+ 3: {
240
+ "callable": {
241
+ "retval": {"type": b"v"},
242
+ "arguments": {0: {"type": b"^v"}, 1: {"type": b"@"}},
243
+ }
244
+ }
245
+ }
246
+ },
247
+ )
248
+ r(
249
+ b"SCRecordingEditor",
250
+ b"presentFromWindow:mode:completionHandler:",
251
+ {
252
+ "arguments": {
253
+ 4: {
254
+ "callable": {
255
+ "retval": {"type": b"v"},
256
+ "arguments": {0: {"type": b"^v"}, 1: {"type": b"@"}},
257
+ }
258
+ }
259
+ }
260
+ },
261
+ )
156
262
  r(b"SCRecordingOutput", b"recordedDuration", {"retval": {"type": b"{CMTime=qiIq}"}})
263
+ r(
264
+ b"SCRecordingOutputConfiguration",
265
+ b"mixesAudioWithMicrophone",
266
+ {"retval": {"type": b"Z"}},
267
+ )
268
+ r(
269
+ b"SCRecordingOutputConfiguration",
270
+ b"setMixesAudioWithMicrophone:",
271
+ {"arguments": {2: {"type": b"Z"}}},
272
+ )
157
273
  r(b"SCScreenshotConfiguration", b"ignoreClipping", {"retval": {"type": b"Z"}})
158
274
  r(b"SCScreenshotConfiguration", b"ignoreShadows", {"retval": {"type": b"Z"}})
159
275
  r(b"SCScreenshotConfiguration", b"includeChildWindows", {"retval": {"type": b"Z"}})
@@ -362,6 +478,11 @@ try:
362
478
  }
363
479
  },
364
480
  )
481
+ r(
482
+ b"SCStream",
483
+ b"addClipBufferingOutput:error:",
484
+ {"retval": {"type": b"Z"}, "arguments": {3: {"type_modifier": b"o"}}},
485
+ )
365
486
  r(
366
487
  b"SCStream",
367
488
  b"addRecordingOutput:error:",
@@ -372,6 +493,17 @@ try:
372
493
  b"addStreamOutput:type:sampleHandlerQueue:error:",
373
494
  {"retval": {"type": b"Z"}, "arguments": {5: {"type_modifier": b"o"}}},
374
495
  )
496
+ r(
497
+ b"SCStream",
498
+ b"addVideoEffectOutput:error:",
499
+ {"retval": {"type": b"Z"}, "arguments": {3: {"type_modifier": b"o"}}},
500
+ )
501
+ r(b"SCStream", b"isCapturing", {"retval": {"type": b"Z"}})
502
+ r(
503
+ b"SCStream",
504
+ b"removeClipBufferingOutput:error:",
505
+ {"retval": {"type": b"Z"}, "arguments": {3: {"type_modifier": b"o"}}},
506
+ )
375
507
  r(
376
508
  b"SCStream",
377
509
  b"removeRecordingOutput:error:",
@@ -382,6 +514,11 @@ try:
382
514
  b"removeStreamOutput:type:error:",
383
515
  {"retval": {"type": b"Z"}, "arguments": {4: {"type_modifier": b"o"}}},
384
516
  )
517
+ r(
518
+ b"SCStream",
519
+ b"removeVideoEffectOutput:error:",
520
+ {"retval": {"type": b"Z"}, "arguments": {3: {"type_modifier": b"o"}}},
521
+ )
385
522
  r(
386
523
  b"SCStream",
387
524
  b"startCaptureWithCompletionHandler:",
@@ -462,7 +599,7 @@ try:
462
599
  r(
463
600
  b"SCStreamConfiguration",
464
601
  b"minimumFrameInterval",
465
- {"retval": {"type": "{CMTime=qiIq}"}},
602
+ {"retval": {"type": b"{CMTime=qiIq}"}},
466
603
  )
467
604
  r(b"SCStreamConfiguration", b"preservesAspectRatio", {"retval": {"type": b"Z"}})
468
605
  r(b"SCStreamConfiguration", b"scalesToFit", {"retval": {"type": b"Z"}})
@@ -514,7 +651,7 @@ try:
514
651
  r(
515
652
  b"SCStreamConfiguration",
516
653
  b"setMinimumFrameInterval:",
517
- {"arguments": {2: {"type": "{CMTime=qiIq}"}}},
654
+ {"arguments": {2: {"type": b"{CMTime=qiIq}"}}},
518
655
  )
519
656
  r(
520
657
  b"SCStreamConfiguration",
@@ -541,6 +678,7 @@ try:
541
678
  finally:
542
679
  objc._updatingMetadata(False)
543
680
 
681
+ objc.registerNewKeywordsFromSelector("SCClipBufferingOutput", b"initWithDelegate:")
544
682
  objc.registerNewKeywordsFromSelector(
545
683
  "SCContentFilter", b"initWithDesktopIndependentWindow:"
546
684
  )
@@ -558,6 +696,8 @@ objc.registerNewKeywordsFromSelector(
558
696
  )
559
697
  objc.registerNewKeywordsFromSelector("SCContentSharingPicker", b"init")
560
698
  objc.registerNewKeywordsFromSelector("SCDisplay", b"init")
699
+ objc.registerNewKeywordsFromSelector("SCRecordingEditor", b"init")
700
+ objc.registerNewKeywordsFromSelector("SCRecordingEditor", b"initWithURL:")
561
701
  objc.registerNewKeywordsFromSelector(
562
702
  "SCRecordingOutput", b"initWithConfiguration:delegate:"
563
703
  )
@@ -568,11 +708,21 @@ objc.registerNewKeywordsFromSelector("SCStream", b"init")
568
708
  objc.registerNewKeywordsFromSelector(
569
709
  "SCStream", b"initWithFilter:configuration:delegate:"
570
710
  )
711
+ objc.registerNewKeywordsFromSelector("SCVideoEffectOutput", b"init")
712
+ objc.registerNewKeywordsFromSelector("SCVideoEffectOutput", b"initWithCameraDevice:")
571
713
  objc.registerNewKeywordsFromSelector("SCWindow", b"init")
572
714
 
573
715
  objc.registerNewKeywords(
574
716
  "SCStreamConfiguration", ("preset",), "streamConfigurationWithPreset_"
575
717
  )
576
718
  expressions = {}
719
+ formal_protocols = {
720
+ "SCClipBufferingOutputDelegate": "SCClipBufferingOutputDelegate",
721
+ "SCContentSharingPickerObserver": "SCContentSharingPickerObserver",
722
+ "SCRecordingEditorDelegate": "SCRecordingEditorDelegate",
723
+ "SCRecordingOutputDelegate": "SCRecordingOutputDelegate",
724
+ "SCStreamDelegate": "SCStreamDelegate",
725
+ "SCStreamOutput": "SCStreamOutput",
726
+ }
577
727
 
578
728
  # END OF FILE
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyobjc-framework-ScreenCaptureKit
3
- Version: 12.2.2
3
+ Version: 13.0
4
4
  Summary: Wrappers for the framework ScreenCaptureKit on macOS
5
5
  Home-page: https://github.com/ronaldoussoren/pyobjc
6
6
  Author: Ronald Oussoren
@@ -17,22 +17,22 @@ Classifier: Operating System :: MacOS :: MacOS X
17
17
  Classifier: Programming Language :: Python
18
18
  Classifier: Programming Language :: Python :: 3
19
19
  Classifier: Programming Language :: Python :: 3 :: Only
20
- Classifier: Programming Language :: Python :: 3.10
21
20
  Classifier: Programming Language :: Python :: 3.11
22
21
  Classifier: Programming Language :: Python :: 3.12
23
22
  Classifier: Programming Language :: Python :: 3.13
24
23
  Classifier: Programming Language :: Python :: 3.14
25
24
  Classifier: Programming Language :: Python :: 3.15
25
+ Classifier: Programming Language :: Python :: 3.16
26
26
  Classifier: Programming Language :: Python :: Implementation :: CPython
27
27
  Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable
28
28
  Classifier: Programming Language :: Objective C
29
29
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
30
30
  Classifier: Topic :: Software Development :: User Interfaces
31
- Requires-Python: >=3.10
31
+ Requires-Python: >=3.11
32
32
  Description-Content-Type: text/x-rst; charset=UTF-8
33
- Requires-Dist: pyobjc-core>=12.2.2
34
- Requires-Dist: pyobjc-framework-CoreMedia>=12.2.2
35
- Requires-Dist: pyobjc-framework-Cocoa>=12.2.2
33
+ Requires-Dist: pyobjc-core>=13.0
34
+ Requires-Dist: pyobjc-framework-CoreMedia>=13.0
35
+ Requires-Dist: pyobjc-framework-Cocoa>=13.0
36
36
  Dynamic: author
37
37
  Dynamic: author-email
38
38
  Dynamic: classifier
@@ -17,8 +17,10 @@ Modules/_ScreenCaptureKit_protocols.m
17
17
  Modules/pyobjc-api.h
18
18
  Modules/pyobjc-compat.h
19
19
  PyObjCTest/__init__.py
20
+ PyObjCTest/test_scclipbufferingoutput.py
20
21
  PyObjCTest/test_sccontentsharingpicker.py
21
22
  PyObjCTest/test_scerror.py
23
+ PyObjCTest/test_screcordingeditor.py
22
24
  PyObjCTest/test_screcordingoutput.py
23
25
  PyObjCTest/test_screencaputurekit.py
24
26
  PyObjCTest/test_scscreenshotmanager.py
@@ -26,5 +28,5 @@ PyObjCTest/test_scshareablecontent.py
26
28
  PyObjCTest/test_scstream.py
27
29
  metadata/ScreenCaptureKit.fwinfo
28
30
  metadata/metadata.ini
29
- metadata/raw/arm64-26.5.fwinfo
30
- metadata/raw/x86_64-26.5.fwinfo
31
+ metadata/raw/arm64-27.fwinfo
32
+ metadata/raw/x86_64-27.fwinfo
@@ -0,0 +1,3 @@
1
+ macOS 27.2 (26B123)
2
+ Apple clang version 21.0.0 (clang-2100.4.1.1)
3
+ SDK: macOS 27.2
@@ -0,0 +1,3 @@
1
+ pyobjc-core>=13.0
2
+ pyobjc-framework-CoreMedia>=13.0
3
+ pyobjc-framework-Cocoa>=13.0
@@ -2,6 +2,10 @@
2
2
  #include "Python.h"
3
3
  #include "pyobjc-api.h"
4
4
 
5
+ #ifdef USE_STATIC_ANALYZER
6
+ #include "../../pyobjc-core/Modules/objc/python-api-used.h"
7
+ #endif
8
+
5
9
  #import <Foundation/Foundation.h>
6
10
  #import <ScreenCaptureKit/ScreenCaptureKit.h>
7
11
 
@@ -10,6 +14,8 @@
10
14
  */
11
15
  #include "_ScreenCaptureKit_protocols.m"
12
16
 
17
+ NS_ASSUME_NONNULL_BEGIN
18
+
13
19
  static PyMethodDef mod_methods[] = {
14
20
  {0, 0, 0, 0} /* sentinel */
15
21
  };
@@ -55,10 +61,11 @@ static struct PyModuleDef mod_module = {
55
61
  .m_free = NULL,
56
62
  };
57
63
 
58
- PyObject* PyInit__ScreenCaptureKit(void);
64
+ PyObject* _Nullable PyInit__ScreenCaptureKit(void);
59
65
 
60
- PyObject* __attribute__((__visibility__("default")))
66
+ PyObject* _Nullable __attribute__((__visibility__("default")))
61
67
  PyInit__ScreenCaptureKit(void)
62
68
  {
63
69
  return PyModuleDef_Init(&mod_module);
64
70
  }
71
+ NS_ASSUME_NONNULL_END
@@ -1,3 +1,8 @@
1
+ // LCOV_EXCL_START
2
+ // This function is only present to ensure protocols are
3
+ // available at runtime.
4
+ NS_ASSUME_NONNULL_BEGIN
5
+
1
6
  static void __attribute__((__used__))
2
7
  use_protocols(void)
3
8
  {
@@ -14,4 +19,13 @@ use_protocols(void)
14
19
  p = PyObjC_IdToPython(@protocol(SCRecordingOutputDelegate));
15
20
  Py_XDECREF(p);
16
21
  #endif
22
+ #if PyObjC_BUILD_RELEASE >= 2700
23
+ p = PyObjC_IdToPython(@protocol(SCClipBufferingOutputDelegate));
24
+ Py_XDECREF(p);
25
+ p = PyObjC_IdToPython(@protocol(SCRecordingEditorDelegate));
26
+ Py_XDECREF(p);
27
+ #endif
17
28
  }
29
+
30
+ NS_ASSUME_NONNULL_END
31
+ // LCOV_EXCL_STOP
@@ -60,6 +60,11 @@ typedef int(RegisterMethodMappingFunctionType)(
60
60
  PyObject* _Nonnull const* _Nonnull, size_t),
61
61
  IMP _Nullable (*_Nonnull)(PyObject* _Nonnull, PyObject* _Nonnull));
62
62
 
63
+ #ifndef PyObjC_FUNCTION_CALL_H
64
+ typedef PyObject* _Nullable (*PyObjC_FunctionCallFunc)(
65
+ PyObject* meth, PyObject* _Nonnull const* _Nonnull args, size_t nargs);
66
+ #endif
67
+
63
68
  struct pyobjc_api {
64
69
  int api_version; /* API version */
65
70
  size_t struct_len; /* Length of this struct */
@@ -117,6 +122,9 @@ struct pyobjc_api {
117
122
 
118
123
  PyObject* _Nullable (*_Nonnull createopaquepointertype)(const char*, const char*,
119
124
  const char*);
125
+ int (*_Nonnull register_functioncaller)(void*, PyObjC_FunctionCallFunc);
126
+ PyObject* _Nullable (*_Nonnull create_registered_struct)(
127
+ const char*, Py_ssize_t, const char* _Nonnull* _Nullable, Py_ssize_t*);
120
128
  };
121
129
 
122
130
  #ifndef PYOBJC_BUILD
@@ -159,6 +167,8 @@ static struct pyobjc_api* PyObjC_API;
159
167
  #define PyObjC_CheckArgCount (PyObjC_API->checkargcount)
160
168
  #define PyObjC_CheckNoKwnames (PyObjC_API->checknokwnames)
161
169
  #define PyObjCCreateOpaquePointerType (PyObjC_API->createopaquepointertype)
170
+ #define PyObjCRegister_FunctionCaller (PyObjC_API->register_functioncaller)
171
+ #define PyObjC_CreateRegisteredStruct (PyObjC_API->create_registered_struct)
162
172
 
163
173
  typedef void (*PyObjC_Function_Pointer)(void);
164
174
  typedef struct PyObjC_function_map {
@@ -178,21 +188,25 @@ static inline int
178
188
  PyObjC_ImportAPI(PyObject* calling_module)
179
189
  {
180
190
  PyObjC_API = (struct pyobjc_api*)PyCapsule_Import("objc." PYOBJC_API_NAME, 0);
181
- if (PyObjC_API == NULL) {
182
- return -1;
191
+ if (PyObjC_API == NULL) { // LCOV_BR_EXCL_LINE
192
+ return -1; // LCOV_EXCL_LINE
183
193
  }
184
- if (PyObjC_API->api_version != PYOBJC_API_VERSION) {
194
+ if (PyObjC_API->api_version != PYOBJC_API_VERSION) { // LCOV_BR_EXCL_LINE
195
+ // LCOV_EXCL_START
185
196
  PyErr_Format(PyExc_RuntimeError,
186
197
  "Wrong version of PyObjC C API (got %d, expected %d)",
187
198
  (int)PyObjC_API->api_version, (int)PYOBJC_API_VERSION);
188
199
  return -1;
200
+ // LCOV_EXCL_STOP
189
201
  }
190
202
 
191
- if (PyObjC_API->struct_len < PyObjC_EXPECTED_STRUCT_SIZE) {
203
+ if (PyObjC_API->struct_len < PyObjC_EXPECTED_STRUCT_SIZE) { // LCOV_EXCL_LINE
204
+ // LCOV_EXCL_START
192
205
  PyErr_Format(PyExc_RuntimeError,
193
206
  "Wrong struct-size of PyObjC C API (got %d, expected %d)",
194
207
  (int)PyObjC_API->struct_len, (int)sizeof(struct pyobjc_api));
195
208
  return -1;
209
+ // LCOV_EXCL_STOP
196
210
  }
197
211
 
198
212
  /* Current pyobjc implementation doesn't allow deregistering
@@ -167,24 +167,6 @@ _PyObjCTuple_GetItem(PyObject* tuple, Py_ssize_t idx)
167
167
  PyGILState_Release(_GILState); \
168
168
  } while (0)
169
169
 
170
- #if PY_VERSION_HEX < 0x030a0000
171
-
172
- static inline PyObject*
173
- Py_NewRef(PyObject* o)
174
- {
175
- Py_INCREF(o);
176
- return o;
177
- }
178
-
179
- static inline PyObject*
180
- Py_XNewRef(PyObject* o)
181
- {
182
- Py_XINCREF(o);
183
- return o;
184
- }
185
-
186
- #endif /* PY_VERSION_HEX < 0x030a0000 */
187
-
188
170
  #if PY_VERSION_HEX < 0x030d0000
189
171
  #define Py_BEGIN_CRITICAL_SECTION(value) \
190
172
  { \
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyobjc-framework-ScreenCaptureKit
3
- Version: 12.2.2
3
+ Version: 13.0
4
4
  Summary: Wrappers for the framework ScreenCaptureKit on macOS
5
5
  Home-page: https://github.com/ronaldoussoren/pyobjc
6
6
  Author: Ronald Oussoren
@@ -17,22 +17,22 @@ Classifier: Operating System :: MacOS :: MacOS X
17
17
  Classifier: Programming Language :: Python
18
18
  Classifier: Programming Language :: Python :: 3
19
19
  Classifier: Programming Language :: Python :: 3 :: Only
20
- Classifier: Programming Language :: Python :: 3.10
21
20
  Classifier: Programming Language :: Python :: 3.11
22
21
  Classifier: Programming Language :: Python :: 3.12
23
22
  Classifier: Programming Language :: Python :: 3.13
24
23
  Classifier: Programming Language :: Python :: 3.14
25
24
  Classifier: Programming Language :: Python :: 3.15
25
+ Classifier: Programming Language :: Python :: 3.16
26
26
  Classifier: Programming Language :: Python :: Implementation :: CPython
27
27
  Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable
28
28
  Classifier: Programming Language :: Objective C
29
29
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
30
30
  Classifier: Topic :: Software Development :: User Interfaces
31
- Requires-Python: >=3.10
31
+ Requires-Python: >=3.11
32
32
  Description-Content-Type: text/x-rst; charset=UTF-8
33
- Requires-Dist: pyobjc-core>=12.2.2
34
- Requires-Dist: pyobjc-framework-CoreMedia>=12.2.2
35
- Requires-Dist: pyobjc-framework-Cocoa>=12.2.2
33
+ Requires-Dist: pyobjc-core>=13.0
34
+ Requires-Dist: pyobjc-framework-CoreMedia>=13.0
35
+ Requires-Dist: pyobjc-framework-Cocoa>=13.0
36
36
  Dynamic: author
37
37
  Dynamic: author-email
38
38
  Dynamic: classifier
@@ -0,0 +1,17 @@
1
+ from PyObjCTools.TestSupport import TestCase, min_os_level, min_sdk_level
2
+
3
+ import ScreenCaptureKit
4
+
5
+
6
+ class TestSCClipBufferingOutput(TestCase):
7
+ @min_sdk_level("27.0")
8
+ def test_protocols(self):
9
+ self.assertProtocolExists("SCClipBufferingOutputDelegate", ScreenCaptureKit)
10
+
11
+ @min_os_level("27.0")
12
+ def test_methods(self):
13
+ self.assertArgIsBlock(
14
+ ScreenCaptureKit.SCClipBufferingOutput.exportClipToURL_duration_completionHandler_,
15
+ 2,
16
+ b"v@",
17
+ )
@@ -4,7 +4,7 @@ import ScreenCaptureKit
4
4
 
5
5
 
6
6
  class TestSCContentSharingPicker(TestCase):
7
- def test_constants(self):
7
+ def test_enums(self):
8
8
  self.assertIsEnumType(ScreenCaptureKit.SCContentSharingPickerMode)
9
9
  self.assertEqual(
10
10
  ScreenCaptureKit.SCContentSharingPickerModeSingleWindow, 1 << 0
@@ -24,7 +24,7 @@ class TestSCContentSharingPicker(TestCase):
24
24
 
25
25
  @min_sdk_level("14.0")
26
26
  def test_protocols(self):
27
- self.assertProtocolExists("SCContentSharingPickerObserver")
27
+ self.assertProtocolExists("SCContentSharingPickerObserver", ScreenCaptureKit)
28
28
 
29
29
  @min_os_level("14.0")
30
30
  def test_methods(self):
@@ -38,3 +38,16 @@ class TestSCContentSharingPicker(TestCase):
38
38
 
39
39
  self.assertResultIsBOOL(ScreenCaptureKit.SCContentSharingPicker.isActive)
40
40
  self.assertArgIsBOOL(ScreenCaptureKit.SCContentSharingPicker.setActive_, 0)
41
+
42
+ @min_os_level("27.0")
43
+ def test_methods27_0(self):
44
+ # Some tests fail when testing through the class.
45
+ obj = ScreenCaptureKit.SCContentSharingPickerConfiguration()
46
+
47
+ self.assertResultIsBOOL(obj.showsMicrophoneControl)
48
+ self.assertArgIsBOOL(obj.setShowsMicrophoneControl_, 0)
49
+
50
+ self.assertResultIsBOOL(obj.showsCameraControl)
51
+ self.assertArgIsBOOL(obj.setShowsCameraControl_, 0)
52
+
53
+ self.assertResultIsBOOL(ScreenCaptureKit.SCContentSharingPicker.isAvailable)
@@ -3,10 +3,8 @@ import ScreenCaptureKit
3
3
 
4
4
 
5
5
  class TestSCError(TestCase):
6
- def test_enum_types(self):
6
+ def test_enums(self):
7
7
  self.assertIsEnumType(ScreenCaptureKit.SCStreamErrorCode)
8
-
9
- def test_constants(self):
10
8
  self.assertEqual(ScreenCaptureKit.SCStreamErrorUserDeclined, -3801)
11
9
  self.assertEqual(ScreenCaptureKit.SCStreamErrorFailedToStart, -3802)
12
10
  self.assertEqual(ScreenCaptureKit.SCStreamErrorMissingEntitlements, -3803)
@@ -38,3 +36,6 @@ class TestSCError(TestCase):
38
36
  ScreenCaptureKit.SCStreamErrorFailedToStartMicrophoneCapture, -3820
39
37
  )
40
38
  self.assertEqual(ScreenCaptureKit.SCStreamErrorSystemStoppedStream, -3821)
39
+ self.assertEqual(ScreenCaptureKit.SCStreamErrorInsufficientStorage, -3822)
40
+ self.assertEqual(ScreenCaptureKit.SCStreamErrorNotSupported, -3823)
41
+ self.assertEqual(ScreenCaptureKit.SCStreamErrorMissingBackgroundMode, -3824)
@@ -0,0 +1,17 @@
1
+ from PyObjCTools.TestSupport import TestCase, min_os_level, min_sdk_level
2
+
3
+ import ScreenCaptureKit
4
+
5
+
6
+ class TestSCRecordingEditor(TestCase):
7
+ @min_sdk_level("27.0")
8
+ def test_protocols(self):
9
+ self.assertProtocolExists("SCRecordingEditorDelegate", ScreenCaptureKit)
10
+
11
+ @min_os_level("27.0")
12
+ def test_methods(self):
13
+ self.assertArgIsBlock(
14
+ ScreenCaptureKit.SCRecordingEditor.presentFromWindow_completionHandler_,
15
+ 1,
16
+ b"v@",
17
+ )
@@ -0,0 +1,19 @@
1
+ from PyObjCTools.TestSupport import TestCase, min_sdk_level, min_os_level
2
+
3
+ import ScreenCaptureKit
4
+
5
+
6
+ class TestSCRecordingOutput(TestCase):
7
+ @min_sdk_level("15.0")
8
+ def test_protocols(self):
9
+ self.assertProtocolExists("SCRecordingOutputDelegate", ScreenCaptureKit)
10
+
11
+ @min_os_level("27.0")
12
+ def test_methods(self):
13
+ self.assertResultIsBOOL(
14
+ ScreenCaptureKit.SCRecordingOutputConfiguration.mixesAudioWithMicrophone
15
+ )
16
+ self.assertArgIsBOOL(
17
+ ScreenCaptureKit.SCRecordingOutputConfiguration.setMixesAudioWithMicrophone_,
18
+ 0,
19
+ )
@@ -4,7 +4,7 @@ import ScreenCaptureKit
4
4
 
5
5
 
6
6
  class TestSCScreenshotManager(TestCase):
7
- def test_constants(self):
7
+ def test_enums(self):
8
8
  self.assertIsEnumType(ScreenCaptureKit.SCScreenshotDisplayIntent)
9
9
  self.assertEqual(ScreenCaptureKit.SCScreenshotDisplayIntentCanonical, 0)
10
10
  self.assertEqual(ScreenCaptureKit.SCScreenshotDisplayIntentLocal, 1)