Skip to content

Contributing

Reporting bugs

Open an issue on GitHub with:

  • Your platform target (Android API level, iOS version, macOS version) and Kotlin/Gradle versions.
  • A minimal reproducer — ideally a BackgroundWorker + a WorkRequest + the observed behaviour.
  • The Kermit log output around the failure (search for Backgrounder/<taskId> lines).

Building locally

./gradlew check                                  # all unit tests
./gradlew :backgrounder:linkDebugFrameworkIosArm64     # iOS device framework
./gradlew :backgrounder:assembleBackgrounderXCFramework # KMMBridge artifact

The repo follows the conventions in CLAUDE.md:

  • Versions live in gradle/libs.versions.toml — single source of truth. Web-search the latest stable before bumping any version.
  • Kotlin is pinned at the highest version SKIE supports — currently 2.3.20 with SKIE 0.10.11. SKIE compatibility wins over §2's nominal floor.
  • Apple platform-name casing is preserved in identifiersIOSCoroutineBridge, not IosCoroutineBridge. See CLAUDE.md §3.
  • internal by default; widen visibility only when needed.
  • Every suspend fun reachable from Swift carries @Throws(CancellationException::class); every public method carries @ObjCName(swiftName = ...).

Building the docs site

python3 -m venv .venv
.venv/bin/pip install -r docs/requirements.txt
.venv/bin/mkdocs serve                # live preview at http://localhost:8000
.venv/bin/mkdocs build --strict       # CI gate — fails on broken links

The site source is in docs/; structure is locked in by mkdocs.yml's explicit nav: (no auto-discovery). API reference is generated by Dokka into docs/api/ before mkdocs builds.

Pull requests

PRs run the full CI pipeline (build + tests across all targets, mkdocs build with --strict). Doc breakage in a PR fails CI. Address it before requesting review.