pyobjc-framework-SpriteKit 12.2.1__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 (59) hide show
  1. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/Lib/SpriteKit/_metadata.py +7 -7
  2. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/Lib/pyobjc_framework_SpriteKit.egg-info/PKG-INFO +6 -6
  3. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/Lib/pyobjc_framework_SpriteKit.egg-info/SOURCES.txt +2 -2
  4. pyobjc_framework_spritekit-13.0/Lib/pyobjc_framework_SpriteKit.egg-info/pyobjc-build-info.txt +3 -0
  5. pyobjc_framework_spritekit-13.0/Lib/pyobjc_framework_SpriteKit.egg-info/requires.txt +3 -0
  6. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/Modules/_SpriteKit.m +56 -38
  7. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/Modules/_SpriteKit_protocols.m +7 -5
  8. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/Modules/pyobjc-api.h +18 -4
  9. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/Modules/pyobjc-compat.h +0 -18
  10. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PKG-INFO +6 -6
  11. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_sk3dnode.py +1 -1
  12. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skaction.py +4 -9
  13. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skattribute.py +1 -4
  14. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skconstraint.py +1 -1
  15. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skeffectnode.py +2 -3
  16. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skemitternode.py +1 -3
  17. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skfieldnode.py +1 -1
  18. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skkeyframesequence.py +2 -4
  19. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_sklabelnode.py +3 -6
  20. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_sklightnode.py +1 -1
  21. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skmutabletexture.py +1 -1
  22. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_sknode.py +3 -7
  23. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skphysicsbody.py +2 -6
  24. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skphysicsjoint.py +2 -3
  25. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skphysicsworld.py +4 -5
  26. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skregion.py +1 -1
  27. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skrenderer.py +1 -1
  28. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skscene.py +3 -6
  29. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skshapenode.py +1 -1
  30. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skspritenode.py +1 -1
  31. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_sktexture.py +3 -7
  32. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_sktextureatlas.py +2 -3
  33. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_sktiledefinition.py +2 -5
  34. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_sktileset.py +27 -29
  35. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_sktransformnode.py +1 -1
  36. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_sktransition.py +3 -7
  37. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skuniform.py +1 -4
  38. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skversion.py +1 -1
  39. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skview.py +6 -6
  40. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_skwarpgeometry.py +44 -0
  41. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_snode_nsaccessibility.py +1 -1
  42. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/metadata/SpriteKit.fwinfo +0 -139
  43. pyobjc_framework_spritekit-12.2.1/metadata/raw/arm64-26.5.fwinfo → pyobjc_framework_spritekit-13.0/metadata/raw/arm64-27.fwinfo +33 -34
  44. pyobjc_framework_spritekit-12.2.1/metadata/raw/x86_64-26.5.fwinfo → pyobjc_framework_spritekit-13.0/metadata/raw/x86_64-27.fwinfo +33 -34
  45. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/pyobjc_setup.py +7 -7
  46. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/setup.py +1 -1
  47. pyobjc_framework_spritekit-12.2.1/Lib/pyobjc_framework_SpriteKit.egg-info/pyobjc-build-info.txt +0 -3
  48. pyobjc_framework_spritekit-12.2.1/Lib/pyobjc_framework_SpriteKit.egg-info/requires.txt +0 -3
  49. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/Lib/SpriteKit/__init__.py +0 -0
  50. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/Lib/pyobjc_framework_SpriteKit.egg-info/dependency_links.txt +0 -0
  51. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/Lib/pyobjc_framework_SpriteKit.egg-info/not-zip-safe +0 -0
  52. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/Lib/pyobjc_framework_SpriteKit.egg-info/top_level.txt +0 -0
  53. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/License.txt +0 -0
  54. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/MANIFEST.in +0 -0
  55. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/__init__.py +0 -0
  56. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/PyObjCTest/test_spritekit.py +0 -0
  57. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/metadata/metadata.ini +0 -0
  58. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/pyproject.toml +0 -0
  59. {pyobjc_framework_spritekit-12.2.1 → pyobjc_framework_spritekit-13.0}/setup.cfg +0 -0
@@ -1,7 +1,5 @@
1
1
  # This file is generated by objective.metadata
2
2
  #
3
- # Last update: Fri May 29 08:22:43 2026
4
- #
5
3
  # flake8: noqa
6
4
 
7
5
  import objc, sys
@@ -570,11 +568,7 @@ try:
570
568
  r(
571
569
  b"SKNode",
572
570
  b"nodeWithFileNamed:securelyWithClasses:andError:",
573
- {
574
- "arguments": {
575
- 4: {"null_accepted": True, "type_modifier": b"o", "name": "error"}
576
- }
577
- },
571
+ {"arguments": {4: {"type_modifier": b"o"}}},
578
572
  )
579
573
  r(
580
574
  b"SKNode",
@@ -1350,5 +1344,11 @@ expressions = {
1350
1344
  "SKTileAdjacencyUpperRightEdge": "SKTileAdjacencyDown | SKTileAdjacencyLowerLeft | SKTileAdjacencyLeft",
1351
1345
  "SKTileAdjacencyLowerLeftCorner": "SKTileAdjacencyUp | SKTileAdjacencyRight | SKTileAdjacencyLowerRight | SKTileAdjacencyDown | SKTileAdjacencyLowerLeft | SKTileAdjacencyLeft | SKTileAdjacencyUpperLeft",
1352
1346
  }
1347
+ formal_protocols = {
1348
+ "SKPhysicsContactDelegate": "SKPhysicsContactDelegate",
1349
+ "SKSceneDelegate": "SKSceneDelegate",
1350
+ "SKViewDelegate": "SKViewDelegate",
1351
+ "SKWarpable": "SKWarpable",
1352
+ }
1353
1353
 
1354
1354
  # END OF FILE
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyobjc-framework-SpriteKit
3
- Version: 12.2.1
3
+ Version: 13.0
4
4
  Summary: Wrappers for the framework SpriteKit 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.1
34
- Requires-Dist: pyobjc-framework-Cocoa>=12.2.1
35
- Requires-Dist: pyobjc-framework-Quartz>=12.2.1
33
+ Requires-Dist: pyobjc-core>=13.0
34
+ Requires-Dist: pyobjc-framework-Cocoa>=13.0
35
+ Requires-Dist: pyobjc-framework-Quartz>=13.0
36
36
  Dynamic: author
37
37
  Dynamic: author-email
38
38
  Dynamic: classifier
@@ -51,5 +51,5 @@ PyObjCTest/test_snode_nsaccessibility.py
51
51
  PyObjCTest/test_spritekit.py
52
52
  metadata/SpriteKit.fwinfo
53
53
  metadata/metadata.ini
54
- metadata/raw/arm64-26.5.fwinfo
55
- metadata/raw/x86_64-26.5.fwinfo
54
+ metadata/raw/arm64-27.fwinfo
55
+ 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-Cocoa>=13.0
3
+ pyobjc-framework-Quartz>=13.0
@@ -2,15 +2,20 @@
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
  #include <objc/objc-runtime.h>
6
10
 
7
11
  #import <SpriteKit/SpriteKit.h>
8
12
 
9
13
  #include "_SpriteKit_protocols.m"
10
14
 
15
+ NS_ASSUME_NONNULL_BEGIN
16
+
11
17
  #if PyObjC_BUILD_RELEASE >= 1012
12
- static vector_float2*
13
- parse_v2f_array(NSInteger vertexCount, PyObject* value)
18
+ static vector_float2* _Nullable parse_v2f_array(NSInteger vertexCount, PyObject* value)
14
19
  {
15
20
  vector_float2* result;
16
21
  NSInteger i;
@@ -24,17 +29,21 @@ parse_v2f_array(NSInteger vertexCount, PyObject* value)
24
29
  return NULL;
25
30
  }
26
31
 
27
- result = PyMem_Malloc(sizeof(vector_float2) * vertexCount);
28
- if (result == NULL) {
32
+ result = PyMem_Calloc(vertexCount, sizeof(vector_float2));
33
+ if (result == NULL) { // LCOV_BR_EXCL_LINE
34
+ // LCOV_EXCL_START
29
35
  PyErr_NoMemory();
30
36
  return NULL;
37
+ // LCOV_EXCL_STOP
31
38
  }
32
39
 
33
40
  for (i = 0; i < vertexCount; i++) {
34
41
  PyObject* item = PySequence_GetItem(value, i);
35
- if (item == NULL) {
42
+ if (item == NULL) { // LCOV_BR_EXCL_LINE
43
+ // LCOV_EXCL_START
36
44
  PyMem_Free(result);
37
45
  return NULL;
46
+ // LCOV_EXCL_STOP
38
47
  }
39
48
  if (PyObjC_PythonToObjC("<2f>", item, result + i) == -1) {
40
49
  Py_DECREF(item);
@@ -89,12 +98,17 @@ static PyObject* _Nullable mod_SKWarpGeometryGrid_xWithColumns_rows_sourcePositi
89
98
  }
90
99
  }
91
100
 
92
- if (PyObjC_PythonToObjC(@encode(id), self, &super.receiver) == -1) {
93
- PyMem_Free(srcPos);
94
- PyMem_Free(dstPos);
101
+ if (PyObjC_PythonToObjC(@encode(id), self, &super.receiver)
102
+ == -1) { // LCOV_BR_EXCL_LINE
103
+ // LCOV_EXCL_START
104
+ if (srcPos != NULL)
105
+ PyMem_Free(srcPos);
106
+ if (dstPos != NULL)
107
+ PyMem_Free(dstPos);
95
108
  return NULL;
109
+ // LCOV_EXCL_STOP
96
110
  }
97
- super.super_class = object_getClass(super.receiver);
111
+ super.super_class = (Class _Nonnull)object_getClass(super.receiver);
98
112
 
99
113
  SEL sel = PyObjCSelector_GetSelector(method);
100
114
 
@@ -104,9 +118,9 @@ static PyObject* _Nullable mod_SKWarpGeometryGrid_xWithColumns_rows_sourcePositi
104
118
  vector_float2*))objc_msgSendSuper)(&super, sel, rows, columns,
105
119
  srcPos, dstPos);
106
120
 
107
- } @catch (NSException* localException) {
108
- NSLog(@"failed with %@", localException);
109
- PyObjCErr_FromObjC(localException);
121
+ } @catch (NSException* localException) { // LCOV_EXCL_LINE
122
+ NSLog(@"failed with %@", localException); // LCOV_EXCL_LINE
123
+ PyObjCErr_FromObjC(localException); // LCOV_EXCL_LINE
110
124
  }
111
125
  Py_END_ALLOW_THREADS
112
126
 
@@ -117,8 +131,8 @@ static PyObject* _Nullable mod_SKWarpGeometryGrid_xWithColumns_rows_sourcePositi
117
131
  PyMem_Free(dstPos);
118
132
  }
119
133
 
120
- if (PyErr_Occurred()) {
121
- return NULL;
134
+ if (PyErr_Occurred()) { // LCOV_BR_EXCL_LINE
135
+ return NULL; // LCOV_EXCL_LINE
122
136
  }
123
137
 
124
138
  return PyObjC_IdToPython(rv);
@@ -139,13 +153,13 @@ static PyObject* _Nullable mod_SKWarpGeometryGrid_gridByReplacingPositions_(
139
153
  Py_BEGIN_ALLOW_THREADS
140
154
  @try {
141
155
  vertexCount = [(SKWarpGeometryGrid*)PyObjCObject_GetObject(self) vertexCount];
142
- } @catch (NSException* localException) {
143
- PyObjCErr_FromObjC(localException);
156
+ } @catch (NSException* localException) { // LCOV_EXCL_LINE
157
+ PyObjCErr_FromObjC(localException); // LCOV_EXCL_LINE
144
158
  }
145
159
  Py_END_ALLOW_THREADS
146
160
 
147
- if (PyErr_Occurred()) {
148
- return NULL;
161
+ if (PyErr_Occurred()) { // LCOV_BR_EXCL_LINE
162
+ return NULL; // LCOV_EXCL_LINE
149
163
  }
150
164
 
151
165
  /* Not Nullable */
@@ -154,11 +168,14 @@ static PyObject* _Nullable mod_SKWarpGeometryGrid_gridByReplacingPositions_(
154
168
  return NULL;
155
169
  }
156
170
 
157
- if (PyObjC_PythonToObjC(@encode(id), self, &super.receiver) == -1) {
171
+ if (PyObjC_PythonToObjC(@encode(id), self, &super.receiver)
172
+ == -1) { // LCOV_BR_EXCL_LINE
173
+ // LCOV_EXCL_START
158
174
  PyMem_Free(pos);
159
175
  return NULL;
176
+ // LCOV_EXCL_STOP
160
177
  }
161
- super.super_class = object_getClass(super.receiver);
178
+ super.super_class = (Class _Nonnull)object_getClass(super.receiver);
162
179
 
163
180
  SEL sel = PyObjCSelector_GetSelector(method);
164
181
 
@@ -167,17 +184,17 @@ static PyObject* _Nullable mod_SKWarpGeometryGrid_gridByReplacingPositions_(
167
184
  rv = ((id (*)(struct objc_super*, SEL, vector_float2*))objc_msgSendSuper)(
168
185
  &super, sel, pos);
169
186
 
170
- } @catch (NSException* localException) {
171
- PyObjCErr_FromObjC(localException);
187
+ } @catch (NSException* localException) { // LCOV_EXCL_LINE
188
+ PyObjCErr_FromObjC(localException); // LCOV_EXCL_LINE
172
189
  }
173
190
  Py_END_ALLOW_THREADS
174
191
 
175
- if (pos != NULL) {
192
+ if (pos != NULL) { // LCOV_BR_EXCL_LINE
176
193
  PyMem_Free(pos);
177
194
  }
178
195
 
179
- if (PyErr_Occurred()) {
180
- return NULL;
196
+ if (PyErr_Occurred()) { // LCOV_BR_EXCL_LINE
197
+ return NULL; // LCOV_EXCL_LINE
181
198
  }
182
199
 
183
200
  return PyObjC_IdToPython(rv);
@@ -192,19 +209,19 @@ static PyMethodDef mod_methods[] = {
192
209
  static int
193
210
  mod_exec_module(PyObject* m)
194
211
  {
195
- if (PyObjC_ImportAPI(m) == -1)
196
- return -1;
212
+ if (PyObjC_ImportAPI(m) == -1) // LCOV_BR_EXCL_LINE
213
+ return -1; // LCOV_EXCL_LINE
197
214
 
198
215
  #if PyObjC_BUILD_RELEASE >= 1012
199
216
  Class classSKWarpGeometryGrid = objc_lookUpClass("SKWarpGeometryGrid");
200
- if (classSKWarpGeometryGrid != NULL) {
217
+ if (classSKWarpGeometryGrid != NULL) { // LCOV_BR_EXCL_LINE
201
218
  if (PyObjC_RegisterMethodMapping(
202
219
  classSKWarpGeometryGrid,
203
220
  @selector(gridWithColumns:rows:sourcePositions:destPositions:),
204
221
  mod_SKWarpGeometryGrid_xWithColumns_rows_sourcePositions_destPositions_,
205
222
  PyObjCUnsupportedMethod_IMP)
206
- == -1) {
207
- return -1;
223
+ == -1) { // LCOV_BR_EXCL_LINE
224
+ return -1; // LCOV_EXCL_LINE
208
225
  }
209
226
 
210
227
  if (PyObjC_RegisterMethodMapping(
@@ -212,24 +229,24 @@ mod_exec_module(PyObject* m)
212
229
  @selector(initWithColumns:rows:sourcePositions:destPositions:),
213
230
  mod_SKWarpGeometryGrid_xWithColumns_rows_sourcePositions_destPositions_,
214
231
  PyObjCUnsupportedMethod_IMP)
215
- == -1) {
216
- return -1;
232
+ == -1) { // LCOV_BR_EXCL_LINE
233
+ return -1; // LCOV_EXCL_LINE
217
234
  }
218
235
 
219
236
  if (PyObjC_RegisterMethodMapping(classSKWarpGeometryGrid,
220
237
  @selector(gridByReplacingSourcePositions:),
221
238
  mod_SKWarpGeometryGrid_gridByReplacingPositions_,
222
239
  PyObjCUnsupportedMethod_IMP)
223
- == -1) {
224
- return -1;
240
+ == -1) { // LCOV_BR_EXCL_LINE
241
+ return -1; // LCOV_EXCL_LINE
225
242
  }
226
243
 
227
244
  if (PyObjC_RegisterMethodMapping(classSKWarpGeometryGrid,
228
245
  @selector(gridByReplacingDestPositions:),
229
246
  mod_SKWarpGeometryGrid_gridByReplacingPositions_,
230
247
  PyObjCUnsupportedMethod_IMP)
231
- == -1) {
232
- return -1;
248
+ == -1) { // LCOV_BR_EXCL_LINE
249
+ return -1; // LCOV_EXCL_LINE
233
250
  }
234
251
  }
235
252
  #endif
@@ -268,10 +285,11 @@ static struct PyModuleDef mod_module = {
268
285
  .m_free = NULL,
269
286
  };
270
287
 
271
- PyObject* PyInit__SpriteKit(void);
288
+ PyObject* _Nullable PyInit__SpriteKit(void);
272
289
 
273
- PyObject* __attribute__((__visibility__("default")))
290
+ PyObject* _Nullable __attribute__((__visibility__("default")))
274
291
  PyInit__SpriteKit(void)
275
292
  {
276
293
  return PyModuleDef_Init(&mod_module);
277
294
  }
295
+ NS_ASSUME_NONNULL_END
@@ -1,8 +1,7 @@
1
- /*
2
- * This file is generated by objective.metadata
3
- *
4
- * Last update: Tue May 26 22:15:29 2015
5
- */
1
+ // LCOV_EXCL_START
2
+ // This function is only present to ensure protocols are
3
+ // available at runtime.
4
+ NS_ASSUME_NONNULL_BEGIN
6
5
 
7
6
  static void __attribute__((__used__))
8
7
  use_protocols(void)
@@ -19,3 +18,6 @@ use_protocols(void)
19
18
  Py_XDECREF(p);
20
19
  #endif
21
20
  }
21
+
22
+ NS_ASSUME_NONNULL_END
23
+ // 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-SpriteKit
3
- Version: 12.2.1
3
+ Version: 13.0
4
4
  Summary: Wrappers for the framework SpriteKit 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.1
34
- Requires-Dist: pyobjc-framework-Cocoa>=12.2.1
35
- Requires-Dist: pyobjc-framework-Quartz>=12.2.1
33
+ Requires-Dist: pyobjc-core>=13.0
34
+ Requires-Dist: pyobjc-framework-Cocoa>=13.0
35
+ Requires-Dist: pyobjc-framework-Quartz>=13.0
36
36
  Dynamic: author
37
37
  Dynamic: author-email
38
38
  Dynamic: classifier
@@ -7,7 +7,7 @@ import SpriteKit
7
7
 
8
8
  class TestSK3Node(TestCase):
9
9
  @min_os_level("10.10")
10
- def testClasses(self):
10
+ def test_classes(self):
11
11
  self.assertIsInstance(SpriteKit.SK3DNode, objc.objc_class)
12
12
 
13
13
  self.assertResultIsBOOL(SpriteKit.SK3DNode.isPlaying)
@@ -2,23 +2,18 @@ import objc
2
2
  from PyObjCTools.TestSupport import TestCase, min_os_level, expectedFailure
3
3
  import SpriteKit
4
4
 
5
-
6
5
  SKActionTimingFunction = objc._C_FLT + objc._C_FLT
7
6
 
8
7
 
9
8
  class TestSKAction(TestCase):
10
- def test_enum_types(self):
9
+ def test_enums(self):
11
10
  self.assertIsEnumType(SpriteKit.SKActionTimingMode)
12
-
13
- @min_os_level("10.9")
14
- def testConstants(self):
15
11
  self.assertEqual(SpriteKit.SKActionTimingLinear, 0)
16
12
  self.assertEqual(SpriteKit.SKActionTimingEaseIn, 1)
17
13
  self.assertEqual(SpriteKit.SKActionTimingEaseOut, 2)
18
14
  self.assertEqual(SpriteKit.SKActionTimingEaseInEaseOut, 3)
19
15
 
20
- @min_os_level("10.9")
21
- def testMethods(self):
16
+ def test_methods(self):
22
17
  self.assertIsInstance(SpriteKit.SKAction, objc.objc_class)
23
18
 
24
19
  self.assertArgIsBOOL(
@@ -48,12 +43,12 @@ class TestSKAction(TestCase):
48
43
  )
49
44
 
50
45
  @expectedFailure
51
- def testMethods_dispatch(self):
46
+ def test_methods_dispatch(self):
52
47
  self.fail("SpriteKit.SKAction.runBlock_queue_")
53
48
  self.fail("SpriteKit.SKAction.runBlock_")
54
49
 
55
50
  @min_os_level("10.10")
56
- def testMethods10_10(self):
51
+ def test_methods10_10(self):
57
52
  self.assertArgIsBOOL(
58
53
  SpriteKit.SKAction.followPath_asOffset_orientToPath_speed_, 1
59
54
  )
@@ -5,11 +5,8 @@ from objc import simd
5
5
 
6
6
 
7
7
  class TestSKAttribute(TestCase):
8
- def test_enum_types(self):
8
+ def test_enums(self):
9
9
  self.assertIsEnumType(SpriteKit.SKAttributeType)
10
-
11
- @min_os_level("10.11")
12
- def testConstants(self):
13
10
  self.assertEqual(SpriteKit.SKAttributeTypeNone, 0)
14
11
  self.assertEqual(SpriteKit.SKAttributeTypeFloat, 1)
15
12
  self.assertEqual(SpriteKit.SKAttributeTypeVectorFloat2, 2)
@@ -5,6 +5,6 @@ import SpriteKit
5
5
 
6
6
  class TestSKConstraint(TestCase):
7
7
  @min_os_level("10.10")
8
- def testMethods(self):
8
+ def test_methods(self):
9
9
  self.assertArgIsBOOL(SpriteKit.SKConstraint.setEnabled_, 0)
10
10
  self.assertResultIsBOOL(SpriteKit.SKConstraint.enabled)
@@ -1,11 +1,10 @@
1
- from PyObjCTools.TestSupport import TestCase, min_os_level
1
+ from PyObjCTools.TestSupport import TestCase
2
2
 
3
3
  import SpriteKit
4
4
 
5
5
 
6
6
  class TestSKEffectNode(TestCase):
7
- @min_os_level("10.9")
8
- def testMethods(self):
7
+ def test_methods(self):
9
8
  self.assertArgIsBOOL(SpriteKit.SKEffectNode.setShouldCenterFilter_, 0)
10
9
  self.assertResultIsBOOL(SpriteKit.SKEffectNode.shouldCenterFilter)
11
10
  self.assertArgIsBOOL(SpriteKit.SKEffectNode.setShouldEnableEffects_, 0)
@@ -4,10 +4,8 @@ import SpriteKit
4
4
 
5
5
 
6
6
  class TestSKEmitterNode(TestCase):
7
- def test_enum_types(self):
7
+ def test_enums(self):
8
8
  self.assertIsEnumType(SpriteKit.SKParticleRenderOrder)
9
-
10
- def test_constants(self):
11
9
  self.assertEqual(SpriteKit.SKParticleRenderOrderOldestLast, 0)
12
10
  self.assertEqual(SpriteKit.SKParticleRenderOrderOldestFirst, 1)
13
11
  self.assertEqual(SpriteKit.SKParticleRenderOrderDontCare, 2)
@@ -6,7 +6,7 @@ from objc import simd
6
6
 
7
7
  class TestSKFieldNode(TestCase):
8
8
  @min_os_level("10.10")
9
- def testMethods(self):
9
+ def test_methods(self):
10
10
  self.assertArgIsBOOL(SpriteKit.SKFieldNode.setEnabled_, 0)
11
11
  self.assertResultIsBOOL(SpriteKit.SKFieldNode.isEnabled)
12
12
  self.assertArgIsBOOL(SpriteKit.SKFieldNode.setExclusive_, 0)
@@ -4,14 +4,12 @@ import SpriteKit
4
4
 
5
5
 
6
6
  class TestSKKeyframeSequence(TestCase):
7
- def test_enum_types(self):
7
+ def test_enums(self):
8
8
  self.assertIsEnumType(SpriteKit.SKInterpolationMode)
9
- self.assertIsEnumType(SpriteKit.SKRepeatMode)
10
-
11
- def testConstants(self):
12
9
  self.assertEqual(SpriteKit.SKInterpolationModeLinear, 1)
13
10
  self.assertEqual(SpriteKit.SKInterpolationModeSpline, 2)
14
11
  self.assertEqual(SpriteKit.SKInterpolationModeStep, 3)
15
12
 
13
+ self.assertIsEnumType(SpriteKit.SKRepeatMode)
16
14
  self.assertEqual(SpriteKit.SKRepeatModeClamp, 1)
17
15
  self.assertEqual(SpriteKit.SKRepeatModeLoop, 2)
@@ -1,20 +1,17 @@
1
- from PyObjCTools.TestSupport import TestCase, min_os_level
1
+ from PyObjCTools.TestSupport import TestCase
2
2
 
3
3
  import SpriteKit
4
4
 
5
5
 
6
6
  class TestSKKeyframeSequence(TestCase):
7
- def test_enum_types(self):
8
- self.assertIsEnumType(SpriteKit.SKLabelHorizontalAlignmentMode)
7
+ def test_enums(self):
9
8
  self.assertIsEnumType(SpriteKit.SKLabelVerticalAlignmentMode)
10
-
11
- @min_os_level("10.9")
12
- def testConstants(self):
13
9
  self.assertEqual(SpriteKit.SKLabelVerticalAlignmentModeBaseline, 0)
14
10
  self.assertEqual(SpriteKit.SKLabelVerticalAlignmentModeCenter, 1)
15
11
  self.assertEqual(SpriteKit.SKLabelVerticalAlignmentModeTop, 2)
16
12
  self.assertEqual(SpriteKit.SKLabelVerticalAlignmentModeBottom, 3)
17
13
 
14
+ self.assertIsEnumType(SpriteKit.SKLabelHorizontalAlignmentMode)
18
15
  self.assertEqual(SpriteKit.SKLabelHorizontalAlignmentModeCenter, 0)
19
16
  self.assertEqual(SpriteKit.SKLabelHorizontalAlignmentModeLeft, 1)
20
17
  self.assertEqual(SpriteKit.SKLabelHorizontalAlignmentModeRight, 2)
@@ -5,6 +5,6 @@ import SpriteKit
5
5
 
6
6
  class TestSKLightNode(TestCase):
7
7
  @min_os_level("10.10")
8
- def testMethods(self):
8
+ def test_methods(self):
9
9
  self.assertArgIsBOOL(SpriteKit.SKLightNode.setEnabled_, 0)
10
10
  self.assertResultIsBOOL(SpriteKit.SKLightNode.isEnabled)
@@ -6,7 +6,7 @@ import objc
6
6
 
7
7
  class TestSKMutableTexture(TestCase):
8
8
  @min_os_level("10.10")
9
- def testMethods(self):
9
+ def test_methods(self):
10
10
  self.assertArgIsBlock(
11
11
  SpriteKit.SKMutableTexture.modifyPixelDataWithBlock_,
12
12
  0,
@@ -5,12 +5,8 @@ import SpriteKit
5
5
 
6
6
 
7
7
  class TestSKNode(TestCase):
8
- def test_enum_types(self):
8
+ def test_enums(self):
9
9
  self.assertIsEnumType(SpriteKit.SKBlendMode)
10
- self.assertIsEnumType(SpriteKit.SKNodeFocusBehavior)
11
-
12
- @min_os_level("10.9")
13
- def testConstants(self):
14
10
  self.assertEqual(SpriteKit.SKBlendModeAlpha, 0)
15
11
  self.assertEqual(SpriteKit.SKBlendModeAdd, 1)
16
12
  self.assertEqual(SpriteKit.SKBlendModeSubtract, 2)
@@ -20,7 +16,7 @@ class TestSKNode(TestCase):
20
16
  self.assertEqual(SpriteKit.SKBlendModeReplace, 6)
21
17
 
22
18
  @min_os_level("10.9")
23
- def testMethods(self):
19
+ def test_methods(self):
24
20
  self.assertIsInstance(SpriteKit.SKNode, objc.objc_class)
25
21
 
26
22
  self.assertArgIsBOOL(SpriteKit.SKNode.setPaused_, 0)
@@ -40,7 +36,7 @@ class TestSKNode(TestCase):
40
36
  self.assertArgIsBlock(SpriteKit.SKNode.runAction_completion_, 1, b"v")
41
37
 
42
38
  @min_os_level("10.14")
43
- def testMethods10_14(self):
39
+ def test_methods10_14(self):
44
40
  self.assertArgIsOut(
45
41
  SpriteKit.SKNode.nodeWithFileNamed_securelyWithClasses_andError_, 2
46
42
  )