Skip to content

Update iOS builds to Xcode 26.2 / iOS 26 SDK#441

Merged
AnthonyRonning merged 8 commits intomasterfrom
devin/1772052170-update-xcode-ios26-sdk
Feb 26, 2026
Merged

Update iOS builds to Xcode 26.2 / iOS 26 SDK#441
AnthonyRonning merged 8 commits intomasterfrom
devin/1772052170-update-xcode-ios26-sdk

Conversation

@devin-ai-integration
Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration Bot commented Feb 25, 2026

Update iOS builds to Xcode 26.2 / iOS 26 SDK

Summary

Addresses the ITMS-90725 App Store Connect warning requiring all iOS/iPadOS apps to be built with the iOS 26 SDK (Xcode 26+) by April 28, 2026.

CI/CD changes (both mobile-build.yml and testflight-on-comment.yml)

  • Runner: macos-latest-xlargemacos-26-xlarge (pinned to macOS 26 Tahoe, which ships with Xcode 26.2)
  • Xcode: 16.426.2 (latest stable Xcode with iOS 26 SDK)
  • ONNX Runtime cache key: includes xcode26.2 to force a clean rebuild against the new SDK
  • Xcode DerivedData cache key: includes xcode26.2 to avoid restoring stale build products from Xcode 16.4
  • Added IPHONEOS_DEPLOYMENT_TARGET: '16.0' env var to Tauri build steps (belt-and-suspenders for swift-rs)
  • Added explicit rustc-link-lib = ["c++"] for iOS targets in the generated cargo config (required because the cargo config override for ort-sys suppresses its build script's cargo:rustc-link-lib=c++, leaving C++ stdlib symbols from ONNX Runtime unresolved)

iOS deployment target: 13.0 → 16.0

⚠️ This is a user-visible change: devices running iOS 13–15 will no longer be supported.

Xcode 26 no longer ships the Swift back-deployment compatibility libraries (swiftCompatibility56, swiftCompatibilityConcurrency), which are needed when targeting iOS < 16. Without bumping the deployment target, the linker fails with undefined symbols for these libraries.

Updated in:

  • project.pbxproj (all 3 build configurations)
  • project.yml
  • Podfile
  • tauri.conf.json — added "minimumSystemVersion": "16.0" to the iOS bundle config so Tauri CLI correctly propagates the deployment target to swift-rs during the Cargo build

No changes to release.yml or desktop-build.yml since those don't include iOS build jobs.

Review & Testing Checklist for Human

  • Confirm the iOS 16.0 minimum deployment target is acceptable. This PR drops support for iOS 13–15. This was required by Xcode 26 (no Swift back-deployment libs), but verify this aligns with your user base expectations.
  • Verify macos-26-xlarge runner availability for the org — if your GitHub plan doesn't include macOS 26 large runners, jobs will queue indefinitely. Fallback would be macos-15-xlarge with xcode-version: '26'.
  • Trigger a test iOS build on this branch (e.g. comment testflight build) to confirm the full pipeline succeeds end-to-end with Xcode 26.2. CI is still running — the ONNX Runtime source build takes ~90 min on cache miss.
  • Check for new build warnings from the iOS 26 SDK — the Xcode 16→26 jump is significant and may surface new deprecations.

Notes

  • The first build after merge will be slow (~90 min) due to ONNX Runtime rebuilding from source (cache miss from the new Xcode version key).
  • The release.yml build-tauri job only builds macOS desktop + Linux, not iOS, so it was intentionally left unchanged.

Link to Devin run: https://app.devin.ai/sessions/fc1cbb39e9d44ab68e16b78e917d46fe
Requested by: @AnthonyRonning

Summary by CodeRabbit

  • Chores
    • Updated build environment configurations to use newer macOS and Xcode versions.
    • Updated related build cache settings for mobile and TestFlight deployments.
    • Bumped iOS minimum deployment target from 13.0 to 16.0.

- Update runner from macos-latest-xlarge to macos-26-xlarge for both
  mobile-build and testflight-on-comment workflows
- Update Xcode version from 16.4 to 26.2 (includes iOS 26 SDK)
- Resolves ITMS-90725 SDK version warning from App Store Connect
  requiring iOS 26 SDK by April 28, 2026

Co-Authored-By: unknown <>
@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented Feb 25, 2026

Deploying maple with  Cloudflare Pages  Cloudflare Pages

Latest commit: dfd3d2c
Status: ✅  Deploy successful!
Preview URL: https://7b1d01fd.maple-ca8.pages.dev
Branch Preview URL: https://devin-1772052170-update-xcod.maple-ca8.pages.dev

View logs

Comment thread .github/workflows/mobile-build.yml Outdated

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

Copilot Autofix

AI 2 months ago

In general, the problem is fixed by explicitly setting a permissions: block in the workflow to restrict the GITHUB_TOKEN to the minimal required scopes, instead of relying on potentially broad repository defaults. This can be done at the workflow root (affecting all jobs without their own permissions) or per job.

For this specific workflow, the build-ios job only needs to read repository contents (for actions/checkout and cache key hashing). None of the steps push commits, create releases, or modify issues/PRs. Therefore, the safest and simplest fix is to add a permissions: block at the workflow root level (just under name: or under on:) that sets contents: read. This documents the intended usage and constrains the GITHUB_TOKEN for all current and future jobs unless they override it.

Concretely, in .github/workflows/mobile-build.yml, add:

permissions:
  contents: read

at the top workflow level, e.g., between name: Mobile App CI and on:. No imports or other changes are required.


Suggested changeset 1
.github/workflows/mobile-build.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/mobile-build.yml b/.github/workflows/mobile-build.yml
--- a/.github/workflows/mobile-build.yml
+++ b/.github/workflows/mobile-build.yml
@@ -1,5 +1,8 @@
 name: Mobile App CI
 
+permissions:
+  contents: read
+
 on:
   push:
     branches: [ master ]
EOF
@@ -1,5 +1,8 @@
name: Mobile App CI

permissions:
contents: read

on:
push:
branches: [ master ]
Copilot is powered by AI and may make mistakes. Always verify output.
devin-ai-integration[bot]

This comment was marked as resolved.

Include Xcode version in cache key to avoid reusing stale binaries
compiled with the old iOS 18 SDK (Xcode 16.4).

Co-Authored-By: unknown <>
Xcode 26.2 no longer ships Swift back-deployment compatibility libraries
(swiftCompatibility56, swiftCompatibilityConcurrency, swiftCompatibilityPacks)
needed for iOS < 16. Bumping the minimum deployment target to iOS 16.0
resolves the undefined symbol linker errors.

Updated in project.yml, project.pbxproj (all 3 build configs), and Podfile.

Co-Authored-By: unknown <>
@AnthonyRonning
Copy link
Copy Markdown
Contributor

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 25, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 25, 2026

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Two GitHub Actions workflow files are updated to target newer macOS and Xcode environments. The macOS runner is changed from macos-latest-xlarge to macos-26-xlarge, Xcode version is upgraded from 16.4 to 26.2, and ONNX runtime cache keys are modified to align with the new Xcode configuration.

Changes

Cohort / File(s) Summary
CI Workflow Infrastructure
.github/workflows/mobile-build.yml, .github/workflows/testflight-on-comment.yml
Updated macOS runner from macos-latest-xlarge to macos-26-xlarge, upgraded Xcode from version 16.4 to 26.2, and modified ONNX runtime cache keys to include xcode26.2 suffix for environment alignment.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Possibly related PRs

Poem

🐰 Hop along, workflows so fine,
Xcode twenty-six, macOS align,
Cache keys dance with version new,
CI pipelines refresh their brew! ✨

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title directly and accurately summarizes the main changes: updating iOS builds to use Xcode 26.2 and iOS 26 SDK, which is the core objective of the pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch devin/1772052170-update-xcode-ios26-sdk

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

The Rust/Cargo build process compiles Swift bridge code (via swift-rs)
using a deployment target derived from the Rust target triple, which
defaults to a very old iOS version. This causes the Swift compiler to
emit references to swiftCompatibility back-deployment libraries that
Xcode 26.2 no longer ships.

Setting IPHONEOS_DEPLOYMENT_TARGET=16.0 in the build environment ensures
the Swift bridge code is compiled without these back-deployment references.

Co-Authored-By: unknown <>
coderabbitai[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

When cargo config overrides ort-sys link metadata, the build script's
cargo:rustc-link-lib=c++ is suppressed. This adds explicit libc++ linking
to resolve C++ stdlib symbol errors from ONNX Runtime.

Co-Authored-By: unknown <>
Copy link
Copy Markdown
Contributor Author

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

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

Devin Review found 1 new potential issue.

View 12 additional findings in Devin Review.

Open in Devin Review

Comment thread .github/workflows/mobile-build.yml Outdated
rustc-link-lib is only valid under [target.<triple>.<links>] sub-tables,
not directly under [target.<triple>]. Moved c++ into the existing
.onnxruntime sections.

Co-Authored-By: unknown <>
@AnthonyRonning
Copy link
Copy Markdown
Contributor

@TestFlight build

@github-actions
Copy link
Copy Markdown
Contributor

🚀 TestFlight deployment triggered! Check the Actions tab for progress.

@github-actions
Copy link
Copy Markdown
Contributor

❌ TestFlight deployment failed. Check the workflow logs for details.

@AnthonyRonning AnthonyRonning merged commit 2323480 into master Feb 26, 2026
14 checks passed
@AnthonyRonning AnthonyRonning deleted the devin/1772052170-update-xcode-ios26-sdk branch February 26, 2026 01:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants