fix(ci): fetch Python.xcframework in ci_post_clone (Xcode Cloud build fix)#88
Conversation
The dual-backend merge (2e49820) introduced the embedded-Python dependency and taught the Xcode Cloud post-clone hook to fetch the iOS *wheels* -- but not the Python.xcframework itself. The framework is gitignored (too large for git) and the Columba target links it, so a fresh Xcode Cloud clone has nothing to link against and the build fails. Fetch it in post-clone alongside the wheels, mirroring the same idempotent guard. fetch-python.sh is a plain curl+tar of a pinned BeeWare release (no host toolchain required); the pinned 3.13-b13 asset returns 200. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Greptile SummaryFixes a missing step in the Xcode Cloud post-clone hook:
Confidence Score: 5/5Safe to merge — the change adds a single, well-scoped call to an existing idempotent script, closing a real build gap without touching any product code. The fix is minimal and correct: fetch-python.sh already handles version checking and idempotency internally, so calling it unconditionally is the right design. The comment in the new code clearly explains the reasoning. No product code is touched, no new external dependencies are introduced, and the script-level error propagation (set -euo pipefail) remains intact throughout. No files require special attention. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[ci_post_clone.sh starts] --> B[Rewrite MARKETING_VERSION & BUILD_NUMBER in pbxproj]
B --> C["Call support/fetch-python.sh (unconditional)"]
C --> D{Frameworks/VERSIONS\nmatches pinned b13?}
D -- Yes --> E[Skip — nothing to fetch]
D -- No --> F[curl BeeWare release tarball]
F --> G[Remove stale Python.xcframework]
G --> H[tar extract into Frameworks/]
H --> I[Python.xcframework ready]
E --> J{wheels-iphoneos &\nwheels-iphonesimulator present?}
I --> J
J -- Yes --> K[Skip wheels fetch]
J -- No --> L[Call support/fetch-wheels.sh]
L --> M[Wheels ready]
K --> N[done.]
M --> N
Reviews (2): Last reviewed commit: "address greptile review feedback (greplo..." | Re-trigger Greptile |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Drop the directory-existence guard around fetch-python.sh and call it unconditionally. fetch-python.sh is already version-aware (bails on a matching Frameworks/VERSIONS, re-fetches when stale/missing), so the outer guard only masked stale-version upgrades. Calling it directly also avoids duplicating the pinned build tag in a second place. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Problem
Xcode Cloud builds fail after the dual-backend merge.
Root cause
The embedded-Python dependency landed in
2e49820(dual-backend PR 1/3), which also updatedci_post_clone.shto fetch the iOS wheels — but not thePython.xcframeworkitself.Frameworks/Python.xcframework/is gitignored (too large for git; fetched bysupport/fetch-python.sh).Columbatarget linksPython.xcframework(14 references in the pbxproj), and no build phase fetches it.GitHub Actions doesn't hit this because its workflow fetches the framework separately; only the Xcode Cloud path was missing it.
Fix
Fetch the framework in
ci_post_clone.shalongside the wheels, with the same idempotent "skip if present" guard.fetch-python.shis a plaincurl + tarof the pinned BeeWare3.13-b13release (no host toolchain needed); the asset currently returns HTTP 200.Verification
bash -n ci_scripts/ci_post_clone.sh✅b13, so the guard correctly skips on incremental/local runs ✅