Skip to content

iOS testbed clone breaks on some symlinks #130025

Closed
@freakboy3742

Description

@freakboy3742

Bug report

Bug description:

The iOS testbed project is able to use symlinks when referring to the XCframework (or simulator Framework slice of an XCframework). This saves significant disk space and startup time as the need to copy the full framework is eliminated.

The clone subcommand of the testbed will duplicate this symlink; or, if a path to an XCframework (or simulator slice) is provided, that framework will be used instead.

However:

  1. If the testbed is cloned and no new framework is provided, and the symlink is specified as a relative link, the symlink will not work in the new location
  2. If the existing framework symlink is invalid, any attempt to replace it fails because the existing link won't resolve.

To replicate, generate an arm64 simulator build, then:

  1. python iOS/testbed clone testbed-1 --framework cross-build/arm64-apple-ios-simulator/iOS/Frameworks/arm64-iphonesimulator (substitute path to simulator framework as appropriate)
  2. python testbed-1 clone tmp/testbed-2
  3. Inspect tmp/testbed-2/Python.xcframework/ios-arm64_x86_64-simulator - it will be an invalid symlink.
  4. python tmp/testbed-2 clone tmp/testbed-3 - this will fail because testbed-2 doesn't contain a simulator framework.
  5. python tmp/testbed-2 clone tmp/testbed-3 --framework cross-build/arm64-apple-ios-simulator/iOS/Frameworks/arm64-iphonesimulator - this will fail with a FileNotFoundError looking for .../cpython/tmp/cross-build/arm64-apple-ios-simulator/iOS/Frameworks/arm64-iphonesimulator, which is what the testbed-2 framework symlink would resolve to (but doesn't exist).

CPython versions tested on:

3.14

Operating systems tested on:

Other

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.13bugs and security fixes3.14bugs and security fixesOS-iostype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions