Attendees: Joannis, Robbert, Finagolfin, Marc, Evan, Mishal, Gabriele, Andriy, Mads
Note-takers: Robbert, Joannis (merged)
Agenda
- Android NDK LTS transition
- CI and Android Emulator testing
- LLVM / LLDB state and debugging
- IDE support
- Lower Android API level support
- 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
swiftlangworkflows.
- 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/llvmis 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 mainandnextClang often incompatible with Swift until re-branching.
- Upstream LLVM
Debugging
- Swift debugging issues should:
- Be filed on
swiftlang/llvm. - Be fixed upstream in LLVM where possible.
- Be filed on
- 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_spawnmethods need fixing.
- Remaining
Action Items
- Contributors: Submit patches for missing
posix_spawnsupport. - 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.