Conversation
Archives `GutenbergKitResources` for device and simulator, assembles an XCFramework with resource bundles and dSYMs, then outputs a zip with SPM checksum. The `.o` → dylib linking step is necessary because SPM produces a static object file; without it, `BundleFinder` gets statically linked into the consuming app and `Bundle(for:)` resolves to the wrong bundle at runtime. --- Generated with the help of Claude Code, https://claude.ai/code Co-Authored-By: Claude Code Opus 4.6 <noreply@anthropic.com>
Scoped to `publish_to_s3` and `xcframework_sign` lanes. Release orchestration lanes (`release`, `validate`, `update_swift_package`, `publish_release_to_github`) are deferred to a follow-up once the full CI release flow is designed. --- Generated with the help of Claude Code, https://claude.ai/code Co-Authored-By: Claude Code Opus 4.6 <noreply@anthropic.com>
The build step runs on every push, uploading the zip and checksum as Buildkite artifacts. The S3 publish step is gated on `NEW_VERSION` env var, matching the pattern Android already uses for on-demand release builds. --- Generated with the help of Claude Code, https://claude.ai/code Co-Authored-By: Claude Code Opus 4.6 <noreply@anthropic.com>
Split zip+checksum out of `build_xcframework.sh` into `package_xcframework.sh` so codesigning can happen on the unzipped `.xcframework` directory between build and package. The CI build step now runs: 1. `fastlane set_up_signing_release` — installs certs 2. `make build-resources-xcframework` — builds xcframework 3. `fastlane xcframework_sign` — codesigns xcframework 4. `./package_xcframework.sh` — zips + checksums --- Generated with the help of Claude Code, https://claude.ai/code Co-Authored-By: Claude Code Opus 4.6 <noreply@anthropic.com>
99a89e0 to
919f5fd
Compare
50ed17c to
dae10df
Compare
| buildkite-agent artifact download dist.tar.gz . | ||
| tar -xzf dist.tar.gz | ||
| install_gems | ||
| bundle exec fastlane set_up_signing_release | ||
| make build-resources-xcframework | ||
| bundle exec fastlane xcframework_sign | ||
| ./package_xcframework.sh |
There was a problem hiding this comment.
I admit this is quite confusing with a mash of Fastlane, make, and scripts. I'll tidy up in a follow up, my preference being to use make as the single entry point.
There was a problem hiding this comment.
| buildkite-agent artifact download '*.xcframework.zip' . | ||
| buildkite-agent artifact download '*.xcframework.zip.checksum.txt' . | ||
| install_gems | ||
| bundle exec fastlane publish_to_s3 version:${NEW_VERSION:-$BUILDKITE_COMMIT} |
There was a problem hiding this comment.
Android publishes every version but does not have the issue of having to update Package.swift to match the checksum generated by the build.
Given storage is cheap, it might be okay for us to publish the XCFramework on every build, too, just to continue exercising the infra and avoid surprises at release time.
Or, we could be frugal and only publish when we need. I'm leaning toward publishing one every build, though. Faster feedback. And we could add additional automation to easily push a commit with updated Package.swift so that any XCFramework in S3 can be tested in WordPress iOS in a few clicks.
Summary
Adds the automation for building, signing, and uploading the resources XCFramework build. This will allow having a smaller follow up PR focused only on updating the release automation to handle version bumping,
Package.swiftupdate, and GitHub release.This lands the build and upload pipeline without wiring into
Package.swift— consumers still use the local source target.I pushed a one-off
Package.swiftupdate branch to use the latest artifact built here and tested it in WordPress iOS via CI-made Prototype Build.build_xcframework.shscript that archivesGutenbergKitResourcesfor device + simulator, links.ointo a dylib, assembles an XCFramework with resource bundles and dSYMs, and outputs a zip with SPM checksummake build-resources-xcframeworktargetpublish_to_s3andxcframework_signlanes (release orchestration lanes deferred)NEW_VERSIONenv varTest plan
make build-resources-xcframeworkproduces a valid zip + checksum locallyNEW_VERSIONis not set🤖 Generated with Claude Code
Posted by Claude Code (Opus 4.6) on behalf of @mokagio with approval.