Skip to content

Commit

Permalink
Add iOS target
Browse files Browse the repository at this point in the history
  • Loading branch information
kirich1409 committed Jun 20, 2024
1 parent 4b26424 commit 6031fb0
Show file tree
Hide file tree
Showing 41 changed files with 869 additions and 7 deletions.
15 changes: 15 additions & 0 deletions compose-app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,17 @@ kotlin {

jvm()

listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "ComposeApp"
isStatic = true
}
}

sourceSets {
commonMain.dependencies {
implementation(projects.features.newsMain.ui)
Expand All @@ -36,6 +47,10 @@ kotlin {
androidMain.dependencies {
implementation(libs.koin.android)
}

iosMain.dependencies {
implementation(projects.core.platform)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import androidx.compose.ui.window.ComposeUIViewController
import dev.androidbroadcast.news.compose.NewsApp
import dev.androidbroadcast.news.core.NewsAppPlatform
import platform.UIKit.UIViewController

public fun MainViewController(): UIViewController {
val appPlatform = NewsAppPlatform()
appPlatform.start(
debug = true,
newsApiKey = "155ae65d7264461397c901103488c01e",
newsApiBaseUrl = "https://newsapi.org/v2/"
)
return ComposeUIViewController { NewsApp() }
}
11 changes: 11 additions & 0 deletions core/common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,17 @@ kotlin {

jvm()

listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "CoreCommon"
isStatic = true
}
}

sourceSets {
commonMain.dependencies {
api(libs.kotlinx.coroutines.core)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package dev.androidbroadcast.common

import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.MainCoroutineDispatcher

public class AppDispatchers(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package dev.androidbroadcast.common

import platform.Foundation.NSLog

public class PrintLogger(
) : Logger {
private fun printMessage(
level: String,
tag: String,
message: String
) {
NSLog("$level[$tag]: $message")
}

override fun d(
tag: String,
message: String
) {
printMessage("D", tag, message)
}

override fun e(
tag: String,
message: String
) {
printMessage("E", tag, message)
}
}
11 changes: 11 additions & 0 deletions core/data/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,17 @@ kotlin {

jvm()

listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "CoreData"
isStatic = true
}
}

sourceSets {
commonMain.dependencies {
implementation(libs.kotlinx.coroutines.core)
Expand Down
37 changes: 32 additions & 5 deletions core/database/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,37 @@ kotlin {

jvm()

listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "CoreDatabase"
isStatic = true
}
}

sourceSets {
commonMain.dependencies {
implementation(libs.kotlinx.datetime)
api(libs.androidx.room.common)
api(libs.androidx.room.runtime)
commonMain {
dependencies {
implementation(libs.kotlinx.datetime)
api(libs.androidx.room.common)
api(libs.androidx.room.runtime)
}
}

androidMain.dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.sqlite.bundled)
}

jvmMain.dependencies {
implementation(libs.androidx.sqlite.bundled)
}

iosMain.dependencies {
implementation(libs.androidx.sqlite.bundled)
}
}
}
Expand Down Expand Up @@ -56,5 +78,10 @@ room {
}

dependencies {
ksp(libs.androidx.room.compiler)
add("kspJvm", libs.androidx.room.compiler)
add("kspAndroid", libs.androidx.room.compiler)
add("kspIosSimulatorArm64", libs.androidx.room.compiler)
add("kspIosX64", libs.androidx.room.compiler)
add("kspIosArm64", libs.androidx.room.compiler)
// add("kspCommonMainMetadata", libs.androidx.room.compiler)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package dev.androidbroadcast.news.database

actual fun instantiateNewsRoomDatabase(): NewsRoomDatabase {
error("Not implemented in Android")
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import dev.androidbroadcast.news.database.models.ArticleDBO
import dev.androidbroadcast.news.database.utils.Converters
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO

class NewsDatabase internal constructor(private val database: NewsRoomDatabase) {
val articlesDao: ArticleDao
Expand All @@ -31,3 +32,5 @@ fun NewsDatabase(
.build()
)
}

public expect fun instantiateNewsRoomDatabase(): NewsRoomDatabase
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package dev.androidbroadcast.news.database

actual fun instantiateNewsRoomDatabase(): NewsRoomDatabase = NewsRoomDatabase_Impl()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package dev.androidbroadcast.news.database

actual fun instantiateNewsRoomDatabase(): NewsRoomDatabase = NewsRoomDatabase_Impl()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package dev.androidbroadcast.news.database

actual fun instantiateNewsRoomDatabase(): NewsRoomDatabase = NewsRoomDatabase_Impl()
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package dev.androidbroadcast.news.database

actual fun instantiateNewsRoomDatabase(): NewsRoomDatabase {
error("Not implemented in JVM")
}
15 changes: 15 additions & 0 deletions core/opennews-api/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,17 @@ kotlin {

jvm()

listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "CoreOpenNewsApi"
isStatic = true
}
}

sourceSets {
commonMain.dependencies {
implementation(libs.kotlinx.coroutines.core)
Expand All @@ -37,6 +48,10 @@ kotlin {
jvmMain.dependencies {
implementation(libs.ktor.client.okhttp)
}

iosMain.dependencies {
implementation(libs.ktor.client.darwin)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import io.ktor.serialization.kotlinx.json.json
import kotlinx.datetime.Instant
import kotlinx.serialization.SerialName
import kotlinx.serialization.json.Json
import kotlin.jvm.JvmSuppressWildcards

/**
* [API Documentation](https://newsapi.org/docs/get-started)
Expand Down
15 changes: 15 additions & 0 deletions core/platform/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,17 @@ kotlin {

jvm()

listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "CorePlatform"
isStatic = true
}
}

sourceSets {
commonMain.dependencies {
api(projects.core.common)
Expand All @@ -32,6 +43,10 @@ kotlin {
jvmMain.dependencies {
implementation(libs.androidx.sqlite.bundled)
}

iosMain.dependencies {
implementation(libs.androidx.sqlite.bundled)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package dev.androidbroadcast.news.core

import coil3.PlatformContext
import coil3.disk.DiskCache

internal actual fun newDiskCache(context: PlatformContext): DiskCache? {
TODO("Not yet implemented")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package dev.androidbroadcast.news.core

import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.sqlite.driver.bundled.BundledSQLiteDriver
import dev.androidbroadcast.common.Logger
import dev.androidbroadcast.common.PrintLogger
import dev.androidbroadcast.news.database.NewsRoomDatabase
import org.koin.core.module.Module
import org.koin.dsl.module
import platform.Foundation.NSHomeDirectory

/**
* Koin Module with target platform specifics dependencies
*/
internal actual val targetKoinModule: Module = module {
factory<RoomDatabase.Builder<NewsRoomDatabase>> {
Room.databaseBuilder<NewsRoomDatabase>(
name = "${NSHomeDirectory()}/news.db",
factory = { instantiateNewsRoomDatabase() }
).setDriver(BundledSQLiteDriver())
}

factory<Logger> {
PrintLogger()
}
}
11 changes: 11 additions & 0 deletions core/uikit/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,17 @@ kotlin {

jvm()

listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "CoreUiKit"
isStatic = true
}
}

sourceSets {
commonMain.dependencies {
api(compose.ui)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package dev.androidbroadcast.news

import androidx.compose.material3.ColorScheme
import androidx.compose.runtime.Composable

@Composable
internal actual fun dynamicColorScheme(darkTheme: Boolean): ColorScheme {
error("Dynamic theming isn't supported")
}

internal actual fun isPlatformWithDynamicSystemTheme(): Boolean = false

@Composable
internal actual fun platformThemeSetup(
darkTheme: Boolean,
colorScheme: ColorScheme,
) {
// Do nothing
}
11 changes: 11 additions & 0 deletions features/news-main/ui-logic/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,17 @@ kotlin {

jvm()

listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "FeaturesNewsMainUiLogic"
isStatic = true
}
}

sourceSets {
commonMain.dependencies {
api(projects.core.data)
Expand Down
12 changes: 11 additions & 1 deletion features/news-main/ui/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,17 @@ kotlin {

jvm()

listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "FeaturesNewsMainUi"
isStatic = true
}
}

sourceSets {
commonMain.dependencies {
implementation(projects.features.newsMain.uiLogic)
Expand All @@ -33,7 +44,6 @@ kotlin {
implementation(libs.androidx.lifecycle.viewmodel)

implementation(compose.components.resources)
implementation(libs.androidx.lifecycle.viewmodel.compose)
}

androidMain.dependencies {
Expand Down
Loading

0 comments on commit 6031fb0

Please sign in to comment.