Skip to content

Releases: JuulLabs/kable

0.33.1

27 Jun 07:49
ee0182c

Choose a tag to compare

  • Ensure teardown is completed when observation coroutines are canceled (#699), special thanks to @mmeisel for the contribution

Logo Apple

  • Cast to NSNumber for determining if advertisement is connectable (#700), special thanks to @R4leven for the bug report

🧰 Maintenance

  • Update plugin maven-publish to v0.29.0 (#701)
  • Update Gradle documentation w/ new Maven coordinate (#694)

0.33.0

18 Jun 20:27
f19edf0

Choose a tag to compare

Important

Kable's Maven artifact IDs have changed (prefixed with kable-):

kotlin {
  sourceSets {
    commonMain.dependencies {
      implementation("com.juul.kable:kable-core:${kableVersion}")
      implementation("com.juul.kable:kable-exceptions:${kableVersion}")
      implementation("com.juul.kable:kable-log-engine-khronicle:${kableVersion}")
    }
  }
}

Kable's package names were not changed, only the Maven coordinates; you should only need to update your Gradle configuration (e.g. libs.versions.toml).

Kotlin 2.0.0 (K2) Upgrade

Kable is now built against Kotlin 2.0.0 (K2). 🎉

Note

With this upgrade, the Kotlin compiler became more restrictive with expect/actual declarations, as a result, some Kable APIs have changed:

  • Advertisement interfaces (e.g. AndroidAdvertisement, CoreBluetoothAdvertisement, etc) have been consolidated to a common PlatformAdvertisement
  • Scanner interface now defines a generic type for advertisements it will emit: Scanner<PlatformAdvertisement>

For most users, these changes should not impact your code. Some notable instances where you'll need to make code changes:

If you hold a reference to a Scanner in a variable or property, you'll need to change Scanner to use the PlatformScanner type alias, or specify the generic type explicitly, for example:

val scanner: PlatformScanner // or...
val scanner: Scanner<PlatformAdvertisement>

If you have any classes that implement the Scanner interface, you'll need to change the interface to PlatformScanner (or Scanner<PlatformAdvertisement>) and change the overridden type of the advertisements property to PlatformAdvertisement, for example:

class ExampleScanner(..) : PlatformScanner {
    override val advertisements: Flow<PlatformAdvertisement> = ..
}

🚀 Changes

  • Update dependency org.jetbrains.kotlin.multiplatform to v2 (#683)
  • Replace Tuulbox logging w/ Khronicle (#690)
  • Prefix Maven artifacts with kable- (#692)
  • Remove log-engine-tuulbox module (#689)

🧰 Maintenance

  • Update plugin android-library to v8.5.0 (#693)
  • Update tuulbox to v8 (major) (#687)
  • Update dependency gradle to v8.8 (#691)
  • Update tuulbox to v7.3.0 (#686)
  • Update Gradle documentation w/ new Maven coordinate (#694)

0.32.0

03 Jun 16:52
ad45bd3

Choose a tag to compare

Logo Android

  • Provide ability to pre-conflate scanned advertisements (#684), special thanks to @djweber for the contribution

🧰 Maintenance

  • Update plugin android-library to v8.4.1 (#674, #682)
  • Update coroutines to v1.8.1 (#678)
  • Migrate to gradle/actions/setup-gradle (#680)
  • Update dependency com.juul.khronicle:khronicle-core to v0.3.0 (#676)
  • Update dependency org.jetbrains.kotlin.multiplatform to v1.9.24 (#675)
  • Update dependency androidx.core:core-ktx to v1.13.1 (#671, #673)
  • Update gradle/wrapper-validation-action action to v3 (#672)
  • Update atomicfu to v0.24.0 (#670)

0.31.1

18 Apr 07:59
7a58126

Choose a tag to compare

Logo Apple

  • Watch for connection loss during connect (#668), thanks to @cksgud for reporting and @muellnes for testing/validating the fix

🧰 Maintenance

  • Update plugin android-library to v8.3.2 (#667)
  • Update dependency com.juul.khronicle:khronicle-core to v0.2.0 (#666)

0.31.0

04 Apr 23:56
b500995

Choose a tag to compare

  • Fix crash in peripheral <init> when parent job is already complete (#665)
  • Use Tuulbox's broadcastReceiverFlow for bluetooth state (#658)

Logo JavaScript

  • Re-align the filter shape to work correctly with the browser API (#661)

🧰 Maintenance

  • Update plugin kotlinter to v4.3.0 (#664)
  • Update dependency gradle to v8.7 (#663)
  • Update plugin android-library to v8.3.1 (#660)
  • Update dependency com.benasher44:uuid to v0.8.4 (#659)

0.30.0

21 Mar 18:29
ff220fc

Choose a tag to compare

  • Log engine for Khronicle logging (#644)

Logo Android

  • Provide write failure as property of exception (#648), thanks to @ArtemBurmistrov for reporting the issue
  • Make AndroidAdvertisement parcelable (#652), thanks to @eddieSullivan for reporting the issue

🧰 Maintenance

  • Explicitly pull in AtomicFU dependency (#656)
  • Disable AndroidGradlePluginVersion lint check (#657)
  • Update plugin maven-publish to v0.28.0 (#655)
  • Simplify binary-compatibility-validator setup (#651)
  • Replace deprecated Gradle buildDir (#650)
  • Update AtomicFU configuration (#649)
  • Remove explicit POM_ARTIFACT_ID configuration (#645)
  • Update dependency org.jetbrains.kotlin.multiplatform to v1.9.23 (#646)
  • Update plugin dokka to v1.9.20 (#647)
  • Update plugin android-library to v8.3.0 (#640)
  • Update binary-compatibility-validator to v0.14.0 (#639)
  • Remove workaround for jvmToolchain not being honored pre AGP 8.1.0-alpha09 (#636)
  • Update plugin kotlinter to v4.2.0 (#623)

0.29.1

26 Feb 18:31
75b058b

Choose a tag to compare

Logo Android

  • Defensive copying in Android legacy, deprecated BluetoothGattCallback functions (#635)

🧰 Maintenance

  • Update tuulbox to v7.2.0 (#628)
  • Update coroutines to v1.8.0 (#633)
  • Update release-drafter/release-drafter action to v6 (#631)
  • Update dependency gradle to v8.6 (#630)
  • Update gradle/wrapper-validation-action action to v2 (#629)

0.29.0

12 Feb 07:13
c3c8adc

Choose a tag to compare

  • Add no-op JVM target (#626), special thanks to @konpach for the contribution

🧰 Maintenance

  • Update plugin android-library to v8.2.2 (#619, #625)
  • Update dependency org.jetbrains.kotlinx:atomicfu to v0.23.2 (#624)
  • Update dependency org.jetbrains.kotlin.multiplatform to v1.9.22 (#615)
  • Update plugin maven-publish to v0.27.0 (#616, #621)
  • Update tuulbox to v7.0.1 (#620)
  • Update plugin kotlinter to v4.1.1 (#618)

0.28.0

03 Jan 19:04
5c2e544

Choose a tag to compare

  • Make LoggingBuilder public (#608), special thanks to @degill for the contribution
  • Fix IOException to not drop cause (#598)

Logo Android

  • Android 14 (compile SDK 34) and BroadcastReceiver changes (#582)
  • Deprecate broadcastReceiverFlow for future removal from public API (#583)

🧰 Maintenance

  • Add kotlin-js-store to version control (#584)
  • Remove explicit enabling of inline classes (#600)
  • Update actions/setup-java action to v4 (#609)
  • Update dependency com.benasher44:uuid to v0.8.2 (#596)
  • Update dependency gradle to v8.5 (#585, #605)
  • Update dependency org.jetbrains.kotlin.multiplatform to v1.9.21 (#593, #601)
  • Update dependency org.jetbrains.kotlinx:atomicfu to v0.23.1 (#602)
  • Update plugin android-library to v8.2.0 (#581, #594, #597, #606)
  • Update plugin dokka to v1.9.10 (#589)
  • Update plugin kotlinter to v4.1.0 (#587, #603)
  • Use default hierarchy template (#599)

0.28.0-rc

27 Sep 16:41
499ad9d

Choose a tag to compare

⚠️ Release candidate

This release is considered a release candidate because it contains a major internal refactor and should be tested thoroughly before being used in production.

Please report any issues.

🚀 Changes

The error propagation for Peripheral.connect() has been improved: previously, during some edge-cases, connect() would throw CancellationException on failure rather than the underlying cause of the failure. connect() should now only throw CancellationException when explicitly cancelled by the calling code.

  • Propagate failures from connect as failures rather than cancellation (#573, #572, #578, #579, #580)
  • Provide additional details to data processor (#538)

Logo Android

  • Throw LocationManagerUnavailableException when LocationManager is unavailable (#576)
  • Throw GattRequestRejectedException when setCharacteristicNotification fails (#575)
  • Add support for autoConnect (#563, #574), thanks to @ToysoftInc, @matsch82, and @JonatanPlesko for reporting/nudging this effort along
  • Use SharedRepeatableAction for managing connect process (#516), this is a step in fixing #378 — thanks to @tomnovotny7 for reporting #378 and @solvek for reporting related issue #567

🧰 Maintenance

  • Update actions/checkout action to v4 (#570)
  • Update plugin kotlinter to v3.16.0 (#565)
  • Update tuulbox to v6.5.0 (#569)
  • Update dependency androidx.core:core-ktx to v1.12.0 (#564)