From 3781b153399b3c3922fe3e3c917df3420abe210f Mon Sep 17 00:00:00 2001 From: Kyle Date: Mon, 23 Mar 2026 01:47:58 +0800 Subject: [PATCH 1/3] Fix xcframework workflow: path-based targets for non-tag builds and direct artifact upload - Generate `.binaryTarget(name:path:)` entries instead of URL-based ones for non-tag (manual) builds since no release tag is available - Replace upload-artifact@v4 with v7 using `archive: false` to upload a single xcframeworks.zip directly, avoiding the zip-of-zips issue when downloading --- .github/actions/build-xcframework/action.yml | 8 ++++++-- .github/workflows/build_xcframework.yml | 10 ++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/actions/build-xcframework/action.yml b/.github/actions/build-xcframework/action.yml index e18a4dd7f..6998da8aa 100644 --- a/.github/actions/build-xcframework/action.yml +++ b/.github/actions/build-xcframework/action.yml @@ -51,8 +51,12 @@ runs: echo '```swift' >> $GITHUB_STEP_SUMMARY for fw in "${FRAMEWORKS[@]}"; do zip -r "$fw.xcframework.zip" "$fw.xcframework" - CHECKSUM=$(swift package compute-checksum "$fw.xcframework.zip") - ENTRY=$(printf '.binaryTarget(\n name: "%s",\n url: "https://github.com/OpenSwiftUIProject/OpenSwiftUI/releases/download/%s/%s.xcframework.zip",\n checksum: "%s"\n),' "$fw" "${TAG_NAME:-}" "$fw" "$CHECKSUM") + if [ -n "$TAG_NAME" ]; then + CHECKSUM=$(swift package compute-checksum "$fw.xcframework.zip") + ENTRY=$(printf '.binaryTarget(\n name: "%s",\n url: "https://github.com/OpenSwiftUIProject/OpenSwiftUI/releases/download/%s/%s.xcframework.zip",\n checksum: "%s"\n),' "$fw" "$TAG_NAME" "$fw" "$CHECKSUM") + else + ENTRY=$(printf '.binaryTarget(\n name: "%s",\n path: "%s.xcframework"\n),' "$fw" "$fw") + fi echo "$ENTRY" >> $GITHUB_STEP_SUMMARY if [ -n "$BODY" ]; then BODY=$(printf '%s\n%s' "$BODY" "$ENTRY") diff --git a/.github/workflows/build_xcframework.yml b/.github/workflows/build_xcframework.yml index 6f00cf429..cb82dd2a3 100644 --- a/.github/workflows/build_xcframework.yml +++ b/.github/workflows/build_xcframework.yml @@ -15,8 +15,10 @@ jobs: - uses: actions/checkout@v4 - name: Build XCFrameworks uses: ./.github/actions/build-xcframework - - name: Upload Artifacts - uses: actions/upload-artifact@v4 + - name: Zip XCFrameworks + run: cd build && zip -r xcframeworks.zip *.xcframework + - name: Upload XCFrameworks + uses: actions/upload-artifact@v7 with: - name: xcframeworks - path: build/*.xcframework.zip + path: build/xcframeworks.zip + archive: false From 81f2233db6ebf8bbbb3d7557a7881a3fe8b1901c Mon Sep 17 00:00:00 2001 From: Kyle Date: Mon, 23 Mar 2026 01:54:01 +0800 Subject: [PATCH 2/3] Move per-framework zip into tag-only branch Only create individual xcframework zips when building for a release tag, since non-tag builds don't need them. --- .github/actions/build-xcframework/action.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/actions/build-xcframework/action.yml b/.github/actions/build-xcframework/action.yml index 6998da8aa..18004219b 100644 --- a/.github/actions/build-xcframework/action.yml +++ b/.github/actions/build-xcframework/action.yml @@ -1,5 +1,5 @@ name: 'Build XCFrameworks' -description: 'Build OpenSwiftUI xcframeworks, zip each one, and compute checksums' +description: 'Build OpenSwiftUI xcframeworks and generate binaryTarget entries' inputs: xcode-version: @@ -29,7 +29,7 @@ runs: - name: Build XCFrameworks run: Scripts/build_xcframework.sh OpenSwiftUI shell: bash - - name: Zip and Compute Checksums + - name: Compute Checksums and Generate Summary id: checksums shell: bash env: @@ -46,12 +46,12 @@ runs: OpenRenderBoxShims ) BODY="" - echo "### XCFramework Checksums" >> $GITHUB_STEP_SUMMARY + echo "### XCFramework Binary Targets" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo '```swift' >> $GITHUB_STEP_SUMMARY for fw in "${FRAMEWORKS[@]}"; do - zip -r "$fw.xcframework.zip" "$fw.xcframework" if [ -n "$TAG_NAME" ]; then + zip -r "$fw.xcframework.zip" "$fw.xcframework" CHECKSUM=$(swift package compute-checksum "$fw.xcframework.zip") ENTRY=$(printf '.binaryTarget(\n name: "%s",\n url: "https://github.com/OpenSwiftUIProject/OpenSwiftUI/releases/download/%s/%s.xcframework.zip",\n checksum: "%s"\n),' "$fw" "$TAG_NAME" "$fw" "$CHECKSUM") else From 6a3524091a1d1723c833df27b925666e2d8ad3dc Mon Sep 17 00:00:00 2001 From: Kyle Date: Mon, 23 Mar 2026 02:36:50 +0800 Subject: [PATCH 3/3] Preserve symlinks when zipping xcframeworks Use `zip -ry` instead of `zip -r` to preserve macOS framework bundle symlinks (Versions/Current, top-level Modules/Resources). Without this, codesigning fails because the framework structure is invalid. --- .github/actions/build-xcframework/action.yml | 2 +- .github/workflows/build_xcframework.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/build-xcframework/action.yml b/.github/actions/build-xcframework/action.yml index 18004219b..bdfdf5507 100644 --- a/.github/actions/build-xcframework/action.yml +++ b/.github/actions/build-xcframework/action.yml @@ -51,7 +51,7 @@ runs: echo '```swift' >> $GITHUB_STEP_SUMMARY for fw in "${FRAMEWORKS[@]}"; do if [ -n "$TAG_NAME" ]; then - zip -r "$fw.xcframework.zip" "$fw.xcframework" + zip -ry "$fw.xcframework.zip" "$fw.xcframework" CHECKSUM=$(swift package compute-checksum "$fw.xcframework.zip") ENTRY=$(printf '.binaryTarget(\n name: "%s",\n url: "https://github.com/OpenSwiftUIProject/OpenSwiftUI/releases/download/%s/%s.xcframework.zip",\n checksum: "%s"\n),' "$fw" "$TAG_NAME" "$fw" "$CHECKSUM") else diff --git a/.github/workflows/build_xcframework.yml b/.github/workflows/build_xcframework.yml index cb82dd2a3..a6e30a55a 100644 --- a/.github/workflows/build_xcframework.yml +++ b/.github/workflows/build_xcframework.yml @@ -16,7 +16,7 @@ jobs: - name: Build XCFrameworks uses: ./.github/actions/build-xcframework - name: Zip XCFrameworks - run: cd build && zip -r xcframeworks.zip *.xcframework + run: cd build && zip -ry xcframeworks.zip *.xcframework - name: Upload XCFrameworks uses: actions/upload-artifact@v7 with: