pyobjc-core 12.1__tar.gz → 12.2__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 (522) hide show
  1. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/PyObjCTools/TestSupport.py +360 -2
  2. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_bridges.py +11 -0
  3. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_bridgesupport.py +7 -20
  4. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_convenience.py +6 -2
  5. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_convenience_nsdata.py +30 -17
  6. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_new.py +1 -1
  7. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_transform.py +1 -42
  8. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/PKG-INFO +1 -1
  9. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/SOURCES.txt +5 -0
  10. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/include/pyobjc-compat.h +5 -2
  11. pyobjc_core-12.2/Lib/pyobjc_core.egg-info/pyobjc-build-info.txt +3 -0
  12. pyobjc_core-12.2/Modules/objc/OC_BuiltinPythonNumber.m +19 -0
  13. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonArray.m +28 -30
  14. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonData.m +10 -10
  15. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonDate.m +7 -7
  16. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonDictionary.m +57 -20
  17. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonEnumerator.m +2 -2
  18. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonNumber.m +54 -11
  19. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonObject.m +19 -18
  20. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonSet.m +8 -7
  21. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonURL.m +2 -2
  22. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonUnicode.m +11 -11
  23. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/ObjCPointer.m +12 -33
  24. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/block_support.h +2 -2
  25. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/block_support.m +31 -42
  26. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/bundle-variables.m +23 -23
  27. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/class-builder.m +62 -61
  28. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/class-list.m +9 -9
  29. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/corefoundation.m +58 -44
  30. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/ctests.m +114 -0
  31. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/file_wrapper.m +15 -17
  32. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/formal-protocol.m +28 -34
  33. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/fsref.m +8 -26
  34. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/function.m +32 -52
  35. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/helpers-authorization.m +15 -16
  36. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/helpers-foundation-nscoder.m +141 -136
  37. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/helpers-foundation-nsdata.m +19 -17
  38. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/helpers-foundation-nsdecimal.m +84 -87
  39. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/helpers-foundation-nsinvocation.m +44 -44
  40. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/helpers-foundation-nsobject.m +43 -36
  41. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/instance-var.m +18 -18
  42. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/ivar-accessor.m +15 -15
  43. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/libffi_support.h +1 -5
  44. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/libffi_support.m +839 -716
  45. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/memview.m +5 -27
  46. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/meth-func.m +41 -31
  47. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/method-accessor.m +38 -57
  48. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/method-imp.m +48 -64
  49. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/method-signature.m +800 -733
  50. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/module.m +115 -98
  51. pyobjc_core-12.2/Modules/objc/objc-NULL.m +54 -0
  52. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc-class.m +406 -420
  53. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc-object.m +149 -157
  54. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc_super.m +26 -34
  55. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc_support.h +1 -1
  56. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc_support.m +128 -283
  57. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc_util.h +1 -1
  58. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc_util.m +167 -149
  59. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/opaque-pointer.m +30 -29
  60. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/options.h +1 -0
  61. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/options.m +77 -73
  62. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/pointer-support.m +26 -24
  63. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/proxy-registry.h +2 -0
  64. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/proxy-registry.m +96 -9
  65. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/pyobjc-api.m +6 -5
  66. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/pyobjc-compat.h +5 -2
  67. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/pyobjc.h +1 -1
  68. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/pyobjc_unicode.m +32 -65
  69. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/python-api-used.h +8 -0
  70. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/registry.m +39 -24
  71. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/selector.h +1 -0
  72. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/selector.m +122 -125
  73. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/struct-sockaddr.m +14 -12
  74. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/struct-wrapper.h +0 -18
  75. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/struct-wrapper.m +177 -161
  76. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/super-call.m +59 -58
  77. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/block.m +51 -1
  78. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/block2.m +16 -0
  79. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/bufsizeinarg.m +40 -0
  80. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/coding.m +6 -0
  81. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/deprecations.m +35 -4
  82. pyobjc_core-12.2/Modules/objc/test/filepointer.m +160 -0
  83. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/genericnew.m +7 -0
  84. pyobjc_core-12.1/Modules/objc/test/filepointer.m → pyobjc_core-12.2/Modules/objc/test/keyvalue.m +32 -26
  85. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/metadata.m +1146 -19
  86. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/metadatafunction.m +1 -0
  87. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/objectint.m +38 -0
  88. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/specialtypecodes.m +15 -0
  89. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/testbndl.m +25 -1
  90. pyobjc_core-12.2/Modules/objc/test/transient.m +80 -0
  91. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/varlist.m +33 -44
  92. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/weakref.m +5 -13
  93. {pyobjc_core-12.1 → pyobjc_core-12.2}/PKG-INFO +1 -1
  94. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_archive_python.py +111 -1
  95. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_archiving_interop.py +15 -0
  96. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_archiving_secure_interop.py +30 -1
  97. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_array_interface.py +12 -0
  98. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_blocks.py +155 -1
  99. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_bridged_classes.py +7 -1
  100. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_bridges.py +4 -0
  101. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_bufsizeinarg.py +78 -3
  102. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_callbacks.py +58 -6
  103. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_convenience.py +15 -0
  104. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_conversion.py +101 -40
  105. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_corefoundation.py +1 -3
  106. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_data_proxy.py +40 -0
  107. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_deprecations.py +23 -0
  108. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_dict_proxy.py +63 -4
  109. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_filepointer.py +133 -7
  110. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_functions.py +157 -24
  111. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_generic_class.py +1 -3
  112. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_generic_new.py +10 -0
  113. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_hidden_selector.py +88 -35
  114. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_imp.py +60 -11
  115. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_internals.py +29 -14
  116. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_keyvalue.py +33 -0
  117. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_metadata.py +2048 -142
  118. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_metadata_function.py +15 -0
  119. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_metadata_imp.py +0 -3
  120. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_metadata_py.py +1807 -194
  121. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_methodedits.py +19 -0
  122. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_methods.py +5 -0
  123. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_nsdata.py +57 -0
  124. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_nsdecimal.py +9 -1
  125. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_nsobject.py +80 -0
  126. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_nsproxy.py +11 -0
  127. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_number_proxy.py +158 -61
  128. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_opaque.py +6 -1
  129. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_options.py +29 -2
  130. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_regr.py +203 -25
  131. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_set_interface.py +1 -1
  132. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_specialtypecodes_unichar.py +37 -0
  133. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_splitsig.py +13 -0
  134. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_structs.py +51 -4
  135. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_subclass.py +189 -1
  136. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_testsupport.py +181 -37
  137. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_transform.py +13 -21
  138. pyobjc_core-12.2/PyObjCTest/test_transient.py +79 -0
  139. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/free-threading/_tools.py +0 -1
  140. pyobjc_core-12.2/Tools/free-threading/concurrent-upcalls.py +24 -0
  141. pyobjc_core-12.2/Tools/free-threading/concurrent-upcalls2.py +43 -0
  142. {pyobjc_core-12.1 → pyobjc_core-12.2}/setup.py +32 -14
  143. pyobjc_core-12.1/Lib/pyobjc_core.egg-info/pyobjc-build-info.txt +0 -3
  144. pyobjc_core-12.1/Modules/objc/OC_BuiltinPythonNumber.m +0 -30
  145. pyobjc_core-12.1/Modules/objc/objc-NULL.m +0 -72
  146. {pyobjc_core-12.1 → pyobjc_core-12.2}/Examples/00ReadMe.txt +0 -0
  147. {pyobjc_core-12.1 → pyobjc_core-12.2}/Examples/GUITests/00ReadMe.txt +0 -0
  148. {pyobjc_core-12.1 → pyobjc_core-12.2}/Examples/GUITests/test_modalsession.py +0 -0
  149. {pyobjc_core-12.1 → pyobjc_core-12.2}/Examples/Scripts/HelloWorld.py +0 -0
  150. {pyobjc_core-12.1 → pyobjc_core-12.2}/Examples/Scripts/autoreadme.py +0 -0
  151. {pyobjc_core-12.1 → pyobjc_core-12.2}/Examples/Scripts/instrumentSends.py +0 -0
  152. {pyobjc_core-12.1 → pyobjc_core-12.2}/Examples/Scripts/kvo-debugging.py +0 -0
  153. {pyobjc_core-12.1 → pyobjc_core-12.2}/Examples/Scripts/signal-demo.py +0 -0
  154. {pyobjc_core-12.1 → pyobjc_core-12.2}/Examples/Scripts/stdinreader.py +0 -0
  155. {pyobjc_core-12.1 → pyobjc_core-12.2}/Examples/Scripts/subclassing-objective-c.py +0 -0
  156. {pyobjc_core-12.1 → pyobjc_core-12.2}/Examples/Scripts/wmEnable.py +0 -0
  157. {pyobjc_core-12.1 → pyobjc_core-12.2}/HISTORIC.txt +0 -0
  158. {pyobjc_core-12.1 → pyobjc_core-12.2}/Install.txt +0 -0
  159. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/PyObjCTools/KeyValueCoding.py +0 -0
  160. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/PyObjCTools/MachSignals.py +0 -0
  161. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/PyObjCTools/Signals.py +0 -0
  162. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/__init__.py +0 -0
  163. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_callable_docstr.py +0 -0
  164. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_category.py +0 -0
  165. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_compat.py +0 -0
  166. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_context.py +0 -0
  167. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_convenience_mapping.py +0 -0
  168. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_convenience_nsarray.py +0 -0
  169. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_convenience_nsdecimal.py +0 -0
  170. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_convenience_nsdictionary.py +0 -0
  171. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_convenience_nsobject.py +0 -0
  172. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_convenience_nsset.py +0 -0
  173. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_convenience_nsstring.py +0 -0
  174. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_convenience_sequence.py +0 -0
  175. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_descriptors.py +0 -0
  176. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_dyld.py +0 -0
  177. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_framework.py +0 -0
  178. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_informal_protocol.py +0 -0
  179. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_lazyimport.py +0 -0
  180. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_locking.py +0 -0
  181. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_properties.py +0 -0
  182. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_protocols.py +0 -0
  183. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_pycoder.py +0 -0
  184. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_pythonify.py +0 -0
  185. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_structtype.py +0 -0
  186. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/_types.py +0 -0
  187. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/objc/simd.py +0 -0
  188. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/dependency_links.txt +0 -0
  189. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/include/pyobjc-api.h +0 -0
  190. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/not-zip-safe +0 -0
  191. {pyobjc_core-12.1 → pyobjc_core-12.2}/Lib/pyobjc_core.egg-info/top_level.txt +0 -0
  192. {pyobjc_core-12.1 → pyobjc_core-12.2}/License.txt +0 -0
  193. {pyobjc_core-12.1 → pyobjc_core-12.2}/MANIFEST +0 -0
  194. {pyobjc_core-12.1 → pyobjc_core-12.2}/MANIFEST.in +0 -0
  195. {pyobjc_core-12.1 → pyobjc_core-12.2}/Misc/announcement.txt +0 -0
  196. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/_machsignals.m +0 -0
  197. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonArray.h +0 -0
  198. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonArray.m +0 -0
  199. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonData.h +0 -0
  200. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonData.m +0 -0
  201. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonDate.h +0 -0
  202. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonDate.m +0 -0
  203. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonDictionary.h +0 -0
  204. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonDictionary.m +0 -0
  205. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonNumber.h +0 -0
  206. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonSet.h +0 -0
  207. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonSet.m +0 -0
  208. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonUnicode.h +0 -0
  209. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_BuiltinPythonUnicode.m +0 -0
  210. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_NSBundleHack.h +0 -0
  211. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_NSBundleHack.m +0 -0
  212. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonArray.h +0 -0
  213. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonData.h +0 -0
  214. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonDate.h +0 -0
  215. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonDictionary.h +0 -0
  216. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonEnumerator.h +0 -0
  217. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonNumber.h +0 -0
  218. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonObject.h +0 -0
  219. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonSet.h +0 -0
  220. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonURL.h +0 -0
  221. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/OC_PythonUnicode.h +0 -0
  222. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/ObjCPointer.h +0 -0
  223. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/bundle-variables.h +0 -0
  224. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/class-builder.h +0 -0
  225. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/class-list.h +0 -0
  226. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/closure_pool.h +0 -0
  227. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/closure_pool.m +0 -0
  228. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/corefoundation.h +0 -0
  229. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/ctests.h +0 -0
  230. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/file_wrapper.h +0 -0
  231. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/formal-protocol.h +0 -0
  232. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/fsref.h +0 -0
  233. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/function.h +0 -0
  234. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/helpers-vector.m +0 -0
  235. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/helpers.h +0 -0
  236. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/instance-var.h +0 -0
  237. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/ivar-accessor.h +0 -0
  238. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/libffi_extra.h +0 -0
  239. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/libffi_extra.m +0 -0
  240. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/memview.h +0 -0
  241. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/meth-func.h +0 -0
  242. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/method-accessor.h +0 -0
  243. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/method-imp.h +0 -0
  244. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/method-signature.h +0 -0
  245. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc-NULL.h +0 -0
  246. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc-class.h +0 -0
  247. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc-object.h +0 -0
  248. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc-runtime-compat.h +0 -0
  249. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc-runtime-compat.m +0 -0
  250. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/objc_super.h +0 -0
  251. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/opaque-pointer.h +0 -0
  252. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/pointer-support.h +0 -0
  253. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/pyobjc-api.h +0 -0
  254. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/pyobjc-compat.m +0 -0
  255. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/pyobjc-unittest.h +0 -0
  256. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/pyobjc_unicode.h +0 -0
  257. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/registry.h +0 -0
  258. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/released-buffer.h +0 -0
  259. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/released-buffer.m +0 -0
  260. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/struct-sockaddr.h +0 -0
  261. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/super-call.h +0 -0
  262. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/NULL.m +0 -0
  263. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/arrayint.m +0 -0
  264. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/arrays.m +0 -0
  265. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/authorizationitem.m +0 -0
  266. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/categories_base.m +0 -0
  267. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c42.m +0 -0
  268. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c43.m +0 -0
  269. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c44.m +0 -0
  270. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c45.m +0 -0
  271. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c46.m +0 -0
  272. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c47.m +0 -0
  273. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c48.m +0 -0
  274. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c49.m +0 -0
  275. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c50.m +0 -0
  276. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c51.m +0 -0
  277. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c52.m +0 -0
  278. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c53.m +0 -0
  279. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c54.m +0 -0
  280. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c55.m +0 -0
  281. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c56.m +0 -0
  282. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c57.m +0 -0
  283. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c58.m +0 -0
  284. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_c59.m +0 -0
  285. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp10.m +0 -0
  286. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp11.m +0 -0
  287. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp12.m +0 -0
  288. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp13.m +0 -0
  289. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp14.m +0 -0
  290. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp15.m +0 -0
  291. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp16.m +0 -0
  292. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp17.m +0 -0
  293. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp18.m +0 -0
  294. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp19.m +0 -0
  295. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp20.m +0 -0
  296. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp21.m +0 -0
  297. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp22.m +0 -0
  298. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp23.m +0 -0
  299. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp24.m +0 -0
  300. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp27.m +0 -0
  301. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp3.m +0 -0
  302. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp30.m +0 -0
  303. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp33.m +0 -0
  304. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp36.m +0 -0
  305. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp39.m +0 -0
  306. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp42.m +0 -0
  307. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp45.m +0 -0
  308. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp48.m +0 -0
  309. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp51.m +0 -0
  310. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp54.m +0 -0
  311. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp57.m +0 -0
  312. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp6.m +0 -0
  313. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp7.m +0 -0
  314. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp8.m +0 -0
  315. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_gp9.m +0 -0
  316. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p24.m +0 -0
  317. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p25.m +0 -0
  318. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p26.m +0 -0
  319. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p27.m +0 -0
  320. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p28.m +0 -0
  321. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p29.m +0 -0
  322. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p30.m +0 -0
  323. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p31.m +0 -0
  324. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p32.m +0 -0
  325. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p33.m +0 -0
  326. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p34.m +0 -0
  327. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p35.m +0 -0
  328. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p36.m +0 -0
  329. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p37.m +0 -0
  330. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p38.m +0 -0
  331. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p39.m +0 -0
  332. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p40.m +0 -0
  333. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/category_p41.m +0 -0
  334. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/cfsocket.m +0 -0
  335. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/classes.m +0 -0
  336. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/clinmeth.m +0 -0
  337. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/copying.m +0 -0
  338. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/corefoundation.m +0 -0
  339. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/customcallers.m +0 -0
  340. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/dataint.m +0 -0
  341. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/dateint.m +0 -0
  342. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/decimal.m +0 -0
  343. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/dictint.m +0 -0
  344. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/enumeration.m +0 -0
  345. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/exceptions.m +0 -0
  346. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/fsref.m +0 -0
  347. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/gcov.m +0 -0
  348. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/helpernsdata.m +0 -0
  349. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/helpernsobject.m +0 -0
  350. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/identity.m +0 -0
  351. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/initialize.m +0 -0
  352. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/initpatterns.m +0 -0
  353. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/instanceVariables.m +0 -0
  354. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/locking.m +0 -0
  355. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/metadataorder.m +0 -0
  356. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/methodaccess.m +0 -0
  357. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/methodlookup.m +0 -0
  358. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/methres1.m +0 -0
  359. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/methres2.m +0 -0
  360. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/misc.m +0 -0
  361. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/missing1.m +0 -0
  362. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/missing2.m +0 -0
  363. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/missing3.m +0 -0
  364. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/nsobjectcategory.m +0 -0
  365. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/nulldelimitedresult.m +0 -0
  366. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/opaque.m +0 -0
  367. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/pointersupport.m +0 -0
  368. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/properties.m +0 -0
  369. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/protected.m +0 -0
  370. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/protocol.m +0 -0
  371. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/pythonnumber.m +0 -0
  372. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/pythonset.m +0 -0
  373. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/sequence.m +0 -0
  374. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/sockaddr.m +0 -0
  375. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/stringint.m +0 -0
  376. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/structargs.m +0 -0
  377. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/structpointer1.m +0 -0
  378. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/structpointer2.m +0 -0
  379. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/structs.m +0 -0
  380. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/supercall.m +0 -0
  381. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/testbndl2.m +0 -0
  382. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/testclassandinst.m +0 -0
  383. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/testoutputinitializer.m +0 -0
  384. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/unavailable.m +0 -0
  385. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/vector.m +0 -0
  386. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/vectorcall.m +0 -0
  387. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/test/voidpointer.m +0 -0
  388. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/varlist.h +0 -0
  389. {pyobjc_core-12.1 → pyobjc_core-12.2}/Modules/objc/weakref.h +0 -0
  390. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/__init__.py +0 -0
  391. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/archives/py2-oc2.3.keyed +0 -0
  392. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/archives/py2-oc2.3.plain +0 -0
  393. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/archives/py3-oc3.0.keyed +0 -0
  394. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/archives/py3-oc3.0.plain +0 -0
  395. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/data_bridgesupport/bundle_data/Test.bridgesupport +0 -0
  396. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/data_bridgesupport/with_data/Test.bridgesupport +0 -0
  397. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/data_bridgesupport/with_data_dylib/Test.bridgesupport +0 -0
  398. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/data_bridgesupport/with_data_dylib/Test.dylib +0 -0
  399. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/dump-nsarchive-securecoding.m +0 -0
  400. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/dump-nsarchive.m +0 -0
  401. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/fnd.py +0 -0
  402. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/helper_bridgesupport.py +0 -0
  403. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/keyvaluehelper.py +0 -0
  404. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/loader.py +0 -0
  405. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_NULL.py +0 -0
  406. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_allocatebuffer.py +0 -0
  407. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_api_import.py +0 -0
  408. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_array_property.py +0 -0
  409. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_arrays.py +0 -0
  410. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_assocations.py +0 -0
  411. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_authorizationitem.py +0 -0
  412. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_bridgesupport.py +0 -0
  413. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_bundleFunctions.py +0 -0
  414. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_bundleVariables.py +0 -0
  415. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_callable_docstr.py +0 -0
  416. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_categories.py +0 -0
  417. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_classandinst.py +0 -0
  418. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_classhooks.py +0 -0
  419. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_clinmeth.py +0 -0
  420. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_compat.py +0 -0
  421. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_context.py +0 -0
  422. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_copying.py +0 -0
  423. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_ctests.py +0 -0
  424. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_customcallers.py +0 -0
  425. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_date_proxy.py +0 -0
  426. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_default_selector.py +0 -0
  427. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_descriptors.py +0 -0
  428. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_dict_interface.py +0 -0
  429. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_dict_property.py +0 -0
  430. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_dyld.py +0 -0
  431. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_enumerator.py +0 -0
  432. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_exceptions.py +0 -0
  433. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_final.py +0 -0
  434. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_framework.py +0 -0
  435. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_free_threading.py +0 -0
  436. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_fsref.py +0 -0
  437. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_identity.py +0 -0
  438. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_initpatterns.py +0 -0
  439. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_inspect_signatures.py +0 -0
  440. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_ivar.py +0 -0
  441. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_keyvalue_prop.py +0 -0
  442. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_keyvaluecoding.py +0 -0
  443. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_lazy_import.py +0 -0
  444. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_leaks.py +0 -0
  445. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_list_proxy.py +0 -0
  446. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_locking.py +0 -0
  447. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_machsignals.py +0 -0
  448. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_metadata_inheritance.py +0 -0
  449. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_metadata_py2py.py +0 -0
  450. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_metadataorder.py +0 -0
  451. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_method_prototypes.py +0 -0
  452. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_methodaccess.py +0 -0
  453. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_methodlookup.py +0 -0
  454. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_methods2.py +0 -0
  455. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_methres.py +0 -0
  456. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_nscoder.py +0 -0
  457. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_nsdate_proxy.py +0 -0
  458. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_nsinvocation.py +0 -0
  459. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_nsunavailable.py +0 -0
  460. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_nulldelimited.py +0 -0
  461. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_objc.py +0 -0
  462. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_objcpointer.py +0 -0
  463. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_object_property.py +0 -0
  464. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_object_proxy.py +0 -0
  465. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_outputinitializer.py +0 -0
  466. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_pickle.py +0 -0
  467. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_pickling_objc.py +0 -0
  468. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_pointer_compat.py +0 -0
  469. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_propertiesforclass.py +0 -0
  470. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_protected.py +0 -0
  471. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_protocol.py +0 -0
  472. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_protocolNamed.py +0 -0
  473. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_python_method.py +0 -0
  474. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_set_property.py +0 -0
  475. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_set_proxy.py +0 -0
  476. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_signals.py +0 -0
  477. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_signatures.py +0 -0
  478. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_simd.py +0 -0
  479. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_sockaddr.py +0 -0
  480. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_specialtypecodes_charbyte.py +0 -0
  481. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_specialtypecodes_charint.py +0 -0
  482. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_specialtypecodes_methdef.py +0 -0
  483. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_specialtypecodes_nsbool.py +0 -0
  484. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_specialtypecodes_struct.py +0 -0
  485. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_string_proxy.py +0 -0
  486. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_structpointer.py +0 -0
  487. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_super_on_regular_classes.py +0 -0
  488. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_synthesize.py +0 -0
  489. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_transform_integration.py +0 -0
  490. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_typecheck.py +0 -0
  491. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_unicode.py +0 -0
  492. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_urlproxy.py +0 -0
  493. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_usekvo.py +0 -0
  494. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_varargs.py +0 -0
  495. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_varlist.py +0 -0
  496. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_vector_proxy.py +0 -0
  497. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_vectorcall.py +0 -0
  498. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_version_support.py +0 -0
  499. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_voidpointer.py +0 -0
  500. {pyobjc_core-12.1 → pyobjc_core-12.2}/PyObjCTest/test_weakref.py +0 -0
  501. {pyobjc_core-12.1 → pyobjc_core-12.2}/README.txt +0 -0
  502. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/MANIFEST.in +0 -0
  503. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/comparebench.py +0 -0
  504. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/free-threading/concurrent-class-list.py +0 -0
  505. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/free-threading/concurrent-dict-getting.py +0 -0
  506. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/free-threading/concurrent-iteration.py +0 -0
  507. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/free-threading/concurrent-methinfo.py +0 -0
  508. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/free-threading/concurrent-registration.py +0 -0
  509. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/free-threading/concurrent-value-getting.py +0 -0
  510. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/gen_archive.py +0 -0
  511. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/generate-category-tests.py +0 -0
  512. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/generate-helpers-vector.py +0 -0
  513. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/pyobjc_setup.py +0 -0
  514. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/pyobjcbench.py +0 -0
  515. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/results/pyobjcbench-7.3.txt +0 -0
  516. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/results/pyobjcbench-8.0b1.txt +0 -0
  517. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/results/pyobjcbench-8.0b2.txt +0 -0
  518. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/run-free-threading-tests.py +0 -0
  519. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/runtests-with-nuitka.py +0 -0
  520. {pyobjc_core-12.1 → pyobjc_core-12.2}/Tools/runtests.py +0 -0
  521. {pyobjc_core-12.1 → pyobjc_core-12.2}/pyproject.toml +0 -0
  522. {pyobjc_core-12.1 → pyobjc_core-12.2}/setup.cfg +0 -0
@@ -497,6 +497,21 @@ class TestCase(_unittest.TestCase):
497
497
  or "argument %d of %r is not a null-terminated array" % (argno, method)
498
498
  )
499
499
 
500
+ def assertArgIsNotNullTerminated(self, method, argno, message=None):
501
+ if isinstance(method, objc.selector):
502
+ offset = 2
503
+ else:
504
+ offset = 0
505
+ info = method.__metadata__()
506
+ try:
507
+ if info["arguments"][argno + offset].get("c_array_delimited_by_null"):
508
+ self.fail(
509
+ message
510
+ or "argument %d of %r is a null-terminated array" % (argno, method)
511
+ )
512
+ except (KeyError, IndexError):
513
+ pass
514
+
500
515
  def assertArgIsVariableSize(self, method, argno, message=None):
501
516
  if isinstance(method, objc.selector):
502
517
  offset = 2
@@ -540,6 +555,21 @@ class TestCase(_unittest.TestCase):
540
555
  or "argument %d of %r does not have size in result" % (argno, method)
541
556
  )
542
557
 
558
+ def assertArgSizeNotInResult(self, method, argno, message=None):
559
+ if isinstance(method, objc.selector):
560
+ offset = 2
561
+ else:
562
+ offset = 0
563
+ info = method.__metadata__()
564
+ try:
565
+ if info["arguments"][argno + offset].get("c_array_length_in_result"):
566
+ self.fail(
567
+ message
568
+ or "argument %d of %r does have size in result" % (argno, method)
569
+ )
570
+ except (KeyError, IndexError):
571
+ pass
572
+
543
573
  def assertArgIsPrintf(self, method, argno, message=None):
544
574
  if isinstance(method, objc.selector):
545
575
  offset = 2
@@ -561,6 +591,24 @@ class TestCase(_unittest.TestCase):
561
591
  or "%r argument %d is not a printf format string" % (method, argno)
562
592
  )
563
593
 
594
+ def assertArgIsNotPrintf(self, method, argno, message=None):
595
+ if isinstance(method, objc.selector):
596
+ offset = 2
597
+ else:
598
+ offset = 0
599
+ info = method.__metadata__()
600
+ if not info.get("variadic"):
601
+ self.fail(message or f"{method!r} is not a variadic function")
602
+
603
+ try:
604
+ if info["arguments"][argno + offset].get("printf_format"):
605
+ self.fail(
606
+ message
607
+ or "%r argument %d is a printf format string" % (method, argno)
608
+ )
609
+ except (KeyError, IndexError):
610
+ pass
611
+
564
612
  def assertArgIsCFRetained(self, method, argno, message=None):
565
613
  if isinstance(method, objc.selector):
566
614
  offset = 2
@@ -1300,9 +1348,14 @@ class TestCase(_unittest.TestCase):
1300
1348
 
1301
1349
  if exclude_cocoa:
1302
1350
  try:
1303
- import Cocoa
1351
+ if "AppKit" in _sys.modules:
1352
+ import AppKit
1353
+
1354
+ exclude_names = set(dir(AppKit))
1355
+ else:
1356
+ import Foundation
1304
1357
 
1305
- exclude_names = set(dir(Cocoa))
1358
+ exclude_names = set(dir(Foundation))
1306
1359
 
1307
1360
  # Don't exclude NSObject' because a number
1308
1361
  # of frameworks define categories on this class.
@@ -1381,6 +1434,305 @@ class TestCase(_unittest.TestCase):
1381
1434
  exclude_attrs.add("AudioObjectPropertiesChanged")
1382
1435
  exclude_attrs.add("AudioObjectsPublishedAndDied")
1383
1436
 
1437
+ # Private classes in various frameworks
1438
+ exclude_attrs.add("ACTrackedXPCConnection")
1439
+ exclude_attrs.add("ACZeroingString")
1440
+ exclude_attrs.add("AFBArray")
1441
+ exclude_attrs.add("AFBBufferBuilder")
1442
+ exclude_attrs.add("AFBDictionary")
1443
+ exclude_attrs.add("AFConversationError")
1444
+ exclude_attrs.add("AFInstanceContext")
1445
+ exclude_attrs.add("AFInstanceContextHost")
1446
+ exclude_attrs.add("AFKBufferMemoryDescriptor")
1447
+ exclude_attrs.add("AFKEndpointInterface")
1448
+ exclude_attrs.add("AFKMemoryDescriptor")
1449
+ exclude_attrs.add("AFMyriadAccessoryMetricMessage")
1450
+ exclude_attrs.add("AFPreferences")
1451
+ exclude_attrs.add("AFSUPFunctionProvider")
1452
+ exclude_attrs.add("AFSpeakableUtteranceParser")
1453
+ exclude_attrs.add("AKAppleIDSession")
1454
+ exclude_attrs.add("AWDLTrafficRegistrationConfiguration")
1455
+ exclude_attrs.add("AXLogColorizer")
1456
+ exclude_attrs.add("AXValidationManager")
1457
+ exclude_attrs.add("BroadcomHostController")
1458
+ exclude_attrs.add("CBDevice")
1459
+ exclude_attrs.add("CKAssetDownloadStagingManager")
1460
+ exclude_attrs.add("CKBehaviorOptions")
1461
+ exclude_attrs.add("CKInternalError")
1462
+ exclude_attrs.add("CKObjCType")
1463
+ exclude_attrs.add("CKPrettyError")
1464
+ exclude_attrs.add("CKSQLiteCompiledStatementDecoder")
1465
+ exclude_attrs.add("CKSQLiteDatabaseKeyedArchiver")
1466
+ exclude_attrs.add("CKSQLiteDatabaseKeyedUnarchiver")
1467
+ exclude_attrs.add("CKSQLiteTOCImageInfoEntry")
1468
+ exclude_attrs.add("CKSyncEngineState")
1469
+ exclude_attrs.add("CKUserDefaults")
1470
+ exclude_attrs.add("CLAssertion")
1471
+ exclude_attrs.add("CLBBTimeFreqTransferCallbackAssertion")
1472
+ exclude_attrs.add("CLEEDMitigation")
1473
+ exclude_attrs.add("CLEmergencyClientEnablementAssertion")
1474
+ exclude_attrs.add("CLEmergencyEnablementAssertion")
1475
+ exclude_attrs.add("CLFindMyAccessoryManager")
1476
+ exclude_attrs.add("CLGNSSStateQueryAssertionResponse")
1477
+ exclude_attrs.add("CLGnssDisablementAssertion")
1478
+ exclude_attrs.add("CLGnssExtensionsClient")
1479
+ exclude_attrs.add("CLIntersiloProxy")
1480
+ exclude_attrs.add("CLIntersiloProxyToInitiator")
1481
+ exclude_attrs.add("CLIntersiloProxyToRecipient")
1482
+ exclude_attrs.add("CLLocationInternalClient")
1483
+ exclude_attrs.add("CLLocationManagerStateTracker")
1484
+ exclude_attrs.add("CLLocationUpdater")
1485
+ exclude_attrs.add("CLOSTransaction")
1486
+ exclude_attrs.add("CLStateTracker")
1487
+ exclude_attrs.add("CRBiDiTransform")
1488
+ exclude_attrs.add("CRImage")
1489
+ exclude_attrs.add("CRImage_PixelBuffer")
1490
+ exclude_attrs.add("CSUError")
1491
+ exclude_attrs.add("CUDashboardClient")
1492
+ exclude_attrs.add("CUICommonAssetStorage")
1493
+ exclude_attrs.add("CUIMaskedFacetLayer")
1494
+ exclude_attrs.add("CUIMutableCommonAssetStorage")
1495
+ exclude_attrs.add("CUIMutablePSDImageRef")
1496
+ exclude_attrs.add("CUIMutableStructuredThemeStore")
1497
+ exclude_attrs.add("CUIPSDImageRef")
1498
+ exclude_attrs.add("CUIPSDLayerRef")
1499
+ exclude_attrs.add("CUIPlaceholderCUICommonAssetStorage")
1500
+ exclude_attrs.add("CUIPlaceholderCUIMutableCommonAssetStorage")
1501
+ exclude_attrs.add("CUISingleNamedAssetMutableStorage")
1502
+ exclude_attrs.add("CUIStructuredThemeStore")
1503
+ exclude_attrs.add("CUISystemStore")
1504
+ exclude_attrs.add("CUNANEndpoint")
1505
+ exclude_attrs.add("CUReadRequest")
1506
+ exclude_attrs.add("CUSPAKECommon")
1507
+ exclude_attrs.add("CUSPAKEProver")
1508
+ exclude_attrs.add("CUSPAKEVerifier")
1509
+ exclude_attrs.add("CUWriteRequest")
1510
+ exclude_attrs.add("CWFNetworkProfile")
1511
+ exclude_attrs.add("CoreUtilsNSSubrangeData")
1512
+ exclude_attrs.add("DDScannerResult")
1513
+ exclude_attrs.add("DMAPFS")
1514
+ exclude_attrs.add("DMCoreStorage")
1515
+ exclude_attrs.add("DMFilesystem")
1516
+ exclude_attrs.add("DMManager")
1517
+ exclude_attrs.add("EFILWLogging")
1518
+ exclude_attrs.add("FLSQLitePersistence")
1519
+ exclude_attrs.add("FPAppLibraryCollection")
1520
+ exclude_attrs.add("FPCTLTermDumper")
1521
+ exclude_attrs.add("FPError")
1522
+ exclude_attrs.add("FPExtensionCollection")
1523
+ exclude_attrs.add("FPFlattenedPackageSandboxingURLWrapper")
1524
+ exclude_attrs.add("FPItemCollection")
1525
+ exclude_attrs.add("FPQueryCollection")
1526
+ exclude_attrs.add("FPSandboxingURLWrapper")
1527
+ exclude_attrs.add("FPSearchCollection")
1528
+ exclude_attrs.add("FPSearchTrashCollection")
1529
+ exclude_attrs.add("FPTask")
1530
+ exclude_attrs.add("FPTrashUnionCollection")
1531
+ exclude_attrs.add("FPUnarchiveOperation")
1532
+ exclude_attrs.add("FPUnionCollection")
1533
+ exclude_attrs.add("FaceCoreImage")
1534
+ exclude_attrs.add("GEOActiveTileGroup")
1535
+ exclude_attrs.add("GEOBrandInfoMapping")
1536
+ exclude_attrs.add("GEODaemon")
1537
+ exclude_attrs.add("GEOFeature")
1538
+ exclude_attrs.add("GEOMapItemURLExtras")
1539
+ exclude_attrs.add("GEOPDTransitIncident")
1540
+ exclude_attrs.add("GEOPerformanceEventLogger")
1541
+ exclude_attrs.add("GEOPurgableFile")
1542
+ exclude_attrs.add("GEORegionalResourceTileDecoder")
1543
+ exclude_attrs.add("GEOSQLiteDB")
1544
+ exclude_attrs.add("GEOTileEditionUpdate")
1545
+ exclude_attrs.add("GEOVectorTile")
1546
+ exclude_attrs.add("GEOVectorTileDecoder")
1547
+ exclude_attrs.add("HardcopyCableReplacement")
1548
+ exclude_attrs.add("ICREnvironment")
1549
+ exclude_attrs.add("IDSDatagramChannel")
1550
+ exclude_attrs.add("IDSDependencyProvider")
1551
+ exclude_attrs.add("IDSDirectMessageConnection")
1552
+ exclude_attrs.add("IDSGlobalLinkMessage")
1553
+ exclude_attrs.add("IDSInterfaceAddress")
1554
+ exclude_attrs.add("IDSInternalQueueController")
1555
+ exclude_attrs.add("IDSNWPathUtils")
1556
+ exclude_attrs.add("IDSRateLimiter")
1557
+ exclude_attrs.add("IDSStunMessage")
1558
+ exclude_attrs.add("IDSStunRelayInterfaceInfoController")
1559
+ exclude_attrs.add("IDSTCPLink")
1560
+ exclude_attrs.add("IMFileManager")
1561
+ exclude_attrs.add("INDeferredLocalizedString")
1562
+ exclude_attrs.add("IOBluetoothHardcopyCableReplacement")
1563
+ exclude_attrs.add("IOBluetoothHeadsetAudioGateway")
1564
+ exclude_attrs.add("IOBluetoothLocalSDPServiceRecord")
1565
+ exclude_attrs.add("IOBluetoothOBEXSession")
1566
+ exclude_attrs.add("IOBluetoothSDPDataElement")
1567
+ exclude_attrs.add("IOBluetoothSDPServiceRecord")
1568
+ exclude_attrs.add("IOBluetoothSDPUUID")
1569
+ exclude_attrs.add("IOBluetoothSerialPortManager")
1570
+ exclude_attrs.add("ISCompositor")
1571
+ exclude_attrs.add("ISIcns")
1572
+ exclude_attrs.add("ISMutableIcns")
1573
+ exclude_attrs.add("KCAESGCMDuplexSession")
1574
+ exclude_attrs.add("KCPairingChannel")
1575
+ exclude_attrs.add("KCSRPClientContext")
1576
+ exclude_attrs.add("KCSRPContext")
1577
+ exclude_attrs.add("KCSRPServerContext")
1578
+ exclude_attrs.add("LACACMHelper")
1579
+ exclude_attrs.add("LACBiometryHelper")
1580
+ exclude_attrs.add("LACDeviceTreeReader")
1581
+ exclude_attrs.add("LACLocalizationUtils")
1582
+ exclude_attrs.add("LAErrorHelper")
1583
+ exclude_attrs.add("MLE5InputPort")
1584
+ exclude_attrs.add("MLE5InputPortBinder")
1585
+ exclude_attrs.add("MLE5OutputPort")
1586
+ exclude_attrs.add("MLE5OutputPortBinder")
1587
+ exclude_attrs.add("MLItemSimilarityRecommender")
1588
+ exclude_attrs.add("MLLoaderEvent")
1589
+ exclude_attrs.add("MLModelAsset")
1590
+ exclude_attrs.add("MLMultiArrayAsNSArrayWrapper")
1591
+ exclude_attrs.add("MLNeuralNetworkEngine")
1592
+ exclude_attrs.add("MLNeuralNetworkMLComputeUpdateEngine")
1593
+ exclude_attrs.add("MLNeuralNetworkUpdateEngine")
1594
+ exclude_attrs.add("MLNeuralNetworkV1Engine")
1595
+ exclude_attrs.add("MLProbabilityDictionary")
1596
+ exclude_attrs.add("MLProgramEngine")
1597
+ exclude_attrs.add("MLSequnceAsFeatureValueArray")
1598
+ exclude_attrs.add("MLTreeEnsembleClassifier")
1599
+ exclude_attrs.add("MLTreeEnsembleRegressor")
1600
+ exclude_attrs.add("MSVDefaultDictionary")
1601
+ exclude_attrs.add("MSVOPACKDecoder")
1602
+ exclude_attrs.add("MSVOPACKEncoder")
1603
+ exclude_attrs.add("MSVSegmentedDecoder")
1604
+ exclude_attrs.add("MSVSegmentedEncoder")
1605
+ exclude_attrs.add("MSVXPCConnection")
1606
+ exclude_attrs.add("NSAttributeDictionary")
1607
+ exclude_attrs.add("NSCTFont")
1608
+ exclude_attrs.add("NSCoreTypesetter")
1609
+ exclude_attrs.add("NSDocFormatReader")
1610
+ exclude_attrs.add("NSSingleLineTypesetter")
1611
+ exclude_attrs.add("NSTempAttributeDictionary")
1612
+ exclude_attrs.add("OBEXFilePut")
1613
+ exclude_attrs.add("OBEXSession")
1614
+ exclude_attrs.add("OTInheritanceKey")
1615
+ exclude_attrs.add("PCLog")
1616
+ exclude_attrs.add("SASampleStore")
1617
+ exclude_attrs.add("SATask")
1618
+ exclude_attrs.add("SCDAAccessoryMetricMessage")
1619
+ exclude_attrs.add("SFBLEScanner")
1620
+ exclude_attrs.add("SFCollaborationUtilities")
1621
+ exclude_attrs.add("SFFeatureFlagAdaptor")
1622
+ exclude_attrs.add("SFService")
1623
+ exclude_attrs.add("SFServiceSession")
1624
+ exclude_attrs.add("SFSession")
1625
+ exclude_attrs.add("SSInflightCAMetalLayerIntervalStats")
1626
+ exclude_attrs.add("SignpostIntervalBuilder")
1627
+ exclude_attrs.add("SiriAnalyticsError")
1628
+ exclude_attrs.add("TIHardwareKeyboardLayout")
1629
+ exclude_attrs.add("TIKeyboardCandidateResultSetCoder")
1630
+ exclude_attrs.add("TIKeyboardLayout")
1631
+ exclude_attrs.add("TIKeyedArchiver")
1632
+ exclude_attrs.add("TIKeyedUnarchiver")
1633
+ exclude_attrs.add("TKBERTLVRecord")
1634
+ exclude_attrs.add("TKDataSource")
1635
+ exclude_attrs.add("TKSmartCardATRInterfaceGroup")
1636
+ exclude_attrs.add("TKSmartCardWithError")
1637
+ exclude_attrs.add("TKTokenID")
1638
+ exclude_attrs.add("TRICCommandRunner")
1639
+ exclude_attrs.add("TRICEnvironmentManager")
1640
+ exclude_attrs.add("TRIFBCloudKitTreatmentRecordAsset")
1641
+ exclude_attrs.add("TRIFBFactorLevel")
1642
+ exclude_attrs.add("TRIFBFactorMetadataKeyValue")
1643
+ exclude_attrs.add("TRIFBFastFactorLevels")
1644
+ exclude_attrs.add("TRIFBMobileAssetReference")
1645
+ exclude_attrs.add("TRIFBTrialManagedAsset")
1646
+ exclude_attrs.add("TRILevel")
1647
+ exclude_attrs.add("TRINamespaceResolver")
1648
+ exclude_attrs.add("TRIPBAutocreatedArray")
1649
+ exclude_attrs.add("TRIPBAutocreatedDictionary")
1650
+ exclude_attrs.add("TRIPBBoolArray")
1651
+ exclude_attrs.add("TRIPBBoolBoolDictionary")
1652
+ exclude_attrs.add("TRIPBBoolDoubleDictionary")
1653
+ exclude_attrs.add("TRIPBBoolEnumDictionary")
1654
+ exclude_attrs.add("TRIPBBoolFloatDictionary")
1655
+ exclude_attrs.add("TRIPBBoolInt32Dictionary")
1656
+ exclude_attrs.add("TRIPBBoolInt64Dictionary")
1657
+ exclude_attrs.add("TRIPBBoolObjectDictionary")
1658
+ exclude_attrs.add("TRIPBBoolUInt32Dictionary")
1659
+ exclude_attrs.add("TRIPBBoolUInt64Dictionary")
1660
+ exclude_attrs.add("TRIPBDescriptor")
1661
+ exclude_attrs.add("TRIPBEnumDescriptor")
1662
+ exclude_attrs.add("TRIPBExtensionDescriptor")
1663
+ exclude_attrs.add("TRIPBInt32BoolDictionary")
1664
+ exclude_attrs.add("TRIPBInt64BoolDictionary")
1665
+ exclude_attrs.add("TRIPBOneofDescriptor")
1666
+ exclude_attrs.add("TRIPBStringBoolDictionary")
1667
+ exclude_attrs.add("TRIPBUInt32BoolDictionary")
1668
+ exclude_attrs.add("TRIPBUInt64BoolDictionary")
1669
+ exclude_attrs.add("TSPSaveMeasurements")
1670
+ exclude_attrs.add("TTSRegex")
1671
+ exclude_attrs.add("TTSUnicodeUtils")
1672
+ exclude_attrs.add("UAFAssetExpansion")
1673
+ exclude_attrs.add("UAFAssetSetManager")
1674
+ exclude_attrs.add("UAFAutoAssetManager")
1675
+ exclude_attrs.add("UAFAutoAssetSet")
1676
+ exclude_attrs.add("UAFCommonUtilities")
1677
+ exclude_attrs.add("UAFSubscriptionStoreManager")
1678
+ exclude_attrs.add("UIFont")
1679
+ exclude_attrs.add("UINibDecoder")
1680
+ exclude_attrs.add("UINibEncoder")
1681
+ exclude_attrs.add("UNLocalizedString")
1682
+ exclude_attrs.add("UNSecurityScopedURL")
1683
+ exclude_attrs.add("UserRegistryDB")
1684
+ exclude_attrs.add("VNCCCharBoxContext")
1685
+ exclude_attrs.add("VNCCTextDetector")
1686
+ exclude_attrs.add("VNDisallowedList")
1687
+ exclude_attrs.add("VNEspressoModelClassifier")
1688
+ exclude_attrs.add("VNFingerprintHash")
1689
+ exclude_attrs.add("VNPersonSegmentationGeneratorFast")
1690
+ exclude_attrs.add("VNPersonSegmentationGeneratorInstanceBased4People")
1691
+ exclude_attrs.add("VNPersonSegmentationGeneratorLearnedMatting")
1692
+ exclude_attrs.add("VNPersonSegmentationGeneratorLearnedMattingTiled")
1693
+ exclude_attrs.add("VNPersonSegmentationGeneratorSemantics")
1694
+ exclude_attrs.add("VNSegmentationGenerator")
1695
+ exclude_attrs.add("VNSmartCamClassifier")
1696
+ exclude_attrs.add("VNValidationUtilities")
1697
+ exclude_attrs.add("VisionCoreMetalContext")
1698
+ exclude_attrs.add("WiFiAwareDiscoveryResult")
1699
+ exclude_attrs.add("WiFiP2PXPCConnection")
1700
+ exclude_attrs.add("geo_isolater")
1701
+ exclude_attrs.add("geo_reentrant_isolater")
1702
+ exclude_attrs.add(
1703
+ ("CWInterface", "twoGHzChainDisabledAndReturnReassocRequired_error_")
1704
+ )
1705
+ exclude_attrs.add(
1706
+ ("IOBluetoothDevice", "getRemoteVersionInfo_lmpVersion_lmpSubversion_")
1707
+ )
1708
+ exclude_attrs.add(("IOBluetoothHandsFree", "processIncomingData_length_"))
1709
+ exclude_attrs.add(
1710
+ ("IOBluetoothHandsFreeAudioGateway", "processIncomingData_length_")
1711
+ )
1712
+ exclude_attrs.add(("IOBluetoothHandsFreeDevice", "processIncomingData_length_"))
1713
+ exclude_attrs.add(("IOBluetoothHandsFreeDevice", "saveToFile_bufferSize_"))
1714
+ exclude_attrs.add(
1715
+ ("IOBluetoothHostController", "getPropertyObjectFromIOServiceNamed_forKey_")
1716
+ )
1717
+ exclude_attrs.add(
1718
+ (
1719
+ "IOBluetoothHostController",
1720
+ "readVerboseConfigVersionInfo_outTargetID_outBaseline_outBuild_",
1721
+ )
1722
+ )
1723
+ exclude_attrs.add(
1724
+ (
1725
+ "NSFileProviderManager",
1726
+ "checkDomainsCanBeStored_onVolumeAtURL_unsupportedReason_error_",
1727
+ )
1728
+ )
1729
+ exclude_attrs.add(
1730
+ (
1731
+ "TKSmartCard",
1732
+ "buildIns_p1_p2_data_range_le_protocol_chained_extended_realLe_",
1733
+ )
1734
+ )
1735
+
1384
1736
  # Calculate all (interesting) names in the module. This pokes into
1385
1737
  # the implementation details of objc.ObjCLazyModule to avoid loading
1386
1738
  # all attributes (which is expensive for larger bindings).
@@ -1443,6 +1795,12 @@ class TestCase(_unittest.TestCase):
1443
1795
  # Skip private names
1444
1796
  continue
1445
1797
 
1798
+ if value.__name__ == "IOBluetoothHostController" and any(
1799
+ attr_name.startswith(pfx)
1800
+ for pfx in ("Bluetooth", "Broadcom")
1801
+ ):
1802
+ continue
1803
+
1446
1804
  with self.subTest(classname=nm, instance_method=attr_name):
1447
1805
  if isinstance(attr, objc.selector): # pragma: no branch
1448
1806
  self._validateCallableMetadata(
@@ -1,6 +1,7 @@
1
1
  import collections.abc
2
2
  import datetime
3
3
  import pathlib
4
+ import numbers
4
5
 
5
6
  from objc import _objc
6
7
 
@@ -10,6 +11,7 @@ __all__ = [
10
11
  "registerSetType",
11
12
  "registerDateType",
12
13
  "registerPathType",
14
+ "registerNumberType",
13
15
  ]
14
16
 
15
17
  _objc.options._datetime_date_type = datetime.date
@@ -56,6 +58,14 @@ def registerPathType(type_object):
56
58
  _objc.options._path_types += (type_object,)
57
59
 
58
60
 
61
+ def registerNumberType(type_object):
62
+ """
63
+ Register 'type' as a date-like type that will be proxied
64
+ as an NSDate subclass.
65
+ """
66
+ _objc.options._number_types += (type_object,)
67
+
68
+
59
69
  registerListType(collections.abc.Sequence)
60
70
  registerListType(range)
61
71
  registerMappingType(collections.abc.Mapping)
@@ -66,3 +76,4 @@ registerSetType(collections.abc.Set)
66
76
  registerDateType(datetime.date)
67
77
  registerDateType(datetime.datetime)
68
78
  registerPathType(pathlib.Path)
79
+ registerNumberType(numbers.Number)
@@ -669,29 +669,16 @@ def _parseBridgeSupport(data, globals, frameworkName, *args, **kwds): # noqa: A
669
669
  )
670
670
 
671
671
 
672
- if sys.version_info[:2] >= (3, 9): # pragma: no branch
673
-
674
- def resource_exists(package, resource):
675
- try:
676
- return resources.files(package).joinpath(resource).is_file()
677
-
678
- except ImportError:
679
- return False
680
-
681
- def resource_string(package, resource):
682
- return resources.files(package).joinpath(resource).read_text()
683
-
684
- else: # pragma: no cover
672
+ def resource_exists(package, resource):
673
+ try:
674
+ return resources.files(package).joinpath(resource).is_file()
685
675
 
686
- def resource_exists(package, resource):
687
- try:
688
- return resources.is_resource(package, resource)
676
+ except ImportError:
677
+ return False
689
678
 
690
- except ImportError:
691
- return False
692
679
 
693
- def resource_string(package, resource):
694
- return resources.read_text(package, resource)
680
+ def resource_string(package, resource):
681
+ return resources.files(package).joinpath(resource).read_text()
695
682
 
696
683
 
697
684
  def initFrameworkWrapper(
@@ -139,7 +139,9 @@ def registerNewKeywordsFromSelector(classname, selector):
139
139
  raise TypeError("selector should by a bytes object")
140
140
  selname = selector.decode()
141
141
  kw = _selectorToKeywords(selname)
142
- NEW_MAP.setdefault(classname, {})[kw] = selname.replace(":", "_")
142
+ map_dict = NEW_MAP.setdefault(classname, {})
143
+ if kw not in map_dict:
144
+ map_dict[kw] = selname.replace(":", "_")
143
145
 
144
146
 
145
147
  def registerNewKeywords(classname, keywords, methodname):
@@ -152,7 +154,9 @@ def registerNewKeywords(classname, keywords, methodname):
152
154
  """
153
155
  if not isinstance(keywords, tuple) or not all(isinstance(x, str) for x in keywords):
154
156
  raise TypeError("keywords must be tuple of strings")
155
- NEW_MAP.setdefault(classname, {})[keywords] = methodname
157
+ map_dict = NEW_MAP.setdefault(classname, {})
158
+ if keywords not in map_dict:
159
+ map_dict[keywords] = methodname
156
160
 
157
161
 
158
162
  def registerABCForClass(classname, *abc_class):
@@ -9,8 +9,8 @@ framework wrappers.
9
9
  from objc._convenience import addConvenienceForClass
10
10
  from objc._objc import registerMetaDataForSelector
11
11
  from ._new import NEW_MAP
12
- import sys
13
12
  import operator
13
+ import sys
14
14
 
15
15
  registerMetaDataForSelector(
16
16
  b"NSData",
@@ -251,6 +251,14 @@ def nsdata_isascii(self, *args, **kwds):
251
251
  return bytes(self.bytes()).isascii(*args, **kwds)
252
252
 
253
253
 
254
+ def nsdata_removeprefix(self, *args, **kwds):
255
+ return bytes(self.bytes()).removeprefix(*args, **kwds)
256
+
257
+
258
+ def nsdata_removesuffix(self, *args, **kwds):
259
+ return bytes(self.bytes()).removesuffix(*args, **kwds)
260
+
261
+
254
262
  addConvenienceForClass(
255
263
  "NSData",
256
264
  (
@@ -302,25 +310,11 @@ addConvenienceForClass(
302
310
  ("translate", nsdata_translate),
303
311
  ("upper", nsdata_upper),
304
312
  ("zfill", nsdata_zfill),
313
+ ("removeprefix", nsdata_removeprefix),
314
+ ("removesuffix", nsdata_removesuffix),
305
315
  ),
306
316
  )
307
317
 
308
- if sys.version_info[:2] >= (3, 9): # pragma: no branch
309
-
310
- def nsdata_removeprefix(self, *args, **kwds):
311
- return bytes(self.bytes()).removeprefix(*args, **kwds)
312
-
313
- def nsdata_removesuffix(self, *args, **kwds):
314
- return bytes(self.bytes()).removesuffix(*args, **kwds)
315
-
316
- addConvenienceForClass(
317
- "NSData",
318
- (
319
- ("removeprefix", nsdata_removeprefix),
320
- ("removesuffix", nsdata_removesuffix),
321
- ),
322
- )
323
-
324
318
 
325
319
  def nsmutabledata__setitem__(self, item, value):
326
320
  self.mutableBytes()[item] = value
@@ -430,6 +424,25 @@ def nsmutabledata_resize(self, size):
430
424
  self.replaceBytesInRange_withBytes_length_((size, cursize - size), b"", 0)
431
425
 
432
426
 
427
+ if sys.version_info[:2] >= (3, 15): # pragma: no branch
428
+
429
+ def nsmutabledata_take_bytes(self, n=None, /):
430
+ if n is None:
431
+ result = bytes(self)
432
+ self.setData_(b"")
433
+ return result
434
+ else:
435
+ if n < 0:
436
+ n += len(self)
437
+ if n < 0 or n >= len(self):
438
+ raise IndexError(n)
439
+
440
+ result = bytes(self.bytes()[:n])
441
+ self.replaceBytesInRange_withBytes_length_((0, n), b"", 0)
442
+ return result
443
+
444
+ addConvenienceForClass("NSMutableData", (("take_bytes", nsmutabledata_take_bytes),))
445
+
433
446
  addConvenienceForClass(
434
447
  "NSMutableData",
435
448
  (
@@ -143,7 +143,7 @@ def new_func(cls, *args, **kwds):
143
143
  raise TypeError(f"{cls.__name__}() does not accept positional arguments")
144
144
 
145
145
  args = [kwds[n] for n in key]
146
- if name.startswith("init") and len(name) == 4 or name[4].isupper():
146
+ if name.startswith("init") and (len(name) == 4 or name[4].isupper()):
147
147
  return getattr(cls.alloc(), name)(*args)
148
148
 
149
149
  else:
@@ -10,7 +10,6 @@ performs checks that are needed to avoid crashes.
10
10
  import objc
11
11
  import types
12
12
  import inspect
13
- import dis
14
13
  import keyword
15
14
  import warnings
16
15
  import sys
@@ -449,7 +448,7 @@ def transformAttribute(name, value, class_object, protocols):
449
448
  if signature is None:
450
449
  # Calculate a default signature based on the selector shape
451
450
  if isinstance(value, (types.FunctionType, types.MethodType)):
452
- returns_object = returns_value(value)
451
+ returns_object = objc._returns_value(value)
453
452
  else:
454
453
  returns_object = True
455
454
 
@@ -575,46 +574,6 @@ def is_generator_or_async(value):
575
574
  return False
576
575
 
577
576
 
578
- def returns_value(func):
579
- """
580
- Return True if 'func' explicitly returns a value
581
-
582
- """
583
- # This will return False for functions where all explicit
584
- # returns are of the form "return" or "return None". The
585
- # latter is a false negative, but cannot be avoided with
586
- # bytecode inspection.
587
- # XXX: This will give a false positive for functions
588
- # that only contain "return None" paths for
589
- # returning a value.
590
- #
591
- # Until Python 3.14 constant 0 was always None, due to
592
- # changes in the bytecode compiler that's no longer true.
593
-
594
- if not isinstance(func.__code__, types.CodeType):
595
- return True
596
-
597
- prev = None
598
- consts = func.__code__.co_consts
599
-
600
- for inst in dis.get_instructions(func):
601
- if inst.opname == "RETURN_VALUE":
602
- assert prev is not None
603
- if prev.opname == "LOAD_CONST" and consts[prev.arg] is not None:
604
- return True
605
- elif prev.opname != "LOAD_CONST":
606
- return True
607
-
608
- elif ( # pragma: no branch
609
- inst.opname == "RETURN_CONST" and consts[inst.arg] is not None
610
- ):
611
- # New in Python 3.12, dropped in 3.14
612
- return True # pragma: no cover
613
- prev = inst
614
-
615
- return False
616
-
617
-
618
577
  def default_selector(name):
619
578
  """
620
579
  Returns a byte string with the selector for 'name',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyobjc-core
3
- Version: 12.1
3
+ Version: 12.2
4
4
  Summary: Python<->ObjC Interoperability Module
5
5
  Home-page: https://github.com/ronaldoussoren/pyobjc
6
6
  Author: Ronald Oussoren, bbum, SteveM, LeleG, many others stretching back through the reaches of time...