Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
f84e929
ci(swift): add auto-tag workflow on push to main
josuediazflores Feb 2, 2026
e728114
Merge pull request #1 from josuediazflores/ci/swift-auto-tag
josuediazflores Feb 2, 2026
30c23a6
Phase 2 Complete
josuediazflores Feb 2, 2026
00c1eba
Fix
josuediazflores Feb 2, 2026
cb07423
Fix Again
josuediazflores Feb 2, 2026
9dfb4ec
ci(swift): create semver tag in Phase 2 for SPM resolution
josuediazflores Feb 2, 2026
37ad693
validation: point swift-spm-consumer at fork for Phase 2 test
josuediazflores Feb 2, 2026
cfe813b
chore(swift): use remote binaries on main for consumer (v0.17.5)
josuediazflores Feb 2, 2026
fcbe222
SDKTestApp, TTS/LLM UI, upstream URLs, SDK improvements
josuediazflores Feb 2, 2026
1328ad3
ci(swift): Swift CI/CD only – auto-tag, build-release, release, Packa…
josuediazflores Feb 2, 2026
7f21179
ci(swift): harden tag build release workflows
josuediazflores Feb 2, 2026
98336e9
ci(swift): ensure commons built before swift package build
josuediazflores Feb 2, 2026
9127453
ci(swift): pin Xcode 15.4 for swift-v tag build
josuediazflores Feb 3, 2026
459abcf
feat(ios): add SDKTestApp demo app
josuediazflores Feb 3, 2026
2139b85
fix(swift): resolve strict concurrency build errors
josuediazflores Feb 3, 2026
6d83bcb
Merge branch 'main' into ci/swift-cd-only
josuediazflores Feb 3, 2026
892c82a
fix(swift): Swift 6 strict concurrency – temp storage, Sendable ref
josuediazflores Feb 3, 2026
0c5f063
fix(swift): use resultPtr.pointee in Foundation Models generate catch
josuediazflores Feb 3, 2026
b1fa241
fix(ci): correct zip path for release-assets (3 levels up from common…
josuediazflores Feb 3, 2026
3f4934d
fix(ci): checkout main before pushing Package.swift, merge tag steps
josuediazflores Feb 3, 2026
93ddf5e
chore: trigger PR refresh
josuediazflores Feb 3, 2026
129a799
fix(ci): build commons once; Swift SDK step only consumes 3 XCFrameworks
josuediazflores Feb 3, 2026
c884700
fix(ci): discard local Package.swift changes before checkout main
josuediazflores Feb 3, 2026
124fa8b
fix(ci): guard tag/main alignment; use git pull --ff-only to prevent …
josuediazflores Feb 3, 2026
7055a3d
fix(codeql): C/C++ manual build for runanywhere-commons; disable defa…
josuediazflores Feb 4, 2026
7c38b94
chore: trigger CodeQL run with latest workflow
josuediazflores Feb 4, 2026
0d4c26b
fix(ci): run tag/main guard only on upstream; allow release on forks …
josuediazflores Feb 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions .github/workflows/swift-auto-tag.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# =============================================================================
# Swift SDK Auto-Tag (Phase 1 CI/CD)
#
# Merges to main automatically create a new git tag swift-vX.Y.Z to mark
# official Swift SDK release points. Full build/publish automation will be
# added later. No builds, no publishing, no macOS runners in this phase.
#
# PR description: Merges to main auto-create swift-vX.Y.Z tags to mark
# official Swift SDK release points. Full build/publish automation will be
# added later.
# =============================================================================

name: Swift SDK Auto-Tag

on:
push:
branches: [main]

permissions:
contents: write

Comment on lines +15 to +21
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Broad trigger: tags on every push to main

This workflow triggers on any push to main (including merges, reverts, and automated commits from other workflows). If Phase 2 commits to main, that commit will also trigger Phase 1 and create another tag unless you add a guard (e.g., skip when actor is github-actions[bot] or when commit message matches the checksum update). Otherwise you can end up in a tag churn/feedback loop.

Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/swift-auto-tag.yml
Line: 15:21

Comment:
[P1] Broad trigger: tags on every push to `main`

This workflow triggers on any push to `main` (including merges, reverts, and automated commits from other workflows). If Phase 2 commits to `main`, that commit will also trigger Phase 1 and create another tag unless you add a guard (e.g., skip when actor is `github-actions[bot]` or when commit message matches the checksum update). Otherwise you can end up in a tag churn/feedback loop.

How can I resolve this? If you propose a fix, please make it concise.

jobs:
tag:
name: Create Swift SDK Tag
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Configure Git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

- name: Compute Next Tag
id: next_tag
run: |
set -e
# List swift-v* tags, strip prefix, keep only X.Y.Z (no prerelease)
LATEST=$(git tag -l 'swift-v*' | sed 's/^swift-v//' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -n1 || true)
if [ -z "$LATEST" ]; then
NEXT="0.1.1"
else
MAJOR=$(echo "$LATEST" | cut -d. -f1)
MINOR=$(echo "$LATEST" | cut -d. -f2)
PATCH=$(echo "$LATEST" | cut -d. -f3)
PATCH=$((PATCH + 1))
NEXT="$MAJOR.$MINOR.$PATCH"
fi
NEW_TAG="swift-v$NEXT"
echo "tag=$NEW_TAG" >> "$GITHUB_OUTPUT"
echo "Computed next tag: $NEW_TAG"
Comment on lines +38 to +55
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Auto-tagging always bumps patch; version source of truth is unclear

swift-auto-tag.yml computes the next tag by taking the highest existing swift-vX.Y.Z and incrementing PATCH. That means every merge to main is a “patch release”, regardless of what actually changed, and it can diverge from the Swift SDK’s own versioning (e.g., Package.swift’s sdkVersion). If releases should follow an explicit version file or changelog, derive the tag from that instead of auto-incrementing.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/swift-auto-tag.yml
Line: 38:55

Comment:
[P1] Auto-tagging always bumps patch; version source of truth is unclear

`swift-auto-tag.yml` computes the next tag by taking the highest existing `swift-vX.Y.Z` and incrementing PATCH. That means every merge to `main` is a “patch release”, regardless of what actually changed, and it can diverge from the Swift SDK’s own versioning (e.g., `Package.swift`’s `sdkVersion`). If releases should follow an explicit version file or changelog, derive the tag from that instead of auto-incrementing.

<sub>Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!</sub>

How can I resolve this? If you propose a fix, please make it concise.


- name: Skip If Tag Exists
id: skip
run: |
NEW_TAG="${{ steps.next_tag.outputs.tag }}"
if git rev-parse "$NEW_TAG" >/dev/null 2>&1; then
echo "Tag $NEW_TAG already exists, skipping (idempotent rerun)"
echo "skip=true" >> "$GITHUB_OUTPUT"
else
echo "skip=false" >> "$GITHUB_OUTPUT"
fi

- name: Create and Push Tag
if: steps.skip.outputs.skip != 'true'
run: |
NEW_TAG="${{ steps.next_tag.outputs.tag }}"
git tag -a "$NEW_TAG" -m "Swift SDK Release $NEW_TAG"
git push origin "$NEW_TAG"
echo "Pushed tag: $NEW_TAG"
197 changes: 197 additions & 0 deletions .github/workflows/swift-sdk-build-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
# =============================================================================
# Swift SDK Build & Release (Phase 2 CI/CD)
#
# When a swift-v* tag is pushed (from Phase 1), build native XCFrameworks via
# build-ios.sh and the Swift SDK via build-swift.sh on macOS, compute SHA256
# checksums of the ZIPs, update Package.swift with those checksums and
# sdkVersion, commit and push to main, move the tag to that commit, then
# create a GitHub Release and attach the built artifacts. SPM consumers then
# resolve the tag and get correct checksums for the release assets.
#
# Phase 1 decides when (tag on merge to main). Phase 2 performs what
# (build + package + release assets + checksum update).
#
# PR description: Swift SDK builds are automated on swift-v* tag push:
# build-ios.sh and build-swift.sh run on macOS, and the resulting XCFrameworks
# are attached to the GitHub Release. No CocoaPods/App Store; no cross-SDK
# orchestration.
# =============================================================================

name: Swift SDK Build & Release

on:
push:
tags:
- 'swift-v*'

permissions:
contents: write

env:
COMMONS_DIR: sdk/runanywhere-commons
SWIFT_SDK_DIR: sdk/runanywhere-swift

jobs:
build-and-release:
name: Build & Release Swift SDK
runs-on: macos-14

steps:
- name: Checkout
uses: actions/checkout@v4

Comment on lines +39 to +42
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P0] actions/checkout should fetch tags/complete history for retagging

This workflow deletes and recreates tags (git push origin ":refs/tags/${TAG}" then git tag -f ...), but actions/checkout@v4 defaults to fetch-depth: 1 and may not fetch tags; in that case the local repo may not have the tag ref you’re trying to move/overwrite and can behave unexpectedly (or require extra fetch). Setting with: fetch-depth: 0 (and/or fetch-tags: true) makes tag operations deterministic.

Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/swift-sdk-build-release.yml
Line: 39:42

Comment:
[P0] `actions/checkout` should fetch tags/complete history for retagging

This workflow deletes and recreates tags (`git push origin ":refs/tags/${TAG}"` then `git tag -f ...`), but `actions/checkout@v4` defaults to `fetch-depth: 1` and may not fetch tags; in that case the local repo may not have the tag ref you’re trying to move/overwrite and can behave unexpectedly (or require extra fetch). Setting `with: fetch-depth: 0` (and/or `fetch-tags: true`) makes tag operations deterministic.

How can I resolve this? If you propose a fix, please make it concise.

- name: Determine Version
id: version
run: |
TAG="${GITHUB_REF#refs/tags/}"
VERSION="${TAG#swift-v}"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
echo "Building Swift SDK $TAG (version $VERSION)"

- name: Build Native XCFrameworks
run: |
./${COMMONS_DIR}/scripts/build-ios.sh --clean
echo "XCFrameworks:"
ls -la ${COMMONS_DIR}/dist/*.xcframework 2>/dev/null || true
Comment on lines +53 to +57
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P0] ls ${COMMONS_DIR}/dist/*.xcframework won’t list directories

*.xcframework are directories, so ls -la ${COMMONS_DIR}/dist/*.xcframework typically won’t match and will always fall into the || true branch. This can hide whether the build actually produced frameworks. Use a directory glob (or ls -la ${COMMONS_DIR}/dist/*.xcframework/) so it reports correctly.

Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/swift-sdk-build-release.yml
Line: 52:56

Comment:
[P0] `ls ${COMMONS_DIR}/dist/*.xcframework` won’t list directories

`*.xcframework` are directories, so `ls -la ${COMMONS_DIR}/dist/*.xcframework` typically won’t match and will always fall into the `|| true` branch. This can hide whether the build actually produced frameworks. Use a directory glob (or `ls -la ${COMMONS_DIR}/dist/*.xcframework/`) so it reports correctly.

How can I resolve this? If you propose a fix, please make it concise.


- name: Build Swift SDK
run: |
./${SWIFT_SDK_DIR}/scripts/build-swift.sh --local --build-commons --release
echo "Swift build complete"

- name: Prepare Release Assets
id: assets
run: |
VERSION="${{ steps.version.outputs.version }}"
COMMONS_DIST="${COMMONS_DIR}/dist"
mkdir -p release-assets
for name in RACommons RABackendLLAMACPP RABackendONNX; do
if [ -d "${COMMONS_DIST}/${name}.xcframework" ]; then
zip_name="${name}-ios-v${VERSION}.zip"
(cd "${COMMONS_DIST}" && zip -r "../../../../release-assets/${zip_name}" "${name}.xcframework")
echo "Created release-assets/${zip_name}"
fi
done
echo "assets_dir=release-assets" >> "$GITHUB_OUTPUT"
ls -la release-assets/
Comment on lines 65 to 79
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P0] Release asset zip path likely incorrect (too many ../)

Inside Prepare Release Assets, you cd "${COMMONS_DIST}" (which is sdk/runanywhere-commons/dist) and then write to ../../../../release-assets/.... From sdk/runanywhere-commons/dist, ../../../ reaches repo root; ../../../../ goes one level above the repo, so the zip may be created outside the workspace (or fail). This will break subsequent checksum and release steps.

Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/swift-sdk-build-release.yml
Line: 63:77

Comment:
[P0] Release asset zip path likely incorrect (too many `../`)

Inside `Prepare Release Assets`, you `cd "${COMMONS_DIST}"` (which is `sdk/runanywhere-commons/dist`) and then write to `../../../../release-assets/...`. From `sdk/runanywhere-commons/dist`, `../../../` reaches repo root; `../../../../` goes one level above the repo, so the zip may be created outside the workspace (or fail). This will break subsequent checksum and release steps.

How can I resolve this? If you propose a fix, please make it concise.


- name: Compute Checksums
id: checksums
run: |
VERSION="${{ steps.version.outputs.version }}"
COMMONS_CHECKSUM=$(shasum -a 256 "release-assets/RACommons-ios-v${VERSION}.zip" | cut -d ' ' -f 1)
LLAMACPP_CHECKSUM=$(shasum -a 256 "release-assets/RABackendLLAMACPP-ios-v${VERSION}.zip" | cut -d ' ' -f 1)
ONNX_CHECKSUM=$(shasum -a 256 "release-assets/RABackendONNX-ios-v${VERSION}.zip" | cut -d ' ' -f 1)
echo "commons=$COMMONS_CHECKSUM" >> "$GITHUB_OUTPUT"
echo "llamacpp=$LLAMACPP_CHECKSUM" >> "$GITHUB_OUTPUT"
echo "onnx=$ONNX_CHECKSUM" >> "$GITHUB_OUTPUT"
echo "RACommons: $COMMONS_CHECKSUM"
echo "RABackendLLAMACPP: $LLAMACPP_CHECKSUM"
echo "RABackendONNX: $ONNX_CHECKSUM"
Comment on lines +81 to +93
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P0] Checksums step assumes all zips exist, but asset creation is conditional

Prepare Release Assets only zips a framework if the directory exists, but Compute Checksums unconditionally runs shasum on all three zip files. If any framework wasn’t produced, the workflow will fail here with “No such file”. Either fail earlier when a framework is missing or make checksum generation conditional on what was actually built.

Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/swift-sdk-build-release.yml
Line: 79:91

Comment:
[P0] Checksums step assumes all zips exist, but asset creation is conditional

`Prepare Release Assets` only zips a framework if the directory exists, but `Compute Checksums` unconditionally runs `shasum` on all three zip files. If any framework wasn’t produced, the workflow will fail here with “No such file”. Either fail earlier when a framework is missing or make checksum generation conditional on what was actually built.

How can I resolve this? If you propose a fix, please make it concise.


- name: Update Package.swift Checksums and Version
run: |
VERSION="${{ steps.version.outputs.version }}"
COMMONS_CHECKSUM="${{ steps.checksums.outputs.commons }}"
LLAMACPP_CHECKSUM="${{ steps.checksums.outputs.llamacpp }}"
ONNX_CHECKSUM="${{ steps.checksums.outputs.onnx }}"
# Ensure production mode for release (remote binaries)
sed -i '' 's/let useLocalBinaries = true/let useLocalBinaries = false/' Package.swift
# Update sdkVersion
sed -i '' 's/let sdkVersion = "[^"]*"/let sdkVersion = "'"$VERSION"'"/' Package.swift
# Update the three binary target checksums (range: url line through checksum line)
sed -i '' '/RACommons-ios-v.*zip/,/checksum:/ s/checksum: "[^"]*"/checksum: "'"$COMMONS_CHECKSUM"'"/' Package.swift
sed -i '' '/RABackendLLAMACPP-ios-v.*zip/,/checksum:/ s/checksum: "[^"]*"/checksum: "'"$LLAMACPP_CHECKSUM"'"/' Package.swift
sed -i '' '/RABackendONNX-ios-v.*zip/,/checksum:/ s/checksum: "[^"]*"/checksum: "'"$ONNX_CHECKSUM"'"/' Package.swift
echo "Updated Package.swift sdkVersion and checksums"
grep -A1 "RACommons-ios" Package.swift | head -4

- name: Commit and Push Package.swift Update
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add Package.swift
if git diff --staged --quiet; then
echo "No Package.swift changes to commit"
else
git commit -m "chore(swift): update Package.swift checksums for swift-v${{ steps.version.outputs.version }}"
git push origin HEAD:main
fi
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P0] Committing to main on a tag-triggered workflow can fail without checking out main

This workflow triggers on tag pushes, so actions/checkout checks out the tagged commit in a detached HEAD state. git push origin HEAD:main can be rejected if main has advanced since the tag commit. If you intend to update main reliably, you’ll need to explicitly fetch/checkout main and merge/rebase (or otherwise ensure you’re pushing atop the current main).

Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/swift-sdk-build-release.yml
Line: 110:120

Comment:
[P0] Committing to `main` on a tag-triggered workflow can fail without checking out `main`

This workflow triggers on tag pushes, so `actions/checkout` checks out the tagged commit in a detached HEAD state. `git push origin HEAD:main` can be rejected if `main` has advanced since the tag commit. If you intend to update `main` reliably, you’ll need to explicitly fetch/checkout `main` and merge/rebase (or otherwise ensure you’re pushing atop the current `main`).

How can I resolve this? If you propose a fix, please make it concise.


- name: Update Tag to Commit with Checksums
run: |
TAG="${{ steps.version.outputs.tag }}"
# Delete remote tag so we can move it to the new commit
git push origin ":refs/tags/${TAG}" || true
# Tag current commit (with Package.swift update)
git tag -f "${TAG}" -m "Swift SDK Release ${TAG}"
git push origin "${TAG}"
echo "Tag ${TAG} updated to point to commit with correct checksums"

- name: Create Semver Tag for SPM
run: |
VERSION="${{ steps.version.outputs.version }}"
# SPM resolves versions from semver tags (e.g. 0.1.2 or v0.1.2)
# Create tag ${VERSION} on same commit so consumers can use from: "X.Y.Z"
git push origin ":refs/tags/${VERSION}" 2>/dev/null || true
git tag -f "${VERSION}" -m "Swift SDK v${VERSION}"
git push origin "${VERSION}"
echo "Semver tag ${VERSION} created for SPM resolution"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P0] Force-moving tags (swift-v* and semver) is unsafe and can break consumers

Deleting and recreating tags (git push origin ":refs/tags/..." + git tag -f) rewrites published refs. If any clients already resolved the old tag (or a release was created), this breaks reproducibility and can confuse SPM caching. If the goal is for the tag to point to the checksum-updated commit, it’s safer to generate the tag after committing Package.swift, rather than moving an existing tag.

Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/swift-sdk-build-release.yml
Line: 122:140

Comment:
[P0] Force-moving tags (`swift-v*` and semver) is unsafe and can break consumers

Deleting and recreating tags (`git push origin ":refs/tags/..."` + `git tag -f`) rewrites published refs. If any clients already resolved the old tag (or a release was created), this breaks reproducibility and can confuse SPM caching. If the goal is for the tag to point to the checksum-updated commit, it’s safer to generate the tag after committing Package.swift, rather than moving an existing tag.

How can I resolve this? If you propose a fix, please make it concise.


- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.version.outputs.tag }}
name: RunAnywhere Swift SDK v${{ steps.version.outputs.version }}
body: |
## RunAnywhere Swift SDK v${{ steps.version.outputs.version }}

Privacy-first, on-device AI SDK for iOS and macOS. Built automatically on swift-v* tag push (Phase 2 CI).

### Installation

**Swift Package Manager:**
```swift
dependencies: [
.package(
url: "https://github.com/RunanywhereAI/runanywhere-sdks",
from: "${{ steps.version.outputs.version }}"
)
]
```

Then add the products you need:
```swift
.target(
name: "YourApp",
dependencies: [
.product(name: "RunAnywhere", package: "runanywhere-sdks"),
.product(name: "LlamaCPPRuntime", package: "runanywhere-sdks"),
.product(name: "ONNXRuntime", package: "runanywhere-sdks"),
]
)
```

### Features
- **LLM**: On-device text generation via llama.cpp
- **STT**: Speech-to-text via Sherpa-ONNX Whisper
- **TTS**: Text-to-speech via Sherpa-ONNX Piper
- **VAD**: Voice activity detection
- **Privacy**: All processing happens on-device

### Requirements
- iOS 13.0+ / macOS 10.15+
- Swift 5.9+
- Xcode 15.0+

### Documentation
[Swift SDK README](https://github.com/RunanywhereAI/runanywhere-sdks/tree/main/sdk/runanywhere-swift)

---
Built from runanywhere-sdks @ ${{ github.sha }}
files: release-assets/*.zip
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6 changes: 3 additions & 3 deletions .github/workflows/swift-sdk-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@ name: Swift SDK Release
# .package(url: "https://github.com/RunanywhereAI/runanywhere-sdks", from: "1.0.0")
# =============================================================================

# Phase 2 workflow (swift-sdk-build-release.yml) runs on swift-v* tag push.
# This workflow runs only when called by release-all or manually.
on:
push:
tags:
- 'swift-v*'
workflow_call:
inputs:
version:
Expand Down Expand Up @@ -451,6 +450,7 @@ jobs:
startsWith(github.ref, 'refs/tags/swift-v') ||
startsWith(github.ref, 'refs/tags/v') ||
github.event_name == 'workflow_dispatch' ||
github.event_name == 'workflow_call' ||
github.event_name == 'push'
)
runs-on: ubuntu-latest
Expand Down
10 changes: 5 additions & 5 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ let onnxRuntimeMacOSPath = "\(packageDir)/sdk/runanywhere-swift/Binaries/onnxrun
// ./scripts/build-swift.sh --set-remote (sets useLocalBinaries = false)
//
// =============================================================================
let useLocalBinaries = true // Toggle: true for local dev, false for release
let useLocalBinaries = false // Toggle: true for local dev, false for release

// Version for remote XCFrameworks (used when testLocal = false)
// Updated automatically by CI/CD during releases
Expand Down Expand Up @@ -219,23 +219,23 @@ func binaryTargets() -> [Target] {
} else {
// =====================================================================
// PRODUCTION MODE (for external SPM consumers)
// Download XCFrameworks from GitHub releases
// Download XCFrameworks from GitHub releases (v* or swift-v* from Phase 2 CI)
// =====================================================================
return [
.binaryTarget(
name: "RACommonsBinary",
url: "https://github.com/RunanywhereAI/runanywhere-sdks/releases/download/v\(sdkVersion)/RACommons-ios-v\(sdkVersion).zip",
checksum: "ba367c89a468513b33fb167b5996574a8797bf2c00a21e01579ec59458813559"
checksum: "38e871517017610185057e83b14ebf4ac1021d53247f7f85d12d411217ef5247"
),
.binaryTarget(
name: "RABackendLlamaCPPBinary",
url: "https://github.com/RunanywhereAI/runanywhere-sdks/releases/download/v\(sdkVersion)/RABackendLLAMACPP-ios-v\(sdkVersion).zip",
checksum: "9e58e33e2984f5f0498bdad69387aec306fd2d31e6690eab38b9f1d1a21fb0ca"
checksum: "5c8b1c68d32e72561559cb366125f4413968114cdfb1c118141d186c37f3eb4c"
),
.binaryTarget(
name: "RABackendONNXBinary",
url: "https://github.com/RunanywhereAI/runanywhere-sdks/releases/download/v\(sdkVersion)/RABackendONNX-ios-v\(sdkVersion).zip",
checksum: "e760044abfe97d2bde9386d801b0e11421c3782980f4088edce6d6d976f48a84"
checksum: "42a61542fb299f7aaf127a8590ead58d8b159db4ba5ea67fd48a835da3c6289e"
),
.binaryTarget(
name: "ONNXRuntimeBinary",
Expand Down
Loading