Skip to content

Commit afdd96b

Browse files
committed
Add end code for migrate room
1 parent ef0afeb commit afdd96b

27 files changed

Lines changed: 316 additions & 230 deletions

File tree

migrate-room/androidApp/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ dependencies {
8888
implementation(libs.androidx.lifecycle.viewmodel)
8989
debugImplementation(libs.compose.ui.tooling)
9090

91-
// TODO switch this dependency to KMP-ready version
9291
implementation(libs.androidx.room.runtime)
9392

9493
implementation(libs.hilt.android)

migrate-room/androidApp/src/main/kotlin/com/example/fruitties/kmptutorial/android/di/DatabaseModule.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ package com.example.fruitties.kmptutorial.android.di
1717

1818
import android.content.Context
1919
import com.example.fruitties.kmptutorial.android.database.AppDatabase
20-
import com.example.fruitties.kmptutorial.android.database.buildAppDatabase
21-
import com.example.fruitties.kmptutorial.android.database.getDatabaseBuilder
20+
import com.example.fruitties.kmptutorial.shared.appDatabase
2221
import dagger.Module
2322
import dagger.Provides
2423
import dagger.hilt.InstallIn
@@ -32,13 +31,13 @@ internal object DatabaseModule {
3231

3332
@Provides
3433
@Singleton
35-
fun providesAppDatabase(@ApplicationContext context: Context): AppDatabase {
36-
return getDatabaseBuilder(context).buildAppDatabase()
37-
}
34+
fun providesAppDatabase(@ApplicationContext context: Context): AppDatabase =
35+
appDatabase(context)
3836

3937
@Provides
4038
fun providesFruittieDao(appDatabase: AppDatabase) = appDatabase.fruittieDao()
4139

4240
@Provides
4341
fun providesCartDao(appDatabase: AppDatabase) = appDatabase.cartDao()
44-
}
42+
}
43+

migrate-room/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ plugins {
2626
alias(libs.plugins.hilt) apply false
2727
alias(libs.plugins.kotlinMultiplatform) apply false
2828
alias(libs.plugins.androidKotlinMultiplatformLibrary) apply false
29-
// TODO add skie plugin
3029
alias(libs.plugins.skie) apply false
3130
}
3231

migrate-room/gradle/libs.versions.toml

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,28 @@
1616
min-sdk = "26"
1717
target-sdk = "35"
1818
compile-sdk = "35"
19-
agp = "8.9.0-alpha09"
19+
agp = "8.9.0"
2020
androidx-activityCompose = "1.10.0"
21-
androidx-room = "2.7.0-alpha12"
21+
androidx-room = "2.7.0-rc02"
2222
androidx-lifecycle = "2.8.7"
23-
kotlin = "2.1.0"
23+
kotlin = "2.1.10"
2424
kotlinx-coroutines = "1.10.1"
25-
ksp = "2.1.0-1.0.29"
25+
ksp = "2.1.10-1.0.31"
2626
ktorVersion = "3.0.2"
2727
spotless = "7.0.2"
28-
composeBom = "2025.01.00"
28+
composeBom = "2025.03.00"
2929
ktlint = "1.3.1"
3030
hilt = "2.53.1"
3131
androidx-testCore = "1.6.1"
3232
androidx-testRunner = "1.6.2"
3333
androidx-junit = "1.2.1"
3434
turbine = "1.2.0"
3535
androidx-sqlite = "2.5.0-alpha12"
36-
kotlinStdlib = "2.1.0"
37-
kotlinTest = "2.1.0"
3836
core = "1.6.1"
39-
skie = "0.10.0"
37+
skie = "0.10.1"
4038

4139
[libraries]
4240
# TODO add room-runtime and sqlite-bundled dependencies
43-
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "androidx-room" }
44-
androidx-sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "androidx-sqlite" }
45-
4641
hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" }
4742
hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt" }
4843
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" }
@@ -59,6 +54,8 @@ androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref =
5954
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "androidx-room" }
6055
androidx-lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel", version.ref = "androidx-lifecycle" }
6156
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
57+
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "androidx-room" }
58+
androidx-sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "androidx-sqlite" }
6259

6360
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
6461
ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktorVersion" }
@@ -73,8 +70,8 @@ androidx-test-core = { module = "androidx.test:core-ktx", version.ref = "android
7370
androidx-test-runner = { module = "androidx.test:runner", version.ref = "androidx-testRunner" }
7471
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" }
7572
turbine = { module = "app.cash.turbine:turbine", version.ref = "turbine" }
76-
kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlinStdlib" }
77-
kotlin-test = { group = "org.jetbrains.kotlin", name = "kotlin-test", version.ref = "kotlinTest" }
73+
kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" }
74+
kotlin-test = { group = "org.jetbrains.kotlin", name = "kotlin-test", version.ref = "kotlin" }
7875
androidx-core = { group = "androidx.test", name = "core", version.ref = "core" }
7976

8077
## Testing End ##
@@ -90,4 +87,4 @@ spotless = { id = "com.diffplug.spotless", version.ref = "spotless" }
9087
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
9188
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
9289
androidKotlinMultiplatformLibrary = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" }
93-
skie = { id = "co.touchlab.skie", version.ref = "skie" }
90+
skie = { id = "co.touchlab.skie", version.ref = "skie" }

migrate-room/iosApp/Fruitties.xcodeproj/project.pbxproj

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
2E8773602BC85C2400BF7C40 /* CartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E87735F2BC85C2400BF7C40 /* CartView.swift */; };
3232
7555FF83242A565900829871 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7555FF82242A565900829871 /* ContentView.swift */; };
3333
A41A39FB2CF793B600685993 /* ConcurrencyExtras in Frameworks */ = {isa = PBXBuildFile; productRef = A41A39FA2CF793B600685993 /* ConcurrencyExtras */; };
34+
D00226C22D9644DB004722DC /* Fruittie.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00226C12D9644DB004722DC /* Fruittie.swift */; };
35+
D00226C42D964519004722DC /* CartItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00226C32D964519004722DC /* CartItem.swift */; };
3436
/* End PBXBuildFile section */
3537

3638
/* Begin PBXContainerItemProxy section */
@@ -82,6 +84,8 @@
8284
7555FF7B242A565900829871 /* Fruitties.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Fruitties.app; sourceTree = BUILT_PRODUCTS_DIR; };
8385
7555FF82242A565900829871 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
8486
7555FF8C242A565B00829871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
87+
D00226C12D9644DB004722DC /* Fruittie.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fruittie.swift; sourceTree = "<group>"; };
88+
D00226C32D964519004722DC /* CartItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CartItem.swift; sourceTree = "<group>"; };
8589
/* End PBXFileReference section */
8690

8791
/* Begin PBXFrameworksBuildPhase section */
@@ -115,7 +119,6 @@
115119
1800B0DF2CBFFD6B0035D9C5 /* FruittiesTests */ = {
116120
isa = PBXGroup;
117121
children = (
118-
2DCC1BDE2D3EA2B60017AC11 /* Database */,
119122
18C09F4E2CC1591A00B22F47 /* Fake */,
120123
18C09F472CC1584700B22F47 /* Mock */,
121124
1800B0DA2CBFFD6B0035D9C5 /* AsyncStreamNSFetchRequestResultTests.swift */,
@@ -131,6 +134,8 @@
131134
children = (
132135
1830047D2CACE2C6001DF9CA /* FruittieRepository.swift */,
133136
183004912CB700C9001DF9CA /* CartRepository.swift */,
137+
D00226C12D9644DB004722DC /* Fruittie.swift */,
138+
D00226C32D964519004722DC /* CartItem.swift */,
134139
);
135140
path = Repository;
136141
sourceTree = "<group>";
@@ -221,13 +226,6 @@
221226
path = Utils;
222227
sourceTree = "<group>";
223228
};
224-
2DCC1BDE2D3EA2B60017AC11 /* Database */ = {
225-
isa = PBXGroup;
226-
children = (
227-
);
228-
path = Database;
229-
sourceTree = "<group>";
230-
};
231229
7555FF72242A565900829871 = {
232230
isa = PBXGroup;
233231
children = (
@@ -407,11 +405,13 @@
407405
183004822CACE30F001DF9CA /* ContentViewModel.swift in Sources */,
408406
183004922CB700CA001DF9CA /* CartRepository.swift in Sources */,
409407
1830047C2CACE2B0001DF9CA /* AppContainer.swift in Sources */,
408+
D00226C22D9644DB004722DC /* Fruittie.swift in Sources */,
410409
183004742CAC5744001DF9CA /* FruittieApi.swift in Sources */,
411410
183004802CACE2FD001DF9CA /* DataController.swift in Sources */,
412411
1885088B2CB99134003F8D5E /* main.swift in Sources */,
413412
183004762CACE153001DF9CA /* AsyncStream+NSFetchRequestResult.swift in Sources */,
414413
1830047A2CACE244001DF9CA /* FruittieView.swift in Sources */,
414+
D00226C42D964519004722DC /* CartItem.swift in Sources */,
415415
7555FF83242A565900829871 /* ContentView.swift in Sources */,
416416
);
417417
runOnlyForDeploymentPostprocessing = 0;
-36 KB
Binary file not shown.
Binary file not shown.
-129 KB
Binary file not shown.
Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,2 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2-
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="23605" systemVersion="24C101" minimumToolsVersion="Automatic" sourceLanguage="Swift" usedWithSwiftData="YES" userDefinedModelVersionIdentifier="">
3-
<entity name="CartItem" representedClassName="CartItem" syncable="YES" codeGenerationType="class">
4-
<attribute name="count" attributeType="Integer 64" minValueString="1" defaultValueString="1" usesScalarValueType="YES"/>
5-
<relationship name="fruittie" maxCount="1" deletionRule="Nullify" destinationEntity="Fruittie" inverseName="cartItem" inverseEntity="Fruittie"/>
6-
</entity>
7-
<entity name="Fruittie" representedClassName="Fruittie" syncable="YES" codeGenerationType="class">
8-
<attribute name="fullName" attributeType="String"/>
9-
<attribute name="name" attributeType="String"/>
10-
<relationship name="cartItem" optional="YES" maxCount="1" deletionRule="Cascade" destinationEntity="CartItem" inverseName="fruittie" inverseEntity="CartItem"/>
11-
</entity>
12-
</model>
2+
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="23605" systemVersion="24D81" minimumToolsVersion="Automatic" sourceLanguage="Swift" usedWithSwiftData="YES" userDefinedModelVersionIdentifier=""/>

migrate-room/iosApp/Sources/DI/AppContainer.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,15 @@
1515
*/
1616

1717
import Combine
18-
import CoreData
1918
import Foundation
19+
import sharedKit
2020

2121
class AppContainer: ObservableObject {
2222
let dataController: DataController
2323
let api: FruittieApi
2424
let fruittieRepository: FruittieRepository
2525
let cartRepository: CartRepository
2626

27-
var managedObjectContext: NSManagedObjectContext {
28-
dataController.container.viewContext
29-
}
30-
3127
init() {
3228
dataController = DataController()
3329
api = FruittieNetworkApi(
@@ -36,11 +32,11 @@ class AppContainer: ObservableObject {
3632
"https://android.github.io/kotlin-multiplatform-samples/fruitties-api"
3733
)!)
3834
fruittieRepository = DefaultFruittieRepository(
39-
managedObjectContext: dataController.container.viewContext,
35+
fruittieDao: dataController.database.fruittieDao(),
4036
api: api
4137
)
4238
cartRepository = DefaultCartRepository(
43-
managedObjectContext: dataController.container.viewContext
39+
cartDao: dataController.database.cartDao()
4440
)
4541
}
4642
}

0 commit comments

Comments
 (0)