Skip to content

research: upgrade to Tauri 2.12 and carry the Android tao patch - #1264

Draft
AnthonyRonning wants to merge 4 commits into
masterfrom
research/tauri-2.12
Draft

AnthonyRonning wants to merge 4 commits into
masterfrom
research/tauri-2.12

Conversation

@AnthonyRonning

@AnthonyRonning AnthonyRonning commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Why

Research's iOS app has to be built with Xcode 27 / the iOS 27 SDK: App Store Connect requires it from April 2027, and the iPhone Duo only runs apps full screen when they're built with the iOS 27.1 SDK. That SDK requires UIKit's scene life cycle. tao 0.37, which only Tauri 2.12 pulls in, is the first tao with working single-window scene support; Tauri 2.11 is pinned to tao 0.35, whose release builds crash at launch once a scene manifest is added (tauri-apps/tao#1340). Tauri 2.12 also carries the Xcode 27 fixes in tauri-cli and in the log/opener Swift entry points.

This is the bottom of a three-PR stack: Tauri 2.12 (this) → PR #1265 iOS scene adoption → PR #1266 Xcode 27.1 in CI. It keeps building with today's Xcode 26.5 pin.

Rebased on master after the CI rewrite and the removal of Research's Agent Mode. That removal dropped the dialog plugin, so this PR no longer bumps it. The previous push also carried build artifacts from the sign-in-with-apple plugin directory (.tauri/tauri-api, Package.resolved); they're gone.

What

  • Tauri crates: tauri 2.12.4; tauri-build/macros/codegen 2.7.3; tauri-runtime-wry 2.12.2; wry 0.57.0.
  • Plugins: log 2.10.1, updater 2.14.0, opener 2.7.2, os 2.4.0, fs 2.7.1. The JS packages match: @tauri-apps/cli 2.12.3, @tauri-apps/api 2.12.4.
  • Release age: every version is at least seven days old (bunfig minimumReleaseAge). Both lockfiles were regenerated from master's with targeted updates, and newer patch releases (tauri 2.12.5, wry 0.57.1 and others) were pinned back to the validated versions.
  • Kept pins: tauri-plugin-deep-link =2.4.7 stays for the Android callback regression. tauri-plugin-single-instance =2.4.0 stays only because 2.4.1+ needs deep-link 2.4.8+; there's now a comment saying so.
  • tao: patched from a vendored 0.37.1 instead of 0.35.2.
  • Android: Gradle wrapper 8.11.1 → 8.14.3, now with distributionSha256Sum. Tauri 2.12's Android library and plugins use the compilerOptions DSL, which needs Gradle 8.13+. AGP 8.10.1, Kotlin 1.9.25, SDK 36, NDK 27 and JDK 21 are unchanged.
  • Linux AppImage: tauri-cli 2.12 looks for target/.tauri/linuxdeploy-07333c6-<arch>.AppImage, a new versioned name. It no longer found the pinned wrapper, so it downloaded an unpinned linuxdeploy and ran it with tauri's embedded gtk plugin. That plugin sources /etc/os-release, which the Nix /usr sandbox leaves dangling, so the Linux AppImage build failed. The wrapper is now installed under the new name, so bundling stays on the flake-pinned linuxdeploy and plugins. tauri-cli now rewrites its plugin scripts in that cache on every build, so Maple stops writing its own copies there; the wrapper never runs them.

Validation

  • Locally: plan.py lint, and the deps-research, research-web, updates and agent-updates lanes pass.
  • macOS: cargo fmt --check, the local-deps check and cargo test --all-targets pass (85 + 3 tests).
  • Android: the patched tao passes cargo check --target aarch64-linux-android.
  • CI: ci-ok passes. The plan ran research-rust, research-web, research-ios, research-android, deps-research, updates, agent-updates and repo.
  • Linux AppImage fix: research-desktop-linux passed in PR #1266's ci:package evidence run, whose head includes this PR. It bundled with the pinned linuxdeploy. The Windows and Agent packaging lanes passed in the same run.

Needs a device or a release to confirm

None of the CI lanes runs the app.

  • Android: cold and warm cloud.opensecret.maple:// OAuth plus the payment App Link, with the app killed and with it running. This is where the tao patch matters.
  • Desktop updater behavior changes in Tauri 2.12 / updater 2.14:
    • macOS restarts after an update through open -n.
    • The Windows installer now closes the app with Restart Manager. tao exits on WM_ENDSESSION, so Maple's async agent shutdown is skipped; the agent's children are covered by the process-wrap job object.
    • Linux AppImages no longer bundle xdg-open or xdg-mime, so the host's copies are used. Tauri 2.12's native-Wayland change lives in its embedded gtk plugin, which Maple doesn't use: the pinned plugin still sets GDK_BACKEND=x11.
  • Follow-up, optional: tauri-cli 2.12 can bind updater signatures to the app version (tauri signer sign --app-version). macOS updater bundles signed by tauri build already carry it. The manual re-signs in scripts/ci/_common.sh don't, which still verifies because requireSignedVersion defaults to off. Passing the version there would let us turn that check on later.

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Maple development preview: https://fd298ab5.maple-ca8.pages.dev

Commit: ca8273138b36e8075c2a6495caa73e8cb120443a

Uses development API, billing, flags and PCR configuration. Cloudflare Access applies.

@AnthonyRonning AnthonyRonning changed the title research/tauri 2.12 research: upgrade to Tauri 2.12 and carry the Android tao patch Oct 25, 2026
AnthonyRonning and others added 4 commits October 29, 2026 02:27
Pristine copy of the crates.io release, without its standalone lockfile,
so the following commits show Maple's patches as reviewable diffs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tauri 2.12 pulls in tao 0.37, the first release with working single-window
UIScene support, which iOS 27 SDK builds require (UIKit aborts at launch
otherwise). It also carries the Xcode 27 fixes in tauri-cli and in the
Swift plugin entry points of log and opener.

- tauri 2.12.4, tauri-build/macros/codegen 2.7.3, tauri-runtime-wry 2.12.2,
  wry 0.57.0
- plugins: log 2.10.1, updater 2.14.0, opener 2.7.2, os 2.4.0, fs 2.7.1;
  deep-link and single-instance stay on their pins
- @tauri-apps/cli 2.12.3, @tauri-apps/api 2.12.4, JS plugins to match
- tao is patched from the vendored 0.37.1 copy instead of 0.35.2
- Android: Gradle wrapper 8.11.1 -> 8.14.3 (with its checksum); Tauri 2.12's
  Android library and plugins use the compilerOptions DSL, which needs
  Gradle 8.13+. AGP, Kotlin, SDK, NDK and JDK stay as they are.

All versions are at least seven days old (bunfig minimumReleaseAge).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tauri-apps/tao#1217 was closed by #1224, which only fixed the getType()
null case. tao 0.37 still unwraps getIntent/getAction and the ClipData and
EXTRA_STREAM conversions, so a null launch intent aborts the process across
JNI before tauri-plugin-deep-link sees OAuth or payment redirects. Re-apply
Maple's 0.35.2 patch minus the hunk upstream now covers; checked with
cargo check --target aarch64-linux-android.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tauri-cli 2.12 looks for target/.tauri/linuxdeploy-07333c6-<arch>.AppImage
instead of linuxdeploy-<arch>.AppImage. It no longer found the pinned
wrapper, so it downloaded an unpinned linuxdeploy and ran it with its
own embedded gtk plugin. That plugin sources /etc/os-release, which the
Nix /usr bind leaves dangling, and the AppImage step failed.

Install the wrapper under the new name. tauri-cli now rewrites its
embedded plugin scripts in the cache on every build, so stop writing
Maple's copies there; the wrapper never runs them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
pages-pr-1264 — ca827313 Deployed Oct 29, 2026 by github-actions[bot]
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.

1 participant