diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 587abe8..338f86e 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -48,6 +48,3 @@ jobs: # watchOS build curl -o watchOS-artefact.tar.gz -L https://github.com/beeware/Python-Apple-support/releases/download/${{ steps.build-vars.outputs.TAG }}/Python-${{ steps.build-vars.outputs.PYTHON_VER }}-watchOS-support.${{ steps.build-vars.outputs.BUILD_NUMBER }}.tar.gz aws s3 cp watchOS-artefact.tar.gz s3://briefcase-support/python/${{ steps.build-vars.outputs.PYTHON_VER }}/watchOS/Python-${{ steps.build-vars.outputs.PYTHON_VER }}-watchOS-support.${{ steps.build-vars.outputs.BUILD_NUMBER }}.tar.gz - # visionOS build - curl -o visionOS-artefact.tar.gz -L https://github.com/beeware/Python-Apple-support/releases/download/${{ steps.build-vars.outputs.TAG }}/Python-${{ steps.build-vars.outputs.PYTHON_VER }}-visionOS-support.${{ steps.build-vars.outputs.BUILD_NUMBER }}.tar.gz - aws s3 cp visionOS-artefact.tar.gz s3://briefcase-support/python/${{ steps.build-vars.outputs.PYTHON_VER }}/visionOS/Python-${{ steps.build-vars.outputs.PYTHON_VER }}-visionOS-support.${{ steps.build-vars.outputs.BUILD_NUMBER }}.tar.gz diff --git a/Makefile b/Makefile index 63e53c8..f625e7f 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ # - iOS - build everything for iOS # - tvOS - build everything for tvOS # - watchOS - build everything for watchOS +# - visionOS - build everything for visionOS # Current directory PROJECT_DIR=$(shell pwd) @@ -57,6 +58,10 @@ TARGETS-watchOS=watchsimulator.x86_64 watchsimulator.arm64 watchos.arm64_32 TRIPLE_OS-watchOS=watchos VERSION_MIN-watchOS=4.0 +TARGETS-visionOS=xrsimulator.arm64 xros.arm64 +TRIPLE_OS-visionOS=xros +VERSION_MIN-visionOS=2.0 + # The architecture of the machine doing the build HOST_ARCH=$(shell uname -m) HOST_PYTHON=$(shell which python$(PYTHON_VER)) @@ -452,7 +457,8 @@ $$(PYTHON_LIB-$(sdk)): $$(foreach target,$$(SDK_TARGETS-$(sdk)),$$(PYTHON_LIB-$$ mkdir -p $$(dir $$(PYTHON_LIB-$(sdk))) lipo -create -output $$@ $$^ \ 2>&1 | tee -a install/$(os)/$(sdk)/python-$(PYTHON_VERSION).lipo.log - dsymutil $$@ -o $$(PYTHON_INSTALL-$(sdk))/Python.dSYM + # Disable dSYM production (for now) + # dsymutil $$@ -o $$(PYTHON_INSTALL-$(sdk))/Python.dSYM $$(PYTHON_FRAMEWORK-$(sdk))/Info.plist: $$(PYTHON_LIB-$(sdk)) @echo ">>> Install Info.plist for the $(sdk) SDK" @@ -517,8 +523,9 @@ $$(PYTHON_STDLIB-$(sdk))/LICENSE.TXT: $$(PYTHON_LIB-$(sdk)) $$(PYTHON_FRAMEWORK- # Merge the binary modules from each target in the $(sdk) SDK into a single binary $$(foreach module,$$(wildcard $$(PYTHON_STDLIB-$$(firstword $$(SDK_TARGETS-$(sdk))))/lib-dynload/*),lipo -create -output $$(PYTHON_STDLIB-$(sdk))/lib-dynload/$$(notdir $$(module)) $$(foreach target,$$(SDK_TARGETS-$(sdk)),$$(PYTHON_STDLIB-$$(target))/lib-dynload/$$(notdir $$(module))); ) - # Create dSYM files for each module - $$(foreach module,$$(wildcard $$(PYTHON_STDLIB-$$(firstword $$(SDK_TARGETS-$(sdk))))/lib-dynload/*),dsymutil $$(PYTHON_STDLIB-$(sdk))/lib-dynload/$$(notdir $$(module)); ) + # # Disable dSYM production (for now) + # # Create dSYM files for each module + # $$(foreach module,$$(wildcard $$(PYTHON_STDLIB-$$(firstword $$(SDK_TARGETS-$(sdk))))/lib-dynload/*),dsymutil $$(PYTHON_STDLIB-$(sdk))/lib-dynload/$$(notdir $$(module)); ) # Copy in known-required xcprivacy files. # Libraries linking OpenSSL must provide a privacy manifest. The one in this repository @@ -662,7 +669,8 @@ $$(PYTHON_XCFRAMEWORK-$(os))/Info.plist: \ $$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/bin $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); ) $$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/lib $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); ) $$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/platform-config $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); ) - $$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/Python.dSYM $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); ) + # Disable dSYM production (for now) + # $$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/Python.dSYM $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); ) ifeq ($(filter $(os),iOS visionOS),$(os)) @echo ">>> Clone testbed project for $(os)" diff --git a/README.rst b/README.rst index ecf8c94..d75ef0e 100644 --- a/README.rst +++ b/README.rst @@ -2,7 +2,7 @@ Python Apple Support ==================== This is a meta-package for building a version of Python that can be embedded -into a macOS, iOS, tvOS, watchOS, or visionOS project. +into a macOS, iOS, tvOS, watchOS project. **This branch builds a packaged version of Python 3.13**. Other Python versions are available by cloning other branches of the main @@ -23,16 +23,15 @@ The macOS package is a re-bundling of the official macOS binary, modified so tha it is relocatable, with the IDLE, Tkinter and turtle packages removed, and the App Store compliance patch applied. -The iOS, tvOS, watchOS, and visionOS packages compiled by this project use the +The iOS, tvOS, and watchOS packages compiled by this project use the official `PEP 730 `__ code that is part of Python 3.13 to provide iOS support; the relevant patches have been backported -to 3.9-3.12. Additional patches have been applied to add tvOS, watchOS, and -visionOS support. +to 3.9-3.12. Additional patches have been applied to add tvOS, and watchOS +support. The binaries support x86_64 and arm64 for macOS; arm64 for iOS and appleTV -devices; arm64_32 for watchOS devices; and arm64 for visionOS devices. It also -supports device simulators on both x86_64 and M1 hardware, except for visionOS, -for which x86_64 simulators are officially unsupported. This should enable the +devices; and arm64_32 for watchOS devices. It also +supports device simulators on both x86_64 and M1 hardware. This should enable the code to run on: * macOS 11 (Big Sur) or later, on: @@ -52,8 +51,6 @@ code to run on: * Apple TV (4th gen or later) * watchOS 4.0 or later, on: * Apple Watch (4th gen or later) -* visionOS 2.0 or later, on: - * Apple Vision Pro Quickstart ---------- @@ -74,7 +71,6 @@ repository, and then in the root directory, and run: * ``make iOS`` to build everything for iOS. * ``make tvOS`` to build everything for tvOS. * ``make watchOS`` to build everything for watchOS. -* ``make visionOS`` to build everything for visionOS. This should: @@ -91,7 +87,7 @@ Each support package contains: support package; * ``Python.xcframework``, a multi-architecture build of the Python runtime library. -On iOS/tvOS/watchOS/visionOS, the ``Python.xcframework`` contains a +On iOS/tvOS/watchOS, the ``Python.xcframework`` contains a slice for each supported ABI (device and simulator). The folder containing the slice can also be used as a ``PYTHONHOME``, as it contains a ``bin``, ``include`` and ``lib`` directory. @@ -137,8 +133,8 @@ Building binary wheels This project packages the Python standard library, but does not address building binary wheels. Binary wheels for macOS can be obtained from PyPI. `Mobile Forge `__ is a project that provides the -tooling to build build binary wheels for iOS (and potentially for tvOS, watchOS, -and visionOS, although that hasn't been tested). +tooling to build build binary wheels for iOS (and potentially for tvOS and watchOS +although that hasn't been tested). Historical support ------------------ diff --git a/USAGE.md b/USAGE.md index a42f0aa..985efc4 100644 --- a/USAGE.md +++ b/USAGE.md @@ -22,9 +22,9 @@ guides: * [macOS](https://docs.python.org/3/using/mac.html) * [iOS](https://docs.python.org/3/using/ios.html#adding-python-to-an-ios-project) -For tvOS, watchOS, and visionOS, you should be able to broadly follow the instructions +For tvOS, and watchOS, you should be able to broadly follow the instructions in the iOS guide, changing some platform names in the first script. The testbed projects -generated on iOS and visionOS may be used as rough references as well. +generated on iOS may be used as rough references as well. ### Using Objective C