Swift Android Workgroup Meeting Notes - December 17th, 2025

Attendees: Joannis, Robbert, Finagolfin, Marc, Evan, Mishal, Gabriele, Andriy, Mads
Note-takers: Robbert, Joannis (merged)


Agenda

  1. Android NDK LTS transition
  2. CI and Android Emulator testing
  3. LLVM / LLDB state and debugging
  4. IDE support
  5. Lower Android API level support
  6. Swift 6.3 snapshots

1. Android NDK LTS (NDK 30)

Discussion

  • A new NDK LTS (30) is expected to be the next release.
  • No guarantees or release schedule from Google yet.
  • Key concern: C++ runtimes on Android are not ABI-stable across NDK versions.
    • Swift runtime must match the C++ runtime users link against.
  • Question raised:
    What happens if Google releases a new NDK LTS mid–Swift SDK release?
    • Risk of runtime crashes or undefined behavior for users on mismatched NDKs.
  • Possible approaches discussed:
    • Separate Swift SDKs per NDK LTS (similar to Linux distro-specific SDKs).
    • SwiftPM assistance:
      • Detect NDK mismatches.
      • Warn users about incompatibilities.
  • Marc highlighted a practical motivator for upgrading:
    • Availability annotations require newer NDKs.

Decisions / Direction

  • Acknowledge that NDK alignment is a hard requirement due to ABI concerns.
  • Treat NDK LTS versions as first-class compatibility boundaries.

Action Items

  • Marc / Evan: Clarify Swift runtime ↔ C++ runtime compatibility guarantees.
  • Joannis / WG: Explore SwiftPM-based detection or warnings for NDK mismatches.
  • WG: Consider formal policy for “one Swift SDK per NDK LTS”.

2. Transition CI to the Next LTS NDK

Current State

  • NDK 27:
    • Does not support availability annotations.
  • NDK 28 / 29:
    • Work correctly with availability annotations.
    • Differences from 27 appear small (≈4 validation suite failures, mostly header changes).
  • Public commitments already exist to support LTS NDKs.

Proposed Strategy

  • Gradual CI transition:
    • NDK 27 → 28 → 29
    • Be fully ready when NDK 30 betas ship.
  • LTS cadence appears to be ~every 2 years.

Action Items

  • CI owners: Begin migrating CI builds to NDK 28.
  • WG: Track validation failures between NDK versions.
  • WG: Document public commitments and expectations around LTS support.

3. More Testing with the Android Emulator

Emulators Considered

  • Cuttlefish (new)
  • Goldfish (official Android SDK emulator)

CI Constraints

  • Linux CI:
    • Likely lacks nested virtualization required for performant QEMU-based emulation.
  • macOS CI:
    • Runs on bare metal (similar to EC2 Mac instances).
    • Supports virtualization.

Discussion

  • Linux Dockerfiles would need nested virtualization to support Android emulation on arm64.
  • Mishal prefers proof that Linux CI is insufficient before moving to macOS.
  • Marc’s Skip Android GitHub Action:
    • Already supports launching emulators on macOS and Linux.
    • Needs upstreaming into swiftlang workflows.
  • Emulator-based tests currently require workarounds:
    • Manual copying of resource files.
    • Special flags when combining Swift Testing and XCTest.
  • Free-tier CI runners appear sufficient based on Skip’s usage.

Action Items

  • Mishal: Attempt nested virtualization on Linux CI via a test PR.
  • Marc: Prepare Skip Android Action for upstreaming.
  • WG: Collect concrete failure data for Android Emulator on Linux.

4. LLVM / LLDB and Debugging

LLVM State

  • swiftlang/llvm is significantly behind upstream LLVM.
  • LLVM stable branches yearly (around July), then adapted for Swift:
    • Necessary because upstream LLVM frequently breaks Swift.
  • Branching model:
    • Upstream LLVM main
    • → merged into swiftlang/llvm-project:next
    • main and next Clang often incompatible with Swift until re-branching.

Debugging

  • Swift debugging issues should:
    1. Be filed on swiftlang/llvm.
    2. Be fixed upstream in LLVM where possible.
  • Upstream LLDB works, but:
    • Swift symbol mangling issues remain.
  • Google maintains its own LLVM/LLDB forks.
  • Android’s LLDB server should be usable.
    • Missing piece: a Swift-aware LLDB client.
  • Current state:
    • LLDB on Swift+Android is unstable.
    • Deadlocks and assertion failures common.
    • Many fixes exist upstream but are not yet merged.

Ideal Debugging Experience

  • One-click flow:
    • Run app
    • Push LLDB server
    • Auto-attach debugger

Action Items

  • Gabriele / WG: File Swift debugging issues against swiftlang/llvm.
  • WG: Track and upstream relevant LLVM/LLDB fixes.
  • WG: Investigate feasibility of a Swift-specific LLDB client for Android.

5. IDE Support

Current Landscape

  • JetBrains:
    • Has closed-source Swift support used internally (Kotlin Multiplatform).
    • Open to a shared core, but:
      • Large effort.
      • Requires extracting closed-source code.
    • Prioritization mismatch:
      • JetBrains: Kotlin → iOS
      • Swift WG: Swift → Android
  • Android Studio:
    • Built by Google, not JetBrains.
    • Poor experience today:
      • Suggests incorrect third-party Swift plugins.
  • VS Code:
    • Most promising short-term option.
    • Open source.
    • Existing Swift plugin.
    • Easier LLDB experimentation.

Outlook

  • Long-term ideal: a single, fully supported IDE.
  • Short-term reality: incremental improvements, likely via VS Code.

Action Items

  • WG: Focus near-term IDE efforts on VS Code.
  • WG: Explore LLDB stability improvements specifically for VS Code workflows.

6. Lower Android API Level Support

Status

  • No decision yet.
  • Mads interested in supporting API level 24.
  • Blockers:
    • Remaining posix_spawn methods need fixing.

Action Items

  • Contributors: Submit patches for missing posix_spawn support.
  • WG: Re-evaluate API 24 support after patches land.

7. Swift 6.3 Snapshots

Update

  • Initial Swift 6.3 snapshot published.
  • Android was temporarily skipped in late-November builds due to failing tests.
  • Thanksgiving rush caused exceptions:
    • Two platforms (including Android) skipped so toolchains could still ship.
  • CI was passing again around the meeting time.

Expectation

  • Android Swift 6.3 snapshots should be functional again.

Action Items

  • WG: Monitor Android snapshot stability.
  • WG: Confirm Android inclusion in subsequent nightly snapshots.

Summary of Key Action Items

  • Define and document NDK LTS compatibility policy.
  • Begin CI migration toward newer NDKs (28 → 29).
  • Validate Android Emulator feasibility on Linux CI.
  • Upstream emulator-related CI tooling.
  • Improve Swift+Android debugging by upstreaming LLVM/LLDB fixes.
  • Focus IDE efforts on VS Code in the short term.
  • Revisit lower API level support after technical blockers are addressed.