diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 25559866dd..aa54de2408 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,12 +1,12 @@
[versions]
-kotlin = "1.9.21"
+kotlin = "1.9.22"
kotlinx-coroutines = "1.7.3"
kotlinx-serialization = "1.6.2"
androidx-activity = "1.8.2"
androidx-compose-ui = "1.5.4"
jbCompose = "1.5.11"
lint = "31.2.1"
-zipline = "1.7.0"
+zipline = "1.8.0"
coil = "3.0.0-alpha02"
okio = "3.7.0"
ktor = "2.3.7"
@@ -38,7 +38,7 @@ buildConfigPlugin = "com.github.gmazzo:gradle-buildconfig-plugin:3.1.0"
androidx-activity = { module = "androidx.activity:activity", version.ref = "androidx.activity" }
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx.activity" }
androidx-appCompat = { module = "androidx.appcompat:appcompat", version = "1.6.1" }
-androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.7"
+androidx-compose-compiler = "androidx.compose.compiler:compiler:1.5.8"
androidx-compose-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "androidx-compose-ui" }
androidx-compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "androidx-compose-ui" }
androidx-core = { module = "androidx.core:core-ktx", version = "1.12.0" }
@@ -50,7 +50,7 @@ androidx-test-uiautomator = "androidx.test.uiautomator:uiautomator:2.2.0"
google-material = { module = "com.google.android.material:material", version = "1.11.0" }
-jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.4"
+jetbrains-compose-compiler = "org.jetbrains.compose.compiler:compiler:1.5.7.1"
jetbrains-compose-gradlePlugin = { module = "org.jetbrains.compose:compose-gradle-plugin", version.ref = "jbCompose" }
jetbrains-compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "jbCompose" }
jetbrains-compose-material = { module = "org.jetbrains.compose.material:material", version.ref = "jbCompose" }
@@ -83,6 +83,6 @@ ktor-engine-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "kto
turbine = "app.cash.turbine:turbine:1.0.0"
ktlint = "com.pinterest.ktlint:ktlint-cli:1.1.1"
googleJavaFormat = "com.google.googlejavaformat:google-java-format:1.19.2"
-poko-gradlePlugin = "dev.drewhamilton.poko:poko-gradle-plugin:0.15.1"
+poko-gradlePlugin = "dev.drewhamilton.poko:poko-gradle-plugin:0.15.2"
lint-core = { module = "com.android.tools.lint:lint", version.ref = "lint" }
diff --git a/redwood-treehouse-host/src/commonMain/kotlin/app/cash/redwood/treehouse/TreehouseApp.kt b/redwood-treehouse-host/src/commonMain/kotlin/app/cash/redwood/treehouse/TreehouseApp.kt
index 2768c5acd9..1b83c8b32f 100644
--- a/redwood-treehouse-host/src/commonMain/kotlin/app/cash/redwood/treehouse/TreehouseApp.kt
+++ b/redwood-treehouse-host/src/commonMain/kotlin/app/cash/redwood/treehouse/TreehouseApp.kt
@@ -17,6 +17,8 @@ package app.cash.redwood.treehouse
import app.cash.zipline.EventListener as ZiplineEventListener
import app.cash.zipline.Zipline
+import app.cash.zipline.loader.DefaultFreshnessCheckerNotFresh
+import app.cash.zipline.loader.FreshnessChecker
import app.cash.zipline.loader.LoadResult
import app.cash.zipline.loader.ManifestVerifier
import app.cash.zipline.loader.ZiplineCache
@@ -159,6 +161,7 @@ public class TreehouseApp private constructor(
applicationName = spec.name,
manifestUrlFlow = spec.manifestUrl,
serializersModule = spec.serializersModule,
+ freshnessChecker = spec.freshnessChecker,
) { zipline ->
spec.bindServices(zipline)
}
@@ -239,6 +242,9 @@ public class TreehouseApp private constructor(
public open val serializersModule: SerializersModule
get() = EmptySerializersModule()
+ public open val freshnessChecker: FreshnessChecker
+ get() = DefaultFreshnessCheckerNotFresh
+
/**
* Returns true to only load code from the network. Otherwise, this will recover from
* unreachable network code by loading code from the cache or the embedded file system.
diff --git a/samples/emoji-search/launcher/src/commonMain/kotlin/com/example/redwood/emojisearch/launcher/EmojiSearchAppSpec.kt b/samples/emoji-search/launcher/src/commonMain/kotlin/com/example/redwood/emojisearch/launcher/EmojiSearchAppSpec.kt
index 66f1833d62..008821edf9 100644
--- a/samples/emoji-search/launcher/src/commonMain/kotlin/com/example/redwood/emojisearch/launcher/EmojiSearchAppSpec.kt
+++ b/samples/emoji-search/launcher/src/commonMain/kotlin/com/example/redwood/emojisearch/launcher/EmojiSearchAppSpec.kt
@@ -17,6 +17,8 @@ package com.example.redwood.emojisearch.launcher
import app.cash.redwood.treehouse.TreehouseApp
import app.cash.zipline.Zipline
+import app.cash.zipline.ZiplineManifest
+import app.cash.zipline.loader.FreshnessChecker
import com.example.redwood.emojisearch.treehouse.EmojiSearchPresenter
import com.example.redwood.emojisearch.treehouse.HostApi
import com.example.redwood.emojisearch.treehouse.emojiSearchSerializersModule
@@ -29,6 +31,11 @@ class EmojiSearchAppSpec(
override val name = "emoji-search"
override val serializersModule = emojiSearchSerializersModule
+ override val freshnessChecker: FreshnessChecker
+ get() = object : FreshnessChecker {
+ override fun isFresh(manifest: ZiplineManifest, freshAtEpochMs: Long) = true
+ }
+
override fun bindServices(zipline: Zipline) {
zipline.bind("HostApi", hostApi)
}