diff --git a/.gitignore b/.gitignore index 7345f812b8d23a40e5a4c236a7a51d46dac61805..869ae12ad436610bbdb40465182e0582d4438927 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ /.idea .idea -keystore/ +mobile/keystore/ build/ *.iml .gradle diff --git a/build.gradle.kts b/build.gradle.kts index ff303413ab118b426a7098fb5c6776c734e401ce..7937cac7d540820790c926e74313dafcf4c6f289 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,30 +3,10 @@ plugins { } allprojects { - tasks.withType { - kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() - freeCompilerArgs = listOf( - "-opt-in=kotlin.RequiresOptIn", - ) - } - } repositories { - google() - mavenCentral() - mavenLocal() - jcenter() - maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") - maven("https://jitpack.io") - } -} - -buildscript { - repositories { - gradlePluginPortal() - mavenLocal() mavenCentral() google() - maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") } } + + diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 40f766b6f29681f7475aabc1f1abb93ac5eee6bc..ce30f6de27140fd52b43d30d304a6c1b2eea326c 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,23 +1,28 @@ - plugins { `kotlin-dsl` } repositories { mavenLocal() - google() mavenCentral() maven(url = "https://maven.pkg.jetbrains.space/public/p/compose/dev") + maven("https://jitpack.io") + jcenter() + google() gradlePluginPortal() } dependencies { - implementation("gradle.plugin.com.github.johnrengelman:shadow:7.1.2") - implementation(Dependencies.JetBrains.Kotlin.gradlePlugin) - implementation(Dependencies.Android.Tools.Build.gradlePlugin) - implementation(Dependencies.JetBrains.Kotlin.serializationPlugin) - implementation("com.codingfeline.buildkonfig:buildkonfig-gradle-plugin:0.13.3") - implementation("org.apache.commons:commons-compress:1.21") + implementation(Plugins.Android.implementation) + implementation(Plugins.Shadow.implementation) // NOTE(radchenko): generates jar for server builds + implementation(Plugins.Kotlin.implementation) + implementation(Plugins.Kotlin.implementation) + implementation(Plugins.Ktor.implementation) + implementation(Plugins.ApacheCompress.implementation) // NOTE(radchenko): needs for `ktor` to `docker` + implementation(Plugins.MultiplatformCompose.implementation) + implementation(Plugins.Libres.implementation) + implementation(Plugins.BuildConfig.implementation) + implementation(Plugins.Serialization.implementation) } val rootDirProject = file("../") diff --git a/buildSrc/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/buildSrc/src/main/kotlin/Dependencies.kt index 5669cfdfd61a9b4f2cec09f48c1367b9fde343e7..aa24940adfccd8978697c34649728e116c4e7933 100644 --- a/buildSrc/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/buildSrc/src/main/kotlin/Dependencies.kt @@ -1,137 +1,125 @@ object Dependencies { - object DI { - const val kodein = "org.kodein.di:kodein-di:7.1.0" - } - - object Images { - const val kamel = "com.alialbaali.kamel:kamel-image:0.3.0" - } - - object JetBrains { - object Kotlin { - // __KOTLIN_COMPOSE_VERSION__ - private const val VERSION = "1.8.0" - const val gradlePlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:$VERSION" - const val testCommon = "org.jetbrains.kotlin:kotlin-test-common:$VERSION" - const val testJunit = "org.jetbrains.kotlin:kotlin-test-junit:$VERSION" - const val testAnnotationsCommon = - "org.jetbrains.kotlin:kotlin-test-annotations-common:$VERSION" - - const val dateTime = "org.jetbrains.kotlinx:kotlinx-datetime:0.4.0" - - const val serialization = "org.jetbrains.kotlinx:kotlinx-serialization-core:1.4.0" - const val serializationPlugin = "org.jetbrains.kotlin:kotlin-serialization:1.5.31" - - private const val coroutinesVersion = "1.6.4" - const val coroutines = - "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion" - const val coroutinesAndroid = - "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" - const val coroutinesSwing = - "org.jetbrains.kotlinx:kotlinx-coroutines-swing:$coroutinesVersion" - const val coroutinesCommon = - "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$coroutinesVersion" + object Versions { + const val activityKtx = "1.7.2" + const val kotlin = "1.8.20" + const val agp = "7.4.2" + const val compose = "1.4.0" + const val androidxAppCompat = "1.6.1" + const val androidxActivityCompose = "1.7.2" + const val composeUiTooling = "1.4.3" + const val libres = "1.1.8" + const val composeImageLoader = "1.3.1" + const val napier = "2.6.1" + const val buildConfig = "3.1.0" + const val kotlinxCoroutines = "1.7.1" + const val ktor = "2.3.1" + const val composeIcons = "1.1.0" + const val kotlinxSerialization = "1.5.1" + const val kotlinxDatetime = "0.4.0" + const val googleAuth = "20.5.0" + const val decompose = "2.0.0-compose-experimental-beta-01" + const val mviKotlin = "3.2.1" + const val koin = "3.4.0" + const val essenty = "1.1.0" + const val logback = "1.2.11" + const val shadow = "7.1.2" + } + + object Ktor { + const val ktorVersion = "2.3.1" + + object Client { + const val Core = + "io.ktor:ktor-client-core:$ktorVersion" + const val CommonLogging = + "io.ktor:ktor-client-logging:$ktorVersion" + const val CIO = "io.ktor:ktor-client-cio:$ktorVersion" + const val Android = "io.ktor:ktor-client-android:${Versions.ktor}" + const val Darwin = "io.ktor:ktor-client-darwin:${Versions.ktor}" } - object Compose { - // __LATEST_COMPOSE_RELEASE_VERSION__ - const val VERSION = "1.3.0" - const val gradlePlugin = "org.jetbrains.compose:compose-gradle-plugin:$VERSION" - const val runtime = "androidx.compose.runtime:runtime:$VERSION" - const val ui = "androidx.compose.ui:ui:$VERSION" - const val foundationLayout = - "androidx.compose.foundation:foundation-layout:$VERSION" - const val material = "androidx.compose.material:material:$VERSION" + object Server { + const val Netty = "io.ktor:ktor-server-netty-jvm:$ktorVersion" + const val Logback = "ch.qos.logback:logback-classic:1.2.11" } } - object Android { - object Tools { - object Build { - const val gradlePlugin = "com.android.tools.build:gradle:7.3.1" - } - } - const val material = "com.google.android.material:material:1.4.0" + object Google { + private const val VERSION = "20.4.0" + const val SignIn = "com.google.android.gms:play-services-auth:$VERSION" + const val ApiClient = "com.google.api-client:google-api-client:2.1.1" } - object Utils { - const val UUID = "com.benasher44:uuid:0.3.1" - } object AndroidX { - object AppCompat { - const val appCompat = "androidx.appcompat:appcompat:1.4.0" - const val fragmentKtx = "androidx.fragment:fragment-ktx:1.2.1" - } + const val activityKtx = "androidx.activity:activity-ktx:${Versions.activityKtx}" + const val appCompat = "androidx.appcompat:appcompat:${Versions.androidxAppCompat}" + const val activityCompose = + "androidx.activity:activity-compose:${Versions.androidxActivityCompose}" + } - object Activity { - const val activityCompose = "androidx.activity:activity-compose:1.3.0-beta02" - } + object Compose { + const val uiTooling = "androidx.compose.ui:ui-tooling:${Versions.composeUiTooling}" } - object Coroutines { - const val Core = - "org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.CoroutinesVersion}" - const val Android = - "org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.CoroutinesVersion}" + object Libres { + const val libresCompose = "io.github.skeptick.libres:libres-compose:${Versions.libres}" } - object Serialization { - const val Json = - "org.jetbrains.kotlinx:kotlinx-serialization-json:${Versions.KotlinSerializationVersion}" + object ImageLoader { + const val imageLoader = "io.github.qdsfdhvh:image-loader:${Versions.composeImageLoader}" + } + object Napier { + const val napier = "io.github.aakira:napier:${Versions.napier}" } - object Ktor { - object Client { - const val Core = - "io.ktor:ktor-client-core:${Versions.ktorVersion}" - val contentNegotiation = - "io.ktor:ktor-client-content-negotiation:${Versions.ktorVersion}" - val commonLogging = - "io.ktor:ktor-client-logging:${Versions.ktorVersion}" - val androidOKHttp = - "io.ktor:ktor-client-okhttp:${Versions.ktorVersion}" - val ios = "io.ktor:ktor-client-darwin:${Versions.ktorVersion}" - val commonSerialization = - "io.ktor:ktor-serialization-kotlinx-json:${Versions.ktorVersion}" - val cio = "io.ktor:ktor-client-cio:${Versions.ktorVersion}" - val websockets = "io.ktor:ktor-client-websockets:${Versions.ktorVersion}" - } + object KotlinxCoroutines { + const val core = + "org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.kotlinxCoroutines}" + const val android = + "org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.kotlinxCoroutines}" } - object Koin { - const val Core = "io.insert-koin:koin-core:${Versions.koinVersion}" - const val Android = - "io.insert-koin:koin-android:${Versions.koinVersion}" + object ComposeIcons { + const val featherIcons = "br.com.devsrsouza.compose.icons:feather:${Versions.composeIcons}" } - object MOKO { - const val resources_generator = - "dev.icerock.moko:resources-generator:${Versions.mokoVersion}" - const val resources = - "dev.icerock.moko:resources:${Versions.mokoVersion}" - const val resources_compose = - "dev.icerock.moko:resources-compose:${Versions.mokoVersion}" + object KotlinxSerialization { + const val json = + "org.jetbrains.kotlinx:kotlinx-serialization-json:${Versions.kotlinxSerialization}" } - object Napier { - const val logger = "io.github.aakira:napier:${Versions.napier}" + object KotlinxDatetime { + const val kotlinxDatetime = + "org.jetbrains.kotlinx:kotlinx-datetime:${Versions.kotlinxDatetime}" } - object Google { - private const val VERSION = "20.4.0" - const val SignIn = "com.google.android.gms:play-services-auth:$VERSION" + object GoogleAuth { + const val googleAuth = "com.google.android.gms:play-services-auth:${Versions.googleAuth}" + } + + object Decompose { + const val decompose = "com.arkivanov.decompose:decompose:${Versions.decompose}" + const val extensions = + "com.arkivanov.decompose:extensions-compose-jetbrains:${Versions.decompose}" } - val asyncImageCompose = "io.github.qdsfdhvh:image-loader:1.2.10" + object MviKotlin { + const val mviKotlin = "com.arkivanov.mvikotlin:mvikotlin:${Versions.mviKotlin}" + const val mviKotlinMain = "com.arkivanov.mvikotlin:mvikotlin-main:${Versions.mviKotlin}" + const val mviKotlinExtensionsCoroutines = + "com.arkivanov.mvikotlin:mvikotlin-extensions-coroutines:${Versions.mviKotlin}" + } + + object Koin { + const val core = "io.insert-koin:koin-core:${Versions.koin}" + const val android = "io.insert-koin:koin-android:${Versions.koin}" + } - object Voyager { - private const val VERSION = "1.0.0-rc04" - const val navigator = "cafe.adriel.voyager:voyager-navigator:$VERSION" - const val tab = "cafe.adriel.voyager:voyager-tab-navigator:$VERSION" - const val transition = "cafe.adriel.voyager:voyager-transitions:$VERSION" + object Essenty { + const val essenty = "com.arkivanov.essenty:lifecycle:${Versions.essenty}" } } \ No newline at end of file diff --git a/buildSrc/buildSrc/src/main/kotlin/Modules.kt b/buildSrc/buildSrc/src/main/kotlin/Modules.kt deleted file mode 100644 index f2f67db2ff49dd40958339be1b145e5c7b50bb07..0000000000000000000000000000000000000000 --- a/buildSrc/buildSrc/src/main/kotlin/Modules.kt +++ /dev/null @@ -1,4 +0,0 @@ -object Modules { - const val shared = ":shared" - const val android = ":android" -} \ No newline at end of file diff --git a/buildSrc/buildSrc/src/main/kotlin/Plugins.kt b/buildSrc/buildSrc/src/main/kotlin/Plugins.kt index 797beff5f971eccc8b1ef408420056e143f674af..a01f2dce92b5708af8db1ce0c2b01285df552f74 100644 --- a/buildSrc/buildSrc/src/main/kotlin/Plugins.kt +++ b/buildSrc/buildSrc/src/main/kotlin/Plugins.kt @@ -1,10 +1,58 @@ +/*** + * Object for declaration of project plugins. + * Declaration rules: + * - implementation - declare gradle plugin string with version + * - plugin - declare short string to use in some `build.gradle` file + */ object Plugins { - const val kotlinGradlePlugin = - "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.Project.kotlin_version}" - const val kotlinSerializationGradlePlugin = - "org.jetbrains.kotlin:kotlin-serialization:${Versions.Project.kotlin_version}" - const val AndroidBuildGradlePlugin = - "com.android.tools.build:gradle:${Versions.Project.Android_Gradle_Plugin_version}" - const val MokoResourceGenerator = Dependencies.MOKO.resources_generator - const val BuildKonfigPlugin = "com.codingfeline.buildkonfig:buildkonfig-gradle-plugin:${Versions.BuildKonfig}" + + object Android { + const val implementation = "com.android.tools.build:gradle:7.3.1" + const val plugin = "com.android.application" + } + + object Shadow { + const val implementation = "gradle.plugin.com.github.johnrengelman:shadow:7.1.2" + const val plugin = "com.github.johnrengelman.shadow" + } + + object Kotlin { + const val implementation = "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20" + const val plugin = "org.jetbrains.kotlin.multiplatform" + } + + object Ktor { + const val implementation = "io.ktor.plugin:plugin:2.3.1" + const val plugin = "io.ktor.plugin" + } + + object ApacheCompress { + const val implementation = "org.apache.commons:commons-compress:1.21" + } + + object MultiplatformCompose { + const val implementation = "org.jetbrains.compose:compose-gradle-plugin:1.4.0" + const val plugin = "org.jetbrains.compose" + } + + object CocoaPods { + const val plugin = "org.jetbrains.kotlin.native.cocoapods" + } + object Libres { + const val implementation = "io.github.skeptick.libres:gradle-plugin:1.1.8" + const val plugin = "io.github.skeptick.libres" + } + + object BuildConfig { + const val implementation = "com.github.gmazzo.buildconfig:plugin:4.0.4" + const val plugin = "com.github.gmazzo.buildconfig" + } + + object Serialization { + const val implementation = "org.jetbrains.kotlin:kotlin-serialization:1.8.20" + const val plugin = "org.jetbrains.kotlin.plugin.serialization" + } + object Parcelize { + const val plugin = "org.jetbrains.kotlin.plugin.parcelize" + } } \ No newline at end of file diff --git a/buildSrc/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/buildSrc/src/main/kotlin/Versions.kt deleted file mode 100644 index 441581f0fcc2235c7e0fdbdfc597939beb5ace2e..0000000000000000000000000000000000000000 --- a/buildSrc/buildSrc/src/main/kotlin/Versions.kt +++ /dev/null @@ -1,33 +0,0 @@ -object Versions { - - object Project { - const val kotlin_version = "1.7.10" - const val Android_Gradle_Plugin_version = "7.2.1" - } - - object AndroidX { - - object Compose { - const val ui = "1.2.1" - const val tooling = "1.2.1" - const val toolingPreview = "1.2.1" - const val foundation = "1.2.1" - const val material = "1.2.1" - const val activity = "1.5.1" - } - - const val appCompat = "1.5.1" - } - - const val BuildKonfig: String = "0.11.0" - const val napier: String = "2.6.1" - const val CoroutinesVersion = "1.6.4" - const val KotlinSerializationVersion = "1.3.3" - const val ktorVersion = "2.1.3" - const val koinVersion = "3.2.0" - const val multiplatform_settingsVersion = "0.9" - const val mokoVersion = "0.20.1" - const val cryptohash = "0.10.1" - - const val precompose = "1.3.9" -} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/android-setup.gradle.kts b/buildSrc/src/main/kotlin/android-setup.gradle.kts deleted file mode 100644 index 36318a47c0cdd8a28f859027ce67c4a8825cf6b4..0000000000000000000000000000000000000000 --- a/buildSrc/src/main/kotlin/android-setup.gradle.kts +++ /dev/null @@ -1,38 +0,0 @@ -plugins { - id("com.android.library") -} - -android { - compileSdkVersion(ConfigData.Android.compileSdkVersion) - - defaultConfig { - minSdkVersion(ConfigData.Android.minSdkVersion) - targetSdkVersion(ConfigData.Android.targetSdkVersion) - } - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } - - packagingOptions { - pickFirst("lib/x86_64/libjsc.so") - pickFirst("lib/arm64-v8a/libjsc.so") - } - - lintOptions { - isCheckReleaseBuilds = false - } - - sourceSets { - val main by getting - main.java.setSrcDirs(listOf("src/androidMain/kotlin")) - main.res.setSrcDirs(listOf("src/androidMain/res")) - main.resources.setSrcDirs( - listOf( - "src/androidMain/resources" - ) - ) - main.manifest.srcFile("src/androidMain/AndroidManifest.xml") - } -} diff --git a/buildSrc/src/main/kotlin/kotlin-server-conventions.gradle.kts b/buildSrc/src/main/kotlin/kotlin-server-conventions.gradle.kts index 9a55b8e3e8a5f3c2abbbba913878cb72b71d15d9..a5678d5e15b5eafc07782515683cc66755422057 100644 --- a/buildSrc/src/main/kotlin/kotlin-server-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/kotlin-server-conventions.gradle.kts @@ -1,20 +1,11 @@ -val logback_version: String by project -val ktor_version: String by project - plugins { id("kotlin-common-conventions") id("com.github.johnrengelman.shadow") application } -repositories { - google() - mavenCentral() - maven { url = uri("https://maven.pkg.jetbrains.space/public/p/ktor/eap") } -} - dependencies { - implementation("ch.qos.logback:logback-classic:$logback_version") - implementation("io.ktor:ktor-server-netty-jvm:$ktor_version") + implementation(Dependencies.Ktor.Server.Logback) + implementation(Dependencies.Ktor.Server.Netty) implementation(project(":common")) } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/multiplatform-compose-setup.gradle.kts b/buildSrc/src/main/kotlin/multiplatform-compose-setup.gradle.kts deleted file mode 100644 index 60c8d0ed57db25fd66cefce12f69e34f8bb97a18..0000000000000000000000000000000000000000 --- a/buildSrc/src/main/kotlin/multiplatform-compose-setup.gradle.kts +++ /dev/null @@ -1,15 +0,0 @@ -plugins { - id("com.android.library") - id("kotlin-multiplatform") -} - -version = "0.0.1" - -kotlin { - android() - ios() - - tasks.withType { - kotlinOptions.jvmTarget = "11" - } -} \ No newline at end of file diff --git a/cloud-server/build.gradle.kts b/cloud-server/build.gradle.kts index 4aa562428835bd3feb55535c68ed66896dec2f73..35f48c6367cbcd9a56e98a8e9aaea1fb71893b60 100644 --- a/cloud-server/build.gradle.kts +++ b/cloud-server/build.gradle.kts @@ -1,11 +1,6 @@ -val ktor_version: String by project -val kotlin_version: String by project -val logback_version: String by project -val google_api: String by project - plugins { id("kotlin-server-conventions") - id("io.ktor.plugin") version "2.2.4" + id(Plugins.Ktor.plugin) } application { @@ -13,10 +8,10 @@ application { } dependencies { - implementation("io.ktor:ktor-client-core:$ktor_version") - implementation("io.ktor:ktor-client-cio:$ktor_version") - implementation("io.ktor:ktor-client-logging:$ktor_version") - implementation("com.google.api-client:google-api-client:$google_api") + implementation(Dependencies.Ktor.Client.Core) + implementation(Dependencies.Ktor.Client.CIO) + implementation(Dependencies.Ktor.Client.CommonLogging) + implementation(Dependencies.Google.ApiClient) } ktor { diff --git a/cloud-server/src/main/kotlin/band/effective/office/elevator/cloud/server/client/KtorClient.kt b/cloud-server/src/main/kotlin/band/effective/office/elevator/cloud/server/client/KtorClient.kt index a799795397617dee7d2850193c10a7819b496b85..698a606593cf8b053f4093b240ded99f49f3d0e5 100644 --- a/cloud-server/src/main/kotlin/band/effective/office/elevator/cloud/server/client/KtorClient.kt +++ b/cloud-server/src/main/kotlin/band/effective/office/elevator/cloud/server/client/KtorClient.kt @@ -1,17 +1,19 @@ package band.effective.office.elevator.cloud.server.client -import io.ktor.client.* -import io.ktor.client.engine.cio.* -import io.ktor.client.plugins.* -import io.ktor.client.plugins.logging.* +import io.ktor.client.HttpClient +import io.ktor.client.engine.cio.CIO +import io.ktor.client.plugins.defaultRequest +import io.ktor.client.plugins.logging.DEFAULT +import io.ktor.client.plugins.logging.LogLevel +import io.ktor.client.plugins.logging.Logger +import io.ktor.client.plugins.logging.Logging val ktorClient = HttpClient(CIO) { defaultRequest { - host = "92.124.138.130" -// host = "0.0.0.0" +// host = "92.124.138.130" + host = "0.0.0.0" port = 2105 -// port = 80 } install(Logging) { logger = Logger.DEFAULT diff --git a/common/build.gradle.kts b/common/build.gradle.kts index e18634c3fd028d9a6a7766d4cad03c9c40141c2e..02302d114477dbf96937f9f8be04a7dde40b7001 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -1,4 +1,3 @@ -val ktor_version: String by project plugins { id("kotlin-library-conventions") } @@ -7,5 +6,5 @@ group = "band.effective.office.common" version = "unspecified" dependencies { - implementation("io.ktor:ktor-server-netty-jvm:$ktor_version") + implementation(Dependencies.Ktor.Server.Netty) } \ No newline at end of file diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts new file mode 100644 index 0000000000000000000000000000000000000000..648cbf9423b5f41958636eb1b2b64102ca2f8dbf --- /dev/null +++ b/composeApp/build.gradle.kts @@ -0,0 +1,198 @@ +plugins { + id(Plugins.Kotlin.plugin) + id(Plugins.MultiplatformCompose.plugin) + id(Plugins.CocoaPods.plugin) + id(Plugins.Android.plugin) + id(Plugins.Libres.plugin) + id(Plugins.BuildConfig.plugin) + id(Plugins.Serialization.plugin) + id(Plugins.Parcelize.plugin) +} + +kotlin { + android { + compilations.all { + kotlinOptions { + jvmTarget = "1.8" + } + } + } + + iosX64() + iosArm64() + iosSimulatorArm64() + + cocoapods { + version = "1.0.0" + summary = "Compose application framework" + homepage = "https://github.com/Radch-enko" + ios.deploymentTarget = "11.0" + podfile = project.file("../iosApp/Podfile") + framework { + baseName = "ComposeApp" + isStatic = true + + export(Dependencies.Decompose.decompose) + export(Dependencies.Essenty.essenty) + } + pod("GoogleSignIn") {} + } + + sourceSets { + val commonMain by getting { + dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material) + implementation(Dependencies.Libres.libresCompose) + implementation(Dependencies.ImageLoader.imageLoader) + implementation(Dependencies.Napier.napier) + implementation(Dependencies.KotlinxCoroutines.core) + api(Dependencies.Ktor.Client.Core) + api(Dependencies.Ktor.Client.CommonLogging) + implementation(Dependencies.ComposeIcons.featherIcons) + implementation(Dependencies.KotlinxSerialization.json) + implementation(Dependencies.KotlinxDatetime.kotlinxDatetime) + + // MVI Kotlin + api(Dependencies.MviKotlin.mviKotlin) + api(Dependencies.MviKotlin.mviKotlinMain) + api(Dependencies.MviKotlin.mviKotlinExtensionsCoroutines) + + // Decompose + api(Dependencies.Decompose.decompose) + api(Dependencies.Decompose.extensions) + + // Koin + api(Dependencies.Koin.core) + + api(Dependencies.Essenty.essenty) + } + } + + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + } + } + + val androidMain by getting { + dependencies { + implementation(Dependencies.AndroidX.appCompat) + implementation(Dependencies.AndroidX.activityCompose) + implementation(Dependencies.Compose.uiTooling) + implementation(Dependencies.KotlinxCoroutines.android) + api(Dependencies.Ktor.Client.Android) + implementation(Dependencies.Google.SignIn) + implementation(Dependencies.AndroidX.activityKtx) + + // Koin + api(Dependencies.Koin.android) + + api(Dependencies.Ktor.Server.Logback) + } + } + + val iosX64Main by getting + val iosArm64Main by getting + val iosSimulatorArm64Main by getting + val iosMain by creating { + dependsOn(commonMain) + iosX64Main.dependsOn(this) + iosArm64Main.dependsOn(this) + iosSimulatorArm64Main.dependsOn(this) + dependencies { + implementation(Dependencies.Ktor.Client.Darwin) + implementation(files("iosApp/GoogleAuthorization/GoogleAuthorization/Sources")) + } + } + + val iosX64Test by getting + val iosArm64Test by getting + val iosSimulatorArm64Test by getting + val iosTest by creating { + dependsOn(commonTest) + iosX64Test.dependsOn(this) + iosArm64Test.dependsOn(this) + iosSimulatorArm64Test.dependsOn(this) + } + } +} + +android { + namespace = "band.effective.office.elevator" + compileSdk = 33 + + defaultConfig { + minSdk = 26 + targetSdk = 33 + + applicationId = "band.effective.office.elevator.android" + versionCode = 1 + versionName = "1.0.0" + } + sourceSets["main"].apply { + manifest.srcFile("src/androidMain/AndroidManifest.xml") + res.srcDirs("src/androidMain/resources") + res.srcDir("build/generated/libres/android/resources") + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + packagingOptions { + resources.excludes.add("META-INF/**") + } + + signingConfigs { + getByName("debug") { + keyPassword = "android" + storeFile = file("${rootDir}/keystore/debug.keystore") + storePassword = "android" + } + create("release") { + keyAlias = System.getenv()["OFFICE_ELEVATOR_RELEASE_ALIAS"] + keyPassword = System.getenv()["OFFICE_ELEVATOR_RELEASE_KEY_PASSWORD"] + storeFile = file("${rootDir}/keystore/main.keystore") + storePassword = System.getenv()["OFFICE_ELEVATOR_RELEASE_STORE_PASSWORD"] + } + } + + buildTypes { + getByName("debug") { + signingConfig = signingConfigs.getByName("debug") + isDebuggable = true + } + getByName("release") { + signingConfig = signingConfigs.getByName("release") + isDebuggable = false + isMinifyEnabled = true + } + } +} + +libres { + // https://github.com/Skeptick/libres#setup + generatedClassName = "MainRes" // "Res" by default + generateNamedArguments = true // false by default + baseLocaleLanguageCode = "ru" // "en" by default + camelCaseNamesForAppleFramework = true // false by default + +} + +buildConfig { + className("OfficeElevatorConfig") + packageName("band.effective.office.elevator") + useKotlinOutput() + useKotlinOutput { internalVisibility = true } + + buildConfigField( + "String", + "webClient", "\"726357293621-s4lju93oibotmefghoh3b3ucckalh933.apps.googleusercontent.com\"" + ) + buildConfigField( + "String", + "iosClient", + "\"726357293621-hegk0410bsb1a5hvl3ihpc4d2bfkmlgb.apps.googleusercontent.com\"" + ) +} diff --git a/composeApp/composeApp.podspec b/composeApp/composeApp.podspec new file mode 100644 index 0000000000000000000000000000000000000000..6db481544ce240dab8e86d35caa75a475e7328b9 --- /dev/null +++ b/composeApp/composeApp.podspec @@ -0,0 +1,41 @@ +Pod::Spec.new do |spec| + spec.name = 'composeApp' + spec.version = '1.0.0' + spec.homepage = 'https://github.com/Radch-enko' + spec.source = { :http=> ''} + spec.authors = '' + spec.license = '' + spec.summary = 'Compose application framework' + spec.vendored_frameworks = 'build/cocoapods/framework/ComposeApp.framework' + spec.libraries = 'c++' + spec.ios.deployment_target = '11.0' + spec.dependency 'GoogleSignIn' + + spec.pod_target_xcconfig = { + 'KOTLIN_PROJECT_PATH' => ':composeApp', + 'PRODUCT_MODULE_NAME' => 'ComposeApp', + } + + spec.script_phases = [ + { + :name => 'Build composeApp', + :execution_position => :before_compile, + :shell_path => '/bin/sh', + :script => <<-SCRIPT + if [ "YES" = "$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED" ]; then + echo "Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"" + exit 0 + fi + set -ev + REPO_ROOT="$PODS_TARGET_SRCROOT" + "$REPO_ROOT/../../../../../../../private/var/folders/xs/bh5ck7bs3tv5hp49wtsbrkyr0000gn/T/wrap5loc/gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \ + -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \ + -Pkotlin.native.cocoapods.archs="$ARCHS" \ + -Pkotlin.native.cocoapods.configuration="$CONFIGURATION" + SCRIPT + } + ] + spec.resource_bundles = { + 'LibresComposeApp' => ['build/generated/libres/apple/resources/images/LibresComposeApp.xcassets'] + } +end \ No newline at end of file diff --git a/mobile/android/src/main/AndroidManifest.xml b/composeApp/src/androidMain/AndroidManifest.xml similarity index 52% rename from mobile/android/src/main/AndroidManifest.xml rename to composeApp/src/androidMain/AndroidManifest.xml index fabeb78776e1a120cb8402cf7972a1091aff44b3..810e3ac76c5b51b20b77f27dad04603798e56aab 100644 --- a/mobile/android/src/main/AndroidManifest.xml +++ b/composeApp/src/androidMain/AndroidManifest.xml @@ -1,29 +1,26 @@ - + + + android:launchMode="singleInstance" + android:windowSoftInputMode="adjustResize"> - - \ No newline at end of file + + diff --git a/composeApp/src/androidMain/kotlin/band/effective/office/elevator/App.android.kt b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/App.android.kt new file mode 100644 index 0000000000000000000000000000000000000000..f837651115fcb7ef44348479658392fd93a6e971 --- /dev/null +++ b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/App.android.kt @@ -0,0 +1,61 @@ +package band.effective.office.elevator + +import android.app.Application +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import band.effective.office.elevator.di.androidModuleDI +import band.effective.office.elevator.di.appModuleDI +import band.effective.office.elevator.domain.AppActivityLifecycleObserver +import band.effective.office.elevator.ui.ContentView +import band.effective.office.elevator.ui.root.RootComponent +import band.effective.office.elevator.utils.LastOpenActivityProvider +import com.arkivanov.decompose.defaultComponentContext +import com.arkivanov.mvikotlin.main.store.DefaultStoreFactory +import io.github.aakira.napier.DebugAntilog +import io.github.aakira.napier.Napier +import org.koin.android.ext.koin.androidContext +import org.koin.core.context.startKoin + + +class AndroidApp : Application() { + companion object { + lateinit var INSTANCE: AndroidApp + } + + override fun onCreate() { + super.onCreate() + INSTANCE = this + LastOpenActivityProvider.start(this) + Napier.base(DebugAntilog()) + startKoin { + androidContext(this@AndroidApp) + modules(appModuleDI, androidModuleDI) + } + } +} + +class AppActivity : ComponentActivity() { + + lateinit var appActivityLifecycleObserver: AppActivityLifecycleObserver + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + appActivityLifecycleObserver = AppActivityLifecycleObserver( + activity = this, + registry = this.activityResultRegistry + ) + lifecycle.addObserver(appActivityLifecycleObserver) + + val rootComponent = + RootComponent( + componentContext = defaultComponentContext(), + storeFactory = DefaultStoreFactory(), + ) + + + setContent { + ContentView(rootComponent) + } + } +} diff --git a/composeApp/src/androidMain/kotlin/band/effective/office/elevator/data/createHttpEngine.kt b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/data/createHttpEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..57ecb0482ac23766fa2d328d110387584cdfe772 --- /dev/null +++ b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/data/createHttpEngine.kt @@ -0,0 +1,6 @@ +package band.effective.office.elevator.data + +import io.ktor.client.HttpClient +import io.ktor.client.engine.android.Android + +actual fun createHttpEngine(enableLogging: Boolean): HttpClient = HttpClient(Android) diff --git a/composeApp/src/androidMain/kotlin/band/effective/office/elevator/di/AndroidModuleDI.kt b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/di/AndroidModuleDI.kt new file mode 100644 index 0000000000000000000000000000000000000000..c04976f1f1d69d4f588e00218f16c58916e15995 --- /dev/null +++ b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/di/AndroidModuleDI.kt @@ -0,0 +1,9 @@ +package band.effective.office.elevator.di + +import band.effective.office.elevator.domain.GoogleSignIn +import band.effective.office.elevator.domain.GoogleSignInImpl +import org.koin.dsl.module + +val androidModuleDI = module { + single { GoogleSignInImpl() } +} diff --git a/composeApp/src/androidMain/kotlin/band/effective/office/elevator/domain/AppActivityLifecycleObserver.kt b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/domain/AppActivityLifecycleObserver.kt new file mode 100644 index 0000000000000000000000000000000000000000..054515e98bd23c5b5c8d64998b25c3c75a7d62a4 --- /dev/null +++ b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/domain/AppActivityLifecycleObserver.kt @@ -0,0 +1,85 @@ +package band.effective.office.elevator.domain + +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.ActivityResultRegistry +import androidx.activity.result.contract.ActivityResultContracts +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import band.effective.office.elevator.AppActivity +import band.effective.office.elevator.MainRes +import band.effective.office.elevator.OfficeElevatorConfig +import com.google.android.gms.auth.api.proxy.AuthApiStatusCodes +import com.google.android.gms.auth.api.signin.GoogleSignIn +import com.google.android.gms.auth.api.signin.GoogleSignInAccount +import com.google.android.gms.auth.api.signin.GoogleSignInOptions +import com.google.android.gms.auth.api.signin.GoogleSignInStatusCodes +import com.google.android.gms.auth.api.signin.GoogleSignInStatusCodes.SIGN_IN_CANCELLED +import com.google.android.gms.common.api.ApiException +import com.google.android.gms.tasks.Task +import io.github.aakira.napier.Napier + + +class AppActivityLifecycleObserver( + activity: AppActivity, + private val registry: ActivityResultRegistry +) : DefaultLifecycleObserver { + + private val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) + .requestEmail() + .requestIdToken(OfficeElevatorConfig.webClient) + .build() + + private val signInClient = GoogleSignIn.getClient(activity, gso) + + private lateinit var launcher: ActivityResultLauncher + + private lateinit var callback: SignInResultCallback + + override fun onCreate(owner: LifecycleOwner) { + launcher = registry.register( + "key", + owner, + ActivityResultContracts.StartActivityForResult() + ) { result -> + val task = GoogleSignIn.getSignedInAccountFromIntent(result.data) + handleSignInResult(task, callback) + } + } + + private fun handleSignInResult( + task: Task, + callback: SignInResultCallback + ) { + try { + val account: GoogleSignInAccount = task.getResult(ApiException::class.java) + Napier.d { "ID_TOKEN = ${account.idToken}" } + callback.onSuccess() + } catch (e: ApiException) { + Napier.e( + "signInResult:failed code=" + e.statusCode + " | description: ${ + GoogleSignInStatusCodes.getStatusCodeString(e.statusCode) + }" + ) + val errorMessage = when (e.statusCode) { + AuthApiStatusCodes.NETWORK_ERROR -> MainRes.string.network_error + AuthApiStatusCodes.DEVELOPER_ERROR -> MainRes.string.developer_error + AuthApiStatusCodes.CANCELED -> MainRes.string.cancelled_error + AuthApiStatusCodes.INVALID_ACCOUNT -> MainRes.string.invalid_account_error + AuthApiStatusCodes.TIMEOUT -> MainRes.string.timout_error + SIGN_IN_CANCELLED -> MainRes.string.you_need_to_sign_in + else -> MainRes.string.something_went_wrong + } + callback.onFailure(errorMessage) + } + } + + fun signIn(callback: SignInResultCallback) { + this.callback = callback + launcher.launch(signInClient.signInIntent) + } + + fun signOut() { + signInClient.signOut() + } +} diff --git a/composeApp/src/androidMain/kotlin/band/effective/office/elevator/domain/GoogleSignInImpl.kt b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/domain/GoogleSignInImpl.kt new file mode 100644 index 0000000000000000000000000000000000000000..275080a7ed6b5075d43ac83731b9f40ed81950ac --- /dev/null +++ b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/domain/GoogleSignInImpl.kt @@ -0,0 +1,48 @@ +package band.effective.office.elevator.domain + +import band.effective.office.elevator.AndroidApp +import band.effective.office.elevator.AppActivity +import band.effective.office.elevator.data.ApiResponse +import band.effective.office.elevator.domain.models.GoogleAccount +import band.effective.office.elevator.utils.LastOpenActivityProvider +import com.google.android.gms.auth.api.signin.GoogleSignInAccount +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine +import com.google.android.gms.auth.api.signin.GoogleSignIn as GoogleAuthorization + + +class GoogleSignInImpl : GoogleSignIn { + + private val activity = LastOpenActivityProvider.lastOpenedActivity()!! as AppActivity + + override suspend fun retrieveAuthorizedUser(): ApiResponse { + return suspendCoroutine { continuation -> + val account: GoogleSignInAccount? = + GoogleAuthorization.getLastSignedInAccount(AndroidApp.INSTANCE) + continuation.resume( + if (account == null) { + ApiResponse.Error.UnknownError + } else { + ApiResponse.Success( + GoogleAccount( + email = account.email!!, + name = account.displayName!!, + photoUrl = account.photoUrl.toString(), + idToken = account.idToken + ) + ) + } + ) + } + } + + + override fun signIn(callback: SignInResultCallback) { + activity.appActivityLifecycleObserver.signIn(callback) + } + + override fun signOut() { + activity.appActivityLifecycleObserver.signOut() + } + +} diff --git a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/expects/PlatformExpects.kt b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/expects/showToast.kt similarity index 62% rename from mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/expects/PlatformExpects.kt rename to composeApp/src/androidMain/kotlin/band/effective/office/elevator/expects/showToast.kt index 6416eaadeff9a3ed244fb0a24cde57d90a6f50e6..99818a2dd28af9a4d819201d15ceb2820b460b9a 100644 --- a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/expects/PlatformExpects.kt +++ b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/expects/showToast.kt @@ -1,20 +1,19 @@ -package band.effective.office.elevator.common.compose.expects +package band.effective.office.elevator.expects import android.content.Context import android.os.Build import android.os.VibrationEffect import android.os.Vibrator import android.widget.Toast -import band.effective.office.elevator.common.compose.Android - +import band.effective.office.elevator.AndroidApp actual fun showToast(message: String) { - Toast.makeText(Android.applicationContext.applicationContext, message, Toast.LENGTH_LONG).show() + Toast.makeText(AndroidApp.INSTANCE.applicationContext, message, Toast.LENGTH_SHORT).show() } actual fun generateVibration(milliseconds: Long) { val vibrator = - Android.applicationContext.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + AndroidApp.INSTANCE.applicationContext.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator if (Build.VERSION.SDK_INT >= 26) { vibrator.vibrate( VibrationEffect.createOneShot( @@ -25,4 +24,4 @@ actual fun generateVibration(milliseconds: Long) { } else { vibrator.vibrate(milliseconds) } -} \ No newline at end of file +} diff --git a/composeApp/src/androidMain/kotlin/band/effective/office/elevator/ui/ContentView.kt b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/ui/ContentView.kt new file mode 100644 index 0000000000000000000000000000000000000000..9918716c9dbd7ac3ff01cc4bd4606b348333ef5a --- /dev/null +++ b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/ui/ContentView.kt @@ -0,0 +1,22 @@ +package band.effective.office.elevator.ui + +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Surface +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import band.effective.office.elevator.AppTheme +import band.effective.office.elevator.ui.root.RootComponent +import band.effective.office.elevator.ui.root.RootContent + +@Composable +fun ContentView(component: RootComponent) { + AppTheme { + Surface( + modifier = Modifier.fillMaxSize(), + color = MaterialTheme.colors.background + ) { + RootContent(component) + } + } +} diff --git a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/helpers/AbstractActivityLifecycleCallbacks.kt b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/utils/AbstractActivityLifecycleCallbacks.kt similarity index 91% rename from mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/helpers/AbstractActivityLifecycleCallbacks.kt rename to composeApp/src/androidMain/kotlin/band/effective/office/elevator/utils/AbstractActivityLifecycleCallbacks.kt index 933dc4f5b5cabae6885c8bba444729cc096178ca..0c8fbc8ac8cb186fea4655be95081cc73d1b8f04 100644 --- a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/helpers/AbstractActivityLifecycleCallbacks.kt +++ b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/utils/AbstractActivityLifecycleCallbacks.kt @@ -1,4 +1,4 @@ -package band.effective.office.elevator.common.compose.helpers +package band.effective.office.elevator.utils import android.app.Activity import android.app.Application @@ -18,4 +18,4 @@ abstract class AbstractActivityLifecycleCallbacks : Application.ActivityLifecycl override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) = Unit override fun onActivityDestroyed(activity: Activity) = Unit -} \ No newline at end of file +} diff --git a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/helpers/LastOpenActivityProvider.kt b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/utils/LastOpenActivityProvider.kt similarity index 85% rename from mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/helpers/LastOpenActivityProvider.kt rename to composeApp/src/androidMain/kotlin/band/effective/office/elevator/utils/LastOpenActivityProvider.kt index 559bc27ae83829e08b40ea66024f5d5f95533510..5ec949a2c0f6e702ecff3037d92fcb5fbedf1cd7 100644 --- a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/helpers/LastOpenActivityProvider.kt +++ b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/utils/LastOpenActivityProvider.kt @@ -1,11 +1,9 @@ -package band.effective.office.elevator.common.compose.helpers +package band.effective.office.elevator.utils import android.app.Activity import android.app.Application import android.content.Context -import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.map import java.lang.ref.WeakReference import java.util.* @@ -38,7 +36,5 @@ object LastOpenActivityProvider { }) } - fun lastOpenedActivity(): Flow = lastOpenActivityFlow.map { - it.get() - } -} \ No newline at end of file + fun lastOpenedActivity(): Activity? = lastOpenActivityFlow.value.get() +} diff --git a/composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml b/composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000000000000000000000000000000000000..345888d26e662baa7c5ae78589829dca8cf5b4f0 --- /dev/null +++ b/composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher.png b/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..49fc8aa0e960157edc7bfca0bf079cf797c8fb4b Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher.png differ diff --git a/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher_background.png b/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..60520782710b6d6756d9314f7ad683114dcd89bb Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher_background.png differ diff --git a/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher_foreground.png b/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..9419f9e9251d031b1206346416078f0459aa7f79 Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher_monochrome.png b/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..6f6fb0c502201dc4081622545a9b7fc8bed1394d Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher_monochrome.png differ diff --git a/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher.png b/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c9373378eb611ecaf2dcf4b65cb3ffd0648b0abb Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher.png differ diff --git a/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher_background.png b/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..fd555be0afa8c827d998241da90d099bc3d68ece Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher_background.png differ diff --git a/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher_foreground.png b/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a322dd6d922cc6d350f8aeff70e764730cc8e3 Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher_monochrome.png b/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..c0fe4bac39405ac6f933531247772ae687d516fd Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher_monochrome.png differ diff --git a/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher.png b/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a515227cb6172de58ee04f3c07fa995432c0b4ca Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_background.png b/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..4e952b39bbba6b175e0da36fe991c801f8778317 Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_background.png differ diff --git a/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_foreground.png b/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..8e8555bee2bc130cce518cd0313b07b612a0f3ce Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_monochrome.png b/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..db97a776af2b9b85a70074c5fa31ca2ac03802c6 Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_monochrome.png differ diff --git a/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png b/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..41c48344d8894902e6480bb2a7c75547354a46b3 Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_background.png b/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2622d1309f3baf90b61bb66acf38ab277de700 Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_background.png differ diff --git a/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_foreground.png b/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..7e541e9b66729330af6bc737b882789abaa6c18f Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_monochrome.png b/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..3382bd6a62a96eaf2c47ea30b0e8d3fb98fab424 Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_monochrome.png differ diff --git a/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png b/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..5bafe328db38174ef986e9f5e1510e2b59c92ee6 Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_background.png b/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..19cde18cbcac681118349813a6ada0378ca7dca3 Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_background.png differ diff --git a/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..78a05b88755113b37d1f22e8068e7923356ab598 Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_monochrome.png b/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000000000000000000000000000000000..4a2202d103165b60a5a96a91e8b9b389308cb413 Binary files /dev/null and b/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_monochrome.png differ diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/Color.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/Color.kt new file mode 100644 index 0000000000000000000000000000000000000000..ca68594b63b019ae5073fd0f878a1c56756d5780 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/Color.kt @@ -0,0 +1,75 @@ +package band.effective.office.elevator + +import androidx.compose.ui.graphics.Color + +//generated by https://m3.material.io/theme-builder#/custom +//Color palette was taken here: https://colorhunt.co/palettes/popular + +internal val md_theme_light_primary = Color(0xFFFFFFFF) +internal val md_theme_light_onPrimary = Color(0xFFFFFFFF) +internal val md_theme_light_primaryContainer = Color(0xFFABEDFF) +internal val md_theme_light_onPrimaryContainer = Color(0xFF001F26) +internal val md_theme_light_secondary = Color(0xFF9563FF) +internal val md_theme_light_onSecondary = Color(0xFFFFFFFF) +internal val md_theme_light_secondaryContainer = Color(0xFF6FF6FE) +internal val md_theme_light_onSecondaryContainer = Color(0xFF002022) +internal val md_theme_light_tertiary = Color(0xFF904D00) +internal val md_theme_light_onTertiary = Color(0xFFFFFFFF) +internal val md_theme_light_tertiaryContainer = Color(0xFFFFDCC2) +internal val md_theme_light_onTertiaryContainer = Color(0xFF2E1500) +internal val md_theme_light_error = Color(0xFFBA1A1A) +internal val md_theme_light_errorContainer = Color(0xFFFFDAD6) +internal val md_theme_light_onError = Color(0xFFFFFFFF) +internal val md_theme_light_onErrorContainer = Color(0xFF410002) +internal val md_theme_light_background = Color(0xFFF7F7F7) +internal val md_theme_light_onBackground = Color(0xFF221B00) +internal val md_theme_light_surface = Color(0xFFFFFBFF) +internal val md_theme_light_onSurface = Color(0xFF221B00) +internal val md_theme_light_surfaceVariant = Color(0xFFDBE4E7) +internal val md_theme_light_onSurfaceVariant = Color(0xFF3F484B) +internal val md_theme_light_outline = Color(0xFF70797B) +internal val md_theme_light_inverseOnSurface = Color(0xFFFFF0C0) +internal val md_theme_light_inverseSurface = Color(0xFF3A3000) +internal val md_theme_light_inversePrimary = Color(0xFF55D6F4) +internal val md_theme_light_shadow = Color(0xFF000000) +internal val md_theme_light_surfaceTint = Color(0xFF00687A) +internal val md_theme_light_outlineVariant = Color(0xFFBFC8CB) +internal val md_theme_light_scrim = Color(0xFF000000) + +internal val md_theme_dark_primary = Color(0xFF626161) +internal val md_theme_dark_onPrimary = Color(0xFF003640) +internal val md_theme_dark_primaryContainer = Color(0xFF004E5C) +internal val md_theme_dark_onPrimaryContainer = Color(0xFFABEDFF) +internal val md_theme_dark_secondary = Color(0xFF9563FF) +internal val md_theme_dark_onSecondary = Color(0xFF00373A) +internal val md_theme_dark_secondaryContainer = Color(0xFF004F53) +internal val md_theme_dark_onSecondaryContainer = Color(0xFF6FF6FE) +internal val md_theme_dark_tertiary = Color(0xFFFFB77C) +internal val md_theme_dark_onTertiary = Color(0xFF4D2700) +internal val md_theme_dark_tertiaryContainer = Color(0xFF6D3900) +internal val md_theme_dark_onTertiaryContainer = Color(0xFFFFDCC2) +internal val md_theme_dark_error = Color(0xFFFFB4AB) +internal val md_theme_dark_errorContainer = Color(0xFF93000A) +internal val md_theme_dark_onError = Color(0xFF690005) +internal val md_theme_dark_onErrorContainer = Color(0xFFFFDAD6) +internal val md_theme_dark_background = Color(0xFF434040) +internal val md_theme_dark_onBackground = Color(0xFFFFE264) +internal val md_theme_dark_surface = Color(0xFF221B00) +internal val md_theme_dark_onSurface = Color(0xFFFFFFFF) +internal val md_theme_dark_surfaceVariant = Color(0xFF3F484B) +internal val md_theme_dark_onSurfaceVariant = Color(0xFFBFC8CB) +internal val md_theme_dark_outline = Color(0xFF899295) +internal val md_theme_dark_inverseOnSurface = Color(0xFF221B00) +internal val md_theme_dark_inverseSurface = Color(0xFFFFE264) +internal val md_theme_dark_inversePrimary = Color(0xFF00687A) +internal val md_theme_dark_shadow = Color(0xFF000000) +internal val md_theme_dark_surfaceTint = Color(0xFF55D6F4) +internal val md_theme_dark_outlineVariant = Color(0xFF3F484B) +internal val md_theme_dark_scrim = Color(0xFF000000) + + +internal val seed = Color(0xFF2C3639) + +// Non Material specified colors +internal val lightGray = Color(0xFFEBEBEB) +internal val successGreen = Color(0xFF4BB543) diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/Theme.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/Theme.kt new file mode 100644 index 0000000000000000000000000000000000000000..6eaeb4a35643dbd6ac1e5bc31c8abb8a6a8c32da --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/Theme.kt @@ -0,0 +1,53 @@ +package band.effective.office.elevator + +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Surface +import androidx.compose.material.darkColors +import androidx.compose.material.lightColors +import androidx.compose.runtime.Composable + +private val LightColors = lightColors( + primary = md_theme_light_primary, + onPrimary = md_theme_light_onPrimary, + secondary = md_theme_light_secondary, + onSecondary = md_theme_light_onSecondary, + error = md_theme_light_error, + onError = md_theme_light_onError, + background = md_theme_light_background, + onBackground = md_theme_light_onBackground, + surface = md_theme_light_surface, + onSurface = md_theme_light_onSurface, +) + +private val DarkColors = darkColors( + primary = md_theme_dark_primary, + onPrimary = md_theme_dark_onPrimary, + secondary = md_theme_dark_secondary, + onSecondary = md_theme_dark_onSecondary, + error = md_theme_dark_error, + onError = md_theme_dark_onError, + background = md_theme_dark_background, + onBackground = md_theme_dark_onBackground, + surface = md_theme_dark_surface, + onSurface = md_theme_dark_onSurface, +) + +@Composable +internal fun AppTheme( + useDarkTheme: Boolean = isSystemInDarkTheme(), + content: @Composable() () -> Unit +) { + val colors = if (!useDarkTheme) { + LightColors + } else { + DarkColors + } + + MaterialTheme( + colors = colors, + content = { + Surface(content = content) + } + ) +} diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/components/ElevatorButton.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/ElevatorButton.kt similarity index 90% rename from mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/components/ElevatorButton.kt rename to composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/ElevatorButton.kt index 49afcab8b3d5f2d8110cb526780416e82bc13692..b91ff2edbbbcdb207f2aac0b91fa56a654ba960e 100644 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/components/ElevatorButton.kt +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/ElevatorButton.kt @@ -1,7 +1,8 @@ -package band.effective.office.elevator.common.compose.components +package band.effective.office.elevator.components import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.Canvas +import androidx.compose.foundation.border import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape @@ -9,7 +10,6 @@ import androidx.compose.material.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.scale -import androidx.compose.ui.draw.shadow import androidx.compose.ui.geometry.CornerRadius import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color @@ -17,6 +17,7 @@ import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import band.effective.office.elevator.lightGray @Composable internal fun ElevatorButton( @@ -30,7 +31,6 @@ internal fun ElevatorButton( uncheckedThumbColor: Color = MaterialTheme.colors.primary, gapBetweenThumbAndTrackEdge: Dp = 16.dp, isActive: Boolean, - isEnabled: Boolean, onButtonClick: () -> Unit ) { val thumbRadius = 33.dp @@ -51,12 +51,12 @@ internal fun ElevatorButton( detectTapGestures( onTap = { // This is called when the user taps on the canvas - if (isEnabled) + if (!isActive) onButtonClick() } ) } - .shadow(elevation = 2.dp, shape = RoundedCornerShape(100.dp)) + .border(width = 1.dp, shape = RoundedCornerShape(100.dp), color = lightGray) ) { // Track drawRoundRect( @@ -74,4 +74,4 @@ internal fun ElevatorButton( ) ) } -} \ No newline at end of file +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/GoogleSignInButton.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/GoogleSignInButton.kt new file mode 100644 index 0000000000000000000000000000000000000000..0bed52af04d58a98659bb8cc37a9b210344fec21 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/GoogleSignInButton.kt @@ -0,0 +1,39 @@ +package band.effective.office.elevator.components + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import band.effective.office.elevator.MainRes +import io.github.skeptick.libres.compose.painterResource + +@Composable +internal fun GoogleSignInButton(modifier: Modifier, onClick: () -> Unit) { + Button( + onClick = onClick, + modifier = modifier.fillMaxWidth(), + shape = RoundedCornerShape(6.dp), + colors = ButtonDefaults.buttonColors( + backgroundColor = MaterialTheme.colors.surface, + contentColor = MaterialTheme.colors.onSurface + ) + ) { + Image( + painterResource(MainRes.image.google_icon), + contentDescription = null, + modifier = Modifier.size(32.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(text = MainRes.string.sign_in_google, modifier = Modifier.padding(6.dp)) + } +} diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/components/GrayText.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/GrayText.kt similarity index 100% rename from mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/components/GrayText.kt rename to composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/GrayText.kt diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/components/NoRippleTheme.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/NoRippleTheme.kt similarity index 100% rename from mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/components/NoRippleTheme.kt rename to composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/NoRippleTheme.kt diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/TabNavigationItem.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/TabNavigationItem.kt new file mode 100644 index 0000000000000000000000000000000000000000..8f6b497e6b86cc551c27ccabf25561e4dbc698be --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/components/TabNavigationItem.kt @@ -0,0 +1,30 @@ +package band.effective.office.elevator.components + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.BottomNavigationItem +import androidx.compose.material.Icon +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import band.effective.office.elevator.lightGray +import band.effective.office.elevator.navigation.Tab + +@Composable +internal fun RowScope.TabNavigationItem( + tab: Tab, + selected: Boolean, + onSelect: () -> Unit, +) { + val selectedColor = MaterialTheme.colors.secondary + val unselectedColor = lightGray + BottomNavigationItem( + modifier = Modifier, + selected = selected, + selectedContentColor = selectedColor, + unselectedContentColor = unselectedColor, + onClick = onSelect, + icon = { Icon(imageVector = tab.icon, contentDescription = tab.title) }, + label = { Text(tab.title, color = if (selected) selectedColor else unselectedColor) } + ) +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/ApiResponse.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/ApiResponse.kt new file mode 100644 index 0000000000000000000000000000000000000000..6bbce5a7d76f213f8e1ceaaf7a4c56f82c685d0b --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/ApiResponse.kt @@ -0,0 +1,27 @@ +package band.effective.office.elevator.data + +sealed class ApiResponse { + /** + * Represents successful network responses (2xx). + */ + data class Success(val body: T) : ApiResponse() + + sealed class Error : ApiResponse() { + /** + * Represents server (50x) and client (40x) errors. + */ + data class HttpError(val code: Int, val errorBody: E?) : Error() + + /** + * Represent IOExceptions and connectivity issues. + */ + object NetworkError : Error() + + /** + * Represent SerializationExceptions. + */ + object SerializationError : Error() + + object UnknownError: Error() + } +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/HttpEngine.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/HttpEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..35097b2a6d2f2fc5baa04fac6ee4c2c0920365fa --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/HttpEngine.kt @@ -0,0 +1,5 @@ +package band.effective.office.elevator.data + +import io.ktor.client.HttpClient + +expect fun createHttpEngine(enableLogging: Boolean): HttpClient \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/NetworkClient.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/NetworkClient.kt new file mode 100644 index 0000000000000000000000000000000000000000..4d581370fe5fc26080b36622b90ba0101895f3d5 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/NetworkClient.kt @@ -0,0 +1,68 @@ +package band.effective.office.elevator.data + +import io.github.aakira.napier.Napier +import io.ktor.client.call.body +import io.ktor.client.plugins.ClientRequestException +import io.ktor.client.plugins.ResponseException +import io.ktor.client.plugins.ServerResponseException +import io.ktor.client.plugins.defaultRequest +import io.ktor.client.plugins.logging.DEFAULT +import io.ktor.client.plugins.logging.LogLevel +import io.ktor.client.plugins.logging.Logger +import io.ktor.client.plugins.logging.Logging +import io.ktor.client.request.HttpRequestBuilder +import io.ktor.client.request.request +import io.ktor.utils.io.errors.IOException +import kotlinx.serialization.SerializationException + +class NetworkClient(enableLogging: Boolean) { + + val ktor = createHttpEngine(enableLogging).config { + defaultRequest { + host = "0.0.0.0" + port = 80 +// host = "51.250.11.188" +// port = 2105 + } + install(Logging) { + logger = object : Logger { + override fun log(message: String) { + Napier.e("HTTP Client", null, message) + } + } + logger = Logger.DEFAULT + level = LogLevel.ALL + } + } + + suspend inline fun call( + block: HttpRequestBuilder.() -> Unit, + ): ApiResponse = + try { + val response = ktor.request { block() } + + when (val code = response.status.value) { + in 200..299 -> { + ApiResponse.Success(response.body()) + } + + else -> ApiResponse.Error.HttpError(code, null) + } + + } catch (e: ClientRequestException) { + ApiResponse.Error.HttpError(e.response.status.value, e.errorBody()) + } catch (e: ServerResponseException) { + ApiResponse.Error.HttpError(e.response.status.value, e.errorBody()) + } catch (e: IOException) { + ApiResponse.Error.NetworkError + } catch (e: SerializationException) { + ApiResponse.Error.SerializationError + } + + suspend inline fun ResponseException.errorBody(): E? = + try { + response.body() + } catch (e: SerializationException) { + null + } +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/OfficeElevatorRepositoryImpl.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/OfficeElevatorRepositoryImpl.kt new file mode 100644 index 0000000000000000000000000000000000000000..41527cd400f613e1f161b026f33c6ceae3ed8441 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/OfficeElevatorRepositoryImpl.kt @@ -0,0 +1,32 @@ +package band.effective.office.elevator.data + +import band.effective.office.elevator.domain.GoogleSignIn +import band.effective.office.elevator.domain.OfficeElevatorRepository +import io.ktor.client.request.parameter +import io.ktor.client.request.url + +class OfficeElevatorRepositoryImpl( + private val client: NetworkClient, + private val signInClient: GoogleSignIn +) : OfficeElevatorRepository { + + override suspend fun call(): ApiResponse { + return when (val result = signInClient.retrieveAuthorizedUser()) { + is ApiResponse.Error.HttpError -> ApiResponse.Error.HttpError( + result.code, + result.errorBody + ) + + ApiResponse.Error.NetworkError -> ApiResponse.Error.NetworkError + ApiResponse.Error.SerializationError -> ApiResponse.Error.SerializationError + ApiResponse.Error.UnknownError -> ApiResponse.Error.UnknownError + is ApiResponse.Success -> { + client.call { + url("elevate") + parameter("key", result.body.idToken) + } + + } + } + } +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/di/DataModuleDI.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/di/DataModuleDI.kt new file mode 100644 index 0000000000000000000000000000000000000000..7d35a88d83fc1a00002faee2f214f38faf320169 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/data/di/DataModuleDI.kt @@ -0,0 +1,8 @@ +package band.effective.office.elevator.data.di + +import band.effective.office.elevator.data.NetworkClient +import org.koin.dsl.module + +internal val dataModuleDI = module { + single { NetworkClient(enableLogging = true) } +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/di/AppModuleDI.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/di/AppModuleDI.kt new file mode 100644 index 0000000000000000000000000000000000000000..a715e8f1a3bb74d7194e61ca6c983c3142bc8309 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/di/AppModuleDI.kt @@ -0,0 +1,16 @@ +package band.effective.office.elevator.di + +import band.effective.office.elevator.data.di.dataModuleDI +import band.effective.office.elevator.domain.di.domainModuleDI +import org.koin.core.context.loadKoinModules +import org.koin.dsl.module + +val appModuleDI = module { + loadKoinModules( + listOf( + dataModuleDI, + domainModuleDI + ) + ) +} + diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/GoogleSignIn.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/GoogleSignIn.kt new file mode 100644 index 0000000000000000000000000000000000000000..2314c9b5a428621b6bed07905bea5e7e43e9bfc8 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/GoogleSignIn.kt @@ -0,0 +1,19 @@ +package band.effective.office.elevator.domain + +import band.effective.office.elevator.data.ApiResponse +import band.effective.office.elevator.domain.models.GoogleAccount + +interface GoogleSignIn { + suspend fun retrieveAuthorizedUser(): ApiResponse + + /** + * Sign in + * + */ + fun signIn(callback: SignInResultCallback) + + /** + * Sign out + */ + fun signOut() +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/OfficeElevatorRepository.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/OfficeElevatorRepository.kt new file mode 100644 index 0000000000000000000000000000000000000000..bb65f75abe707a9452b9b627c124c72bcbbbb8c4 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/OfficeElevatorRepository.kt @@ -0,0 +1,7 @@ +package band.effective.office.elevator.domain + +import band.effective.office.elevator.data.ApiResponse + +interface OfficeElevatorRepository { + suspend fun call(): ApiResponse +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/SignInResult.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/SignInResult.kt new file mode 100644 index 0000000000000000000000000000000000000000..33dc952b38e417309901635b8d40a43753a1faea --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/SignInResult.kt @@ -0,0 +1,6 @@ +package band.effective.office.elevator.domain + +interface SignInResultCallback { + fun onSuccess() + fun onFailure(message: String) +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/di/DomainModuleDI.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/di/DomainModuleDI.kt new file mode 100644 index 0000000000000000000000000000000000000000..08c89243f5b8ecbf78a5b31ae208fb5c3399b5b0 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/di/DomainModuleDI.kt @@ -0,0 +1,9 @@ +package band.effective.office.elevator.domain.di + +import band.effective.office.elevator.data.OfficeElevatorRepositoryImpl +import band.effective.office.elevator.domain.OfficeElevatorRepository +import org.koin.dsl.module + +internal val domainModuleDI = module { + single { OfficeElevatorRepositoryImpl(get(), get()) } +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/models/GoogleAccount.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/models/GoogleAccount.kt new file mode 100644 index 0000000000000000000000000000000000000000..cb1e18708b0361e00a64fced2c242311a9d200a5 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/domain/models/GoogleAccount.kt @@ -0,0 +1,8 @@ +package band.effective.office.elevator.domain.models + +data class GoogleAccount( + val email: String, + val name: String, + val photoUrl: String?, + val idToken: String? +) diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.kt new file mode 100644 index 0000000000000000000000000000000000000000..22e77d3ea8be9e78c8f5bb3f3629cc115288b4d3 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.kt @@ -0,0 +1,5 @@ +package band.effective.office.elevator.expects + +expect fun showToast(message: String) + +expect fun generateVibration(milliseconds: Long) diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/navigation/ElevatorTab.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/navigation/ElevatorTab.kt new file mode 100644 index 0000000000000000000000000000000000000000..819f2e218698939277cb7e6628f82af81b378158 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/navigation/ElevatorTab.kt @@ -0,0 +1,10 @@ +package band.effective.office.elevator.navigation + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Home +import band.effective.office.elevator.MainRes + +object ElevatorTab : Tab { + override val title = MainRes.string.elevator + override val icon = Icons.Default.Home +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/navigation/ProfileTab.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/navigation/ProfileTab.kt new file mode 100644 index 0000000000000000000000000000000000000000..88bb326c2cf53cceab1081305396ecefc0462af9 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/navigation/ProfileTab.kt @@ -0,0 +1,10 @@ +package band.effective.office.elevator.navigation + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Person +import band.effective.office.elevator.MainRes + +object ProfileTab : Tab { + override val title = MainRes.string.profile + override val icon = Icons.Default.Person +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/navigation/Tab.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/navigation/Tab.kt new file mode 100644 index 0000000000000000000000000000000000000000..9650c5b24bf5bf4f6091791130f87075f8d8847a --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/navigation/Tab.kt @@ -0,0 +1,8 @@ +package band.effective.office.elevator.navigation + +import androidx.compose.ui.graphics.vector.ImageVector + +interface Tab { + val title: String + val icon: ImageVector +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/authorization/AuthorizationComponent.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/authorization/AuthorizationComponent.kt new file mode 100644 index 0000000000000000000000000000000000000000..b731befeef59cf7c4d63a87a223d70b6ca36e080 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/authorization/AuthorizationComponent.kt @@ -0,0 +1,39 @@ +package band.effective.office.elevator.ui.authorization + +import band.effective.office.elevator.ui.authorization.store.AuthorizationStore +import band.effective.office.elevator.ui.authorization.store.AuthorizationStoreFactory +import com.arkivanov.decompose.ComponentContext +import com.arkivanov.mvikotlin.core.instancekeeper.getStore +import com.arkivanov.mvikotlin.core.store.StoreFactory +import com.arkivanov.mvikotlin.extensions.coroutines.labels +import kotlinx.coroutines.flow.Flow + +class AuthorizationComponent( + componentContext: ComponentContext, + storeFactory: StoreFactory, + private val output: (Output) -> Unit +) : ComponentContext by componentContext { + + private val authorizationStore = + instanceKeeper.getStore { + AuthorizationStoreFactory( + storeFactory = storeFactory + ).create() + } + + val label: Flow = authorizationStore.labels + + + fun onEvent(event: AuthorizationStore.Intent) { + authorizationStore.accept(event) + } + + fun onOutput(output: Output) { + output(output) + } + + sealed class Output { + object OpenMainScreen : Output() + } + +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/authorization/AuthorizationScreen.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/authorization/AuthorizationScreen.kt new file mode 100644 index 0000000000000000000000000000000000000000..e2cc2c77ee082a77137e09bb38c017f9e35ed577 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/authorization/AuthorizationScreen.kt @@ -0,0 +1,41 @@ +package band.effective.office.elevator.ui.authorization + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import band.effective.office.elevator.components.GoogleSignInButton +import band.effective.office.elevator.expects.showToast +import band.effective.office.elevator.ui.authorization.store.AuthorizationStore + + +@Composable +fun AuthorizationScreen(component: AuthorizationComponent) { + + LaunchedEffect(component) { + component.label.collect { label -> + when (label) { + is AuthorizationStore.Label.AuthorizationFailure -> showToast(label.message) + AuthorizationStore.Label.AuthorizationSuccess -> component.onOutput( + AuthorizationComponent.Output.OpenMainScreen + ) + } + } + } + + AuthorizationScreenContent(onEvent = component::onEvent) +} + +@Composable +private fun AuthorizationScreenContent(onEvent: (AuthorizationStore.Intent) -> Unit) { + Box(modifier = Modifier.fillMaxSize().padding(16.dp)) { + GoogleSignInButton( + modifier = Modifier.align(Alignment.Center), + onClick = { onEvent(AuthorizationStore.Intent.SignInButtonClicked) }) + } +} + diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/authorization/store/AuthorizationStore.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/authorization/store/AuthorizationStore.kt new file mode 100644 index 0000000000000000000000000000000000000000..d1e4387101d6f4ac8cfa11dcdc9c07561ba033d4 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/authorization/store/AuthorizationStore.kt @@ -0,0 +1,18 @@ +package band.effective.office.elevator.ui.authorization.store + +import com.arkivanov.mvikotlin.core.store.Store + +interface AuthorizationStore : + Store { + + sealed interface Intent { + object SignInButtonClicked : Intent + } + + class State + + sealed interface Label { + object AuthorizationSuccess : Label + data class AuthorizationFailure(val message: String) : Label + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/authorization/store/AuthorizationStoreImpl.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/authorization/store/AuthorizationStoreImpl.kt new file mode 100644 index 0000000000000000000000000000000000000000..c9e4bb9f9e35536195659c52d529fc0385d846bd --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/authorization/store/AuthorizationStoreImpl.kt @@ -0,0 +1,58 @@ +package band.effective.office.elevator.ui.authorization.store + +import band.effective.office.elevator.domain.GoogleSignIn +import band.effective.office.elevator.domain.SignInResultCallback +import band.effective.office.elevator.ui.authorization.store.AuthorizationStore.Intent +import band.effective.office.elevator.ui.authorization.store.AuthorizationStore.Label +import band.effective.office.elevator.ui.authorization.store.AuthorizationStore.State +import com.arkivanov.mvikotlin.core.store.Store +import com.arkivanov.mvikotlin.core.store.StoreFactory +import com.arkivanov.mvikotlin.core.utils.ExperimentalMviKotlinApi +import com.arkivanov.mvikotlin.extensions.coroutines.CoroutineExecutor +import com.arkivanov.mvikotlin.extensions.coroutines.coroutineBootstrapper +import kotlinx.coroutines.launch +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +internal class AuthorizationStoreFactory( + private val storeFactory: StoreFactory +) : KoinComponent { + + private val signInClient: GoogleSignIn by inject() + + @OptIn(ExperimentalMviKotlinApi::class) + fun create(): AuthorizationStore = + object : AuthorizationStore, Store by storeFactory.create( + name = "AuthorizationStore", + initialState = State(), + bootstrapper = coroutineBootstrapper { + launch { dispatch(Action.CheckUserAlreadySigned) } + }, + executorFactory = ::ExecutorImpl, + ) {} + + private sealed interface Action { + object CheckUserAlreadySigned : Action + } + + + private inner class ExecutorImpl : CoroutineExecutor() { + override fun executeIntent(intent: Intent, getState: () -> State) { + when (intent) { + Intent.SignInButtonClicked -> startAuthorization() + } + } + + private fun startAuthorization() { + signInClient.signIn(object : SignInResultCallback { + override fun onSuccess() { + publish(Label.AuthorizationSuccess) + } + + override fun onFailure(message: String) { + publish(Label.AuthorizationFailure(message)) + } + }) + } + } +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/elevator/ElevatorComponent.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/elevator/ElevatorComponent.kt new file mode 100644 index 0000000000000000000000000000000000000000..16dc653ad3bbde2dfb52e8d3063a6bcd16a58137 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/elevator/ElevatorComponent.kt @@ -0,0 +1,32 @@ +package band.effective.office.elevator.ui.elevator + +import band.effective.office.elevator.ui.elevator.store.ElevatorStore +import band.effective.office.elevator.ui.elevator.store.ElevatorStoreFactory +import com.arkivanov.decompose.ComponentContext +import com.arkivanov.mvikotlin.core.instancekeeper.getStore +import com.arkivanov.mvikotlin.core.store.StoreFactory +import com.arkivanov.mvikotlin.extensions.coroutines.labels +import com.arkivanov.mvikotlin.extensions.coroutines.stateFlow +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.StateFlow + +class ElevatorComponent(componentContext: ComponentContext, storeFactory: StoreFactory) : + ComponentContext by componentContext { + + private val elevatorStore = + instanceKeeper.getStore { + ElevatorStoreFactory( + storeFactory = storeFactory, + ).create() + } + + @OptIn(ExperimentalCoroutinesApi::class) + val state: StateFlow = elevatorStore.stateFlow + + val label: Flow = elevatorStore.labels + + fun onEvent(event: ElevatorStore.Intent) { + elevatorStore.accept(event) + } +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/elevator/ElevatorScreen.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/elevator/ElevatorScreen.kt new file mode 100644 index 0000000000000000000000000000000000000000..4b9ed7a9313859465c71f65d80e41bdfda170ccb --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/elevator/ElevatorScreen.kt @@ -0,0 +1,107 @@ +package band.effective.office.elevator.ui.elevator + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Snackbar +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import band.effective.office.elevator.MainRes +import band.effective.office.elevator.components.ElevatorButton +import band.effective.office.elevator.successGreen +import band.effective.office.elevator.ui.elevator.store.ElevatorStore +import kotlinx.coroutines.delay + +@Composable +fun ElevatorScreen(component: ElevatorComponent) { + + val state by component.state.collectAsState() + var isErrorMessageVisible by remember { mutableStateOf(false) } + var isSuccessMessageVisible by remember { mutableStateOf(false) } + var errorMessage by remember { mutableStateOf(MainRes.string.something_went_wrong) } + + LaunchedEffect(component) { + component.label.collect { label -> + when (label) { + is ElevatorStore.Label.ShowError -> { + errorMessage = label.errorState.message ?: MainRes.string.something_went_wrong + isErrorMessageVisible = true + delay(3000) + isErrorMessageVisible = false + } + + ElevatorStore.Label.ShowSuccess -> { + isSuccessMessageVisible = true + delay(3000) + isSuccessMessageVisible = false + } + } + } + } + + Box(modifier = Modifier.fillMaxSize()) { + ElevatorScreenContent( + isButtonActive = state.buttonActive, + onElevatorButtonClick = component::onEvent + ) + SnackBarErrorMessage( + modifier = Modifier.align(Alignment.BottomCenter), + isVisible = isErrorMessageVisible, + message = errorMessage + ) + SnackBarSuccessMessage( + modifier = Modifier.align(Alignment.BottomCenter), + isVisible = isSuccessMessageVisible + ) + } + +} + +@Composable +private fun SnackBarErrorMessage(modifier: Modifier, isVisible: Boolean, message: String) { + AnimatedVisibility(modifier = modifier, visible = isVisible) { + Snackbar(modifier.padding(16.dp), backgroundColor = MaterialTheme.colors.error) { + Text(text = message) + } + } +} + +@Composable +private fun SnackBarSuccessMessage(modifier: Modifier, isVisible: Boolean) { + AnimatedVisibility(modifier = modifier, visible = isVisible) { + Snackbar( + modifier.padding(16.dp), + backgroundColor = successGreen + ) { + Text(text = MainRes.string.elevator_called_successfully) + } + } +} + + +@Composable +private fun ElevatorScreenContent( + isButtonActive: Boolean, + onElevatorButtonClick: (ElevatorStore.Intent) -> Unit +) { + Box( + modifier = Modifier.fillMaxSize().padding(16.dp) + ) { + ElevatorButton( + modifier = Modifier.align(Alignment.Center), + isActive = isButtonActive, + onButtonClick = { onElevatorButtonClick(ElevatorStore.Intent.OnButtonClicked) } + ) + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/elevator/store/ElevatorStore.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/elevator/store/ElevatorStore.kt new file mode 100644 index 0000000000000000000000000000000000000000..4d9a49ee0ac29afc07aee6e49029cf78840bedc0 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/elevator/store/ElevatorStore.kt @@ -0,0 +1,19 @@ +package band.effective.office.elevator.ui.elevator.store + +import com.arkivanov.mvikotlin.core.store.Store + +interface ElevatorStore : Store { + + sealed interface Intent { + object OnButtonClicked : Intent + } + + sealed interface Label { + data class ShowError(val errorState: ErrorState) : Label + object ShowSuccess : Label + } + + data class State(val buttonActive: Boolean) + + data class ErrorState(val message: String?) +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/elevator/store/ElevatorStoreFactory.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/elevator/store/ElevatorStoreFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..15a32d12d07f7304f0fe23e73213209f7e0e5d40 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/elevator/store/ElevatorStoreFactory.kt @@ -0,0 +1,95 @@ +package band.effective.office.elevator.ui.elevator.store + +import band.effective.office.elevator.MainRes +import band.effective.office.elevator.data.ApiResponse +import band.effective.office.elevator.domain.OfficeElevatorRepository +import band.effective.office.elevator.ui.elevator.store.ElevatorStore.Intent +import band.effective.office.elevator.ui.elevator.store.ElevatorStore.State +import com.arkivanov.mvikotlin.core.store.Reducer +import com.arkivanov.mvikotlin.core.store.Store +import com.arkivanov.mvikotlin.core.store.StoreFactory +import com.arkivanov.mvikotlin.extensions.coroutines.CoroutineExecutor +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +internal class ElevatorStoreFactory( + private val storeFactory: StoreFactory +) : KoinComponent { + + private val officeElevatorRepository: OfficeElevatorRepository by inject() + + fun create(): ElevatorStore = + object : ElevatorStore, Store by storeFactory.create( + name = "ElevatorStore", + initialState = State( + buttonActive = false, + ), + executorFactory = ::ExecutorImpl, + reducer = ReducerImpl + ) {} + + private sealed interface Msg { + data class SwitchButton(val isActive: Boolean) : Msg + } + + private inner class ExecutorImpl : + CoroutineExecutor() { + override fun executeIntent(intent: Intent, getState: () -> State) { + when (intent) { + Intent.OnButtonClicked -> { + if (!getState().buttonActive) + doElevatorCall() + } + } + } + + private fun doElevatorCall() { + scope.launch { + dispatch(Msg.SwitchButton(true)) + delay(1000) + publish( + when (val result = officeElevatorRepository.call()) { + is ApiResponse.Error.HttpError -> ElevatorStore.Label.ShowError( + ElevatorStore.ErrorState( + MainRes.string.server_error.format(result.code.toString()) + ) + ) + + ApiResponse.Error.NetworkError -> ElevatorStore.Label.ShowError( + ElevatorStore.ErrorState( + MainRes.string.network_error + ) + ) + + ApiResponse.Error.SerializationError -> ElevatorStore.Label.ShowError( + ElevatorStore.ErrorState( + MainRes.string.developer_error + ) + ) + + ApiResponse.Error.UnknownError -> ElevatorStore.Label.ShowError( + ElevatorStore.ErrorState( + MainRes.string.developer_error + ) + ) + + is ApiResponse.Success -> { + ElevatorStore.Label.ShowSuccess + } + } + ) + delay(1000) + dispatch(Msg.SwitchButton(false)) + } + } + } + + private object ReducerImpl : Reducer { + override fun State.reduce(message: Msg): State = + when (message) { + is Msg.SwitchButton -> copy(buttonActive = message.isActive) + } + } +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/helper/LocalSafeArea.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/helper/LocalSafeArea.kt new file mode 100644 index 0000000000000000000000000000000000000000..ddb6d82cd94c13fba502832c4966e9ff24cd5e81 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/helper/LocalSafeArea.kt @@ -0,0 +1,8 @@ +package band.effective.office.elevator.ui.helper + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.runtime.compositionLocalOf +import androidx.compose.ui.unit.dp + +// Define a CompositionLocal global object that will contain IOS safe area +internal val LocalSafeArea = compositionLocalOf { PaddingValues(0.dp) } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/main/MainComponent.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/main/MainComponent.kt new file mode 100644 index 0000000000000000000000000000000000000000..491dd20edeec698dc41c833fe8ad8c77430c2e38 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/main/MainComponent.kt @@ -0,0 +1,71 @@ +package band.effective.office.elevator.ui.main + +import band.effective.office.elevator.ui.elevator.ElevatorComponent +import band.effective.office.elevator.ui.profile.ProfileComponent +import com.arkivanov.decompose.ComponentContext +import com.arkivanov.decompose.router.stack.ChildStack +import com.arkivanov.decompose.router.stack.StackNavigation +import com.arkivanov.decompose.router.stack.bringToFront +import com.arkivanov.decompose.router.stack.childStack +import com.arkivanov.decompose.value.Value +import com.arkivanov.essenty.parcelable.Parcelable +import com.arkivanov.essenty.parcelable.Parcelize +import com.arkivanov.mvikotlin.core.store.StoreFactory + +class MainComponent( + componentContext: ComponentContext, + private val storeFactory: StoreFactory, + private val openAuthorizationFlow: () -> Unit +) : + ComponentContext by componentContext { + + private val navigation = StackNavigation() + private val stack = childStack( + source = navigation, + initialStack = { listOf(Config.Elevator) }, + childFactory = ::child, + ) + val childStack: Value> = stack + + private fun child(config: Config, componentContext: ComponentContext): Child = when (config) { + is Config.Elevator -> Child.Elevator(ElevatorComponent(componentContext, storeFactory)) + is Config.Profile -> Child.Profile( + ProfileComponent( + componentContext, + storeFactory, + ::profileOutput + ) + ) + } + + fun onOutput(output: Output) { + when (output) { + Output.OpenElevatorTab -> navigation.bringToFront(Config.Elevator) + Output.OpenProfileTab -> navigation.bringToFront(Config.Profile) + } + } + + private fun profileOutput(output: ProfileComponent.Output) { + when (output) { + ProfileComponent.Output.OpenAuthorizationFlow -> openAuthorizationFlow() + } + } + + sealed class Child { + class Elevator(val component: ElevatorComponent) : Child() + class Profile(val component: ProfileComponent) : Child() + } + + private sealed interface Config : Parcelable { + @Parcelize + object Elevator : Config + + @Parcelize + object Profile : Config + } + + sealed class Output { + object OpenProfileTab : Output() + object OpenElevatorTab : Output() + } +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/main/MainScreen.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/main/MainScreen.kt new file mode 100644 index 0000000000000000000000000000000000000000..33e32eff314a3cd37cf304f55e24e6d0a6ab29e4 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/main/MainScreen.kt @@ -0,0 +1,101 @@ +package band.effective.office.elevator.ui.main + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.material.BottomNavigation +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import band.effective.office.elevator.components.TabNavigationItem +import band.effective.office.elevator.navigation.ElevatorTab +import band.effective.office.elevator.navigation.ProfileTab +import band.effective.office.elevator.ui.elevator.ElevatorScreen +import band.effective.office.elevator.ui.profile.ProfileScreen +import com.arkivanov.decompose.extensions.compose.jetbrains.stack.Children +import com.arkivanov.decompose.extensions.compose.jetbrains.stack.animation.Direction +import com.arkivanov.decompose.extensions.compose.jetbrains.stack.animation.StackAnimation +import com.arkivanov.decompose.extensions.compose.jetbrains.stack.animation.StackAnimator +import com.arkivanov.decompose.extensions.compose.jetbrains.stack.animation.isEnter +import com.arkivanov.decompose.extensions.compose.jetbrains.stack.animation.slide +import com.arkivanov.decompose.extensions.compose.jetbrains.stack.animation.stackAnimation +import com.arkivanov.decompose.extensions.compose.jetbrains.subscribeAsState + +@Composable +fun MainScreen(component: MainComponent) { + val childStack by component.childStack.subscribeAsState() + val activeComponent = childStack.active.instance + Scaffold( + modifier = Modifier, + content = { innerPadding -> + Box(modifier = Modifier.padding(innerPadding)) { + Children( + stack = component.childStack, + modifier = Modifier, + animation = tabAnimation() + ) { + when (val child = it.instance) { + is MainComponent.Child.Elevator -> ElevatorScreen(child.component) + is MainComponent.Child.Profile -> ProfileScreen(child.component) + } + } + } + }, + bottomBar = { + Box(modifier = Modifier.background(MaterialTheme.colors.primary)) { + BottomNavigation { + TabNavigationItem( + tab = ElevatorTab, + selected = activeComponent is MainComponent.Child.Elevator + ) { + component.onOutput(MainComponent.Output.OpenElevatorTab) + } + TabNavigationItem( + tab = ProfileTab, + selected = activeComponent is MainComponent.Child.Profile + ) { + component.onOutput(MainComponent.Output.OpenProfileTab) + } + } + } + } + ) +} + +private val MainComponent.Child.index: Int + get() = + when (this) { + is MainComponent.Child.Elevator -> 0 + is MainComponent.Child.Profile -> 1 + } + +@Composable +private fun tabAnimation(): StackAnimation = + stackAnimation { child, otherChild, direction -> + val index = child.instance.index + val otherIndex = otherChild.instance.index + val anim = slide() + if ((index > otherIndex) == direction.isEnter) anim else anim.flipSide() + } + +private fun StackAnimator.flipSide(): StackAnimator = + StackAnimator { direction, isInitial, onFinished, content -> + invoke( + direction = direction.flipSide(), + isInitial = isInitial, + onFinished = onFinished, + content = content, + ) + } + +@Suppress("OPT_IN_USAGE") +private fun Direction.flipSide(): Direction = + when (this) { + Direction.ENTER_FRONT -> Direction.ENTER_BACK + Direction.EXIT_FRONT -> Direction.EXIT_BACK + Direction.ENTER_BACK -> Direction.ENTER_FRONT + Direction.EXIT_BACK -> Direction.EXIT_FRONT + } + diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/profile/ProfileComponent.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/profile/ProfileComponent.kt new file mode 100644 index 0000000000000000000000000000000000000000..33884963af4dce50075a2870696d40988a7621ed --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/profile/ProfileComponent.kt @@ -0,0 +1,44 @@ +package band.effective.office.elevator.ui.profile + +import band.effective.office.elevator.ui.profile.store.ProfileStore +import band.effective.office.elevator.ui.profile.store.ProfileStoreFactory +import com.arkivanov.decompose.ComponentContext +import com.arkivanov.mvikotlin.core.instancekeeper.getStore +import com.arkivanov.mvikotlin.core.store.StoreFactory +import com.arkivanov.mvikotlin.extensions.coroutines.labels +import com.arkivanov.mvikotlin.extensions.coroutines.stateFlow +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.StateFlow + +class ProfileComponent( + componentContext: ComponentContext, + storeFactory: StoreFactory, + private val output: (Output) -> Unit +) : + ComponentContext by componentContext { + + private val profileStore = instanceKeeper.getStore { + ProfileStoreFactory( + storeFactory = storeFactory + ).create() + } + + @OptIn(ExperimentalCoroutinesApi::class) + val state: StateFlow = profileStore.stateFlow + + val label: Flow = profileStore.labels + + fun onEvent(event: ProfileStore.Intent) { + profileStore.accept(event) + } + + fun onOutput(output: Output) { + output(output) + } + + sealed interface Output { + object OpenAuthorizationFlow : Output + } + +} diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileScreen.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/profile/ProfileScreen.kt similarity index 54% rename from mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileScreen.kt rename to composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/profile/ProfileScreen.kt index ecba2882c297369c9d4e4c31e9dd665c26589258..5425f4d40f7134aecfe7041d02980b40aa8afd52 100644 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileScreen.kt +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/profile/ProfileScreen.kt @@ -1,28 +1,67 @@ -package band.effective.office.elevator.common.compose.screens.profile +package band.effective.office.elevator.ui.profile import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.* +import androidx.compose.material.Icon +import androidx.compose.material.IconButton +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Surface +import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ExitToApp import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp +import band.effective.office.elevator.MainRes import band.effective.office.elevator.common.compose.components.GrayText -import band.effective.office.elevator.common.compose.expects.ImageVector -import band.effective.office.elevator.common.compose.theme.colors.unselectedColor +import band.effective.office.elevator.lightGray +import band.effective.office.elevator.ui.profile.store.ProfileStore import com.seiko.imageloader.model.ImageRequest import com.seiko.imageloader.rememberAsyncImagePainter +import io.github.skeptick.libres.compose.painterResource @Composable -internal fun ProfileScreen(viewModel: ProfileScreenViewModel, onSignOut: () -> Unit) { - val state by viewModel.state.collectAsState() +fun ProfileScreen(component: ProfileComponent) { + val state by component.state.collectAsState() + LaunchedEffect(component) { + component.label.collect { label -> + when (label) { + ProfileStore.Label.OnSignedOut -> component.onOutput(ProfileComponent.Output.OpenAuthorizationFlow) + } + } + } + + ProfileScreenContent( + imageUrl = state.imageUrl, + username = state.username, + email = state.email, + onSignOut = { component.onEvent(ProfileStore.Intent.SignOutClicked) } + ) +} + +@Composable +internal fun ProfileScreenContent( + imageUrl: String?, + username: String?, + email: String?, + onSignOut: () -> Unit +) { Column( modifier = Modifier.fillMaxSize().padding(16.dp), horizontalAlignment = Alignment.CenterHorizontally, @@ -35,12 +74,7 @@ internal fun ProfileScreen(viewModel: ProfileScreenViewModel, onSignOut: () -> U ) { Text(text = "Profile", style = MaterialTheme.typography.h3) Spacer(modifier = Modifier.weight(.1f)) - IconButton( - onClick = { - viewModel.sendEvent(ProfileEvent.SignOut) - onSignOut() - } - ) { + IconButton(onClick = onSignOut) { Row(verticalAlignment = Alignment.CenterVertically) { Icon( Icons.Default.ExitToApp, @@ -51,7 +85,7 @@ internal fun ProfileScreen(viewModel: ProfileScreenViewModel, onSignOut: () -> U } } Spacer(modifier = Modifier.height(32.dp)) - state.imageUrl?.let { url -> + imageUrl?.let { url -> val request = remember(url) { ImageRequest { data(url) @@ -63,7 +97,7 @@ internal fun ProfileScreen(viewModel: ProfileScreenViewModel, onSignOut: () -> U Surface( modifier = Modifier.size(120.dp).align(Alignment.Center), shape = CircleShape, - color = unselectedColor + color = lightGray ) { Image( modifier = Modifier.fillMaxSize().align(Alignment.Center), @@ -71,15 +105,19 @@ internal fun ProfileScreen(viewModel: ProfileScreenViewModel, onSignOut: () -> U contentDescription = null, ) } - ImageVector("avatar_border", modifier = Modifier, tint = null) + Image( + modifier = Modifier, + painter = painterResource(MainRes.image.profile_border), + contentDescription = null + ) } } Spacer(modifier = Modifier.height(16.dp)) - state.username?.let { + username?.let { Text(it, style = MaterialTheme.typography.h5) } Spacer(modifier = Modifier.height(8.dp)) - state.email?.let { + email?.let { GrayText(text = it, style = MaterialTheme.typography.subtitle1) } Spacer(modifier = Modifier.weight(1f)) diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/profile/store/ProfileStore.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/profile/store/ProfileStore.kt new file mode 100644 index 0000000000000000000000000000000000000000..a308fb5132917b0e5b2e97d23207cfc0c008d4f5 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/profile/store/ProfileStore.kt @@ -0,0 +1,20 @@ +package band.effective.office.elevator.ui.profile.store + +import com.arkivanov.mvikotlin.core.store.Store + +interface ProfileStore : Store { + + sealed interface Intent { + object SignOutClicked : Intent + } + + data class State( + val imageUrl: String?, + val username: String?, + val email: String?, + ) + + sealed interface Label { + object OnSignedOut : Label + } +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/profile/store/ProfileStoreFactory.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/profile/store/ProfileStoreFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..f7d1acc0dc50e9b69ab1174729b4e4039ad07b3c --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/profile/store/ProfileStoreFactory.kt @@ -0,0 +1,86 @@ +package band.effective.office.elevator.ui.profile.store + +import band.effective.office.elevator.data.ApiResponse +import band.effective.office.elevator.domain.GoogleSignIn +import band.effective.office.elevator.domain.models.GoogleAccount +import band.effective.office.elevator.ui.profile.store.ProfileStore.Intent +import band.effective.office.elevator.ui.profile.store.ProfileStore.State +import com.arkivanov.mvikotlin.core.store.Reducer +import com.arkivanov.mvikotlin.core.store.Store +import com.arkivanov.mvikotlin.core.store.StoreFactory +import com.arkivanov.mvikotlin.core.utils.ExperimentalMviKotlinApi +import com.arkivanov.mvikotlin.extensions.coroutines.CoroutineExecutor +import com.arkivanov.mvikotlin.extensions.coroutines.coroutineBootstrapper +import kotlinx.coroutines.launch +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +internal class ProfileStoreFactory( + private val storeFactory: StoreFactory +) : KoinComponent { + + private val signInClient: GoogleSignIn by inject() + + @OptIn(ExperimentalMviKotlinApi::class) + fun create(): ProfileStore = + object : ProfileStore, Store by storeFactory.create( + name = "ProfileStore", + initialState = State(imageUrl = null, username = null, email = null), + bootstrapper = coroutineBootstrapper { + dispatch(Action.FetchUserInfo) + }, + executorFactory = ::ExecutorImpl, + reducer = ReducerImpl + ) {} + + private sealed interface Action { + object FetchUserInfo : Action + } + + private sealed interface Msg { + data class ProfileData(val user: GoogleAccount) : Msg + } + + private inner class ExecutorImpl : + CoroutineExecutor() { + override fun executeIntent(intent: Intent, getState: () -> State) { + when (intent) { + Intent.SignOutClicked -> doSignOut() + } + } + + private fun doSignOut() { + signInClient.signOut() + publish(ProfileStore.Label.OnSignedOut) + } + + override fun executeAction(action: Action, getState: () -> State) { + when (action) { + Action.FetchUserInfo -> fetchUserInfo() + } + } + + private fun fetchUserInfo() { + scope.launch { + when (val result = signInClient.retrieveAuthorizedUser()) { + is ApiResponse.Error.HttpError -> TODO() + ApiResponse.Error.NetworkError -> TODO() + ApiResponse.Error.SerializationError -> TODO() + ApiResponse.Error.UnknownError -> TODO() + is ApiResponse.Success -> dispatch(Msg.ProfileData(user = result.body)) + } + } + } + } + + private object ReducerImpl : Reducer { + override fun State.reduce(message: Msg): State = + when (message) { + is Msg.ProfileData -> State( + imageUrl = message.user.photoUrl, + username = message.user.name, + email = message.user.email + ) + } + } +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/root/RootComponent.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/root/RootComponent.kt new file mode 100644 index 0000000000000000000000000000000000000000..4b1484aa77a078dc8fdfb145050be591c5828697 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/root/RootComponent.kt @@ -0,0 +1,118 @@ +package band.effective.office.elevator.ui.root + +import band.effective.office.elevator.ui.authorization.AuthorizationComponent +import band.effective.office.elevator.ui.main.MainComponent +import band.effective.office.elevator.ui.root.store.RootStore +import band.effective.office.elevator.ui.root.store.RootStoreImplFactory +import com.arkivanov.decompose.ComponentContext +import com.arkivanov.decompose.router.stack.ChildStack +import com.arkivanov.decompose.router.stack.StackNavigation +import com.arkivanov.decompose.router.stack.childStack +import com.arkivanov.decompose.router.stack.replaceAll +import com.arkivanov.decompose.value.Value +import com.arkivanov.essenty.parcelable.Parcelable +import com.arkivanov.essenty.parcelable.Parcelize +import com.arkivanov.mvikotlin.core.instancekeeper.getStore +import com.arkivanov.mvikotlin.extensions.coroutines.labels +import com.arkivanov.mvikotlin.main.store.DefaultStoreFactory +import io.github.aakira.napier.DebugAntilog +import io.github.aakira.napier.Napier +import kotlinx.coroutines.flow.Flow + +class RootComponent internal constructor( + componentContext: ComponentContext, + private val storeFactory: DefaultStoreFactory, + private val authorization: (ComponentContext, (AuthorizationComponent.Output) -> Unit) -> AuthorizationComponent, + private val main: (ComponentContext, () -> Unit) -> MainComponent, +) : ComponentContext by componentContext { + + init { + Napier.base(DebugAntilog()) + } + + private val navigation = StackNavigation() + + private val stack = childStack( + source = navigation, + initialStack = { listOf(Config.Undefined) }, + handleBackButton = true, + childFactory = ::child + ) + + val childStack: Value> = stack + + private val rootStore = + instanceKeeper.getStore { + RootStoreImplFactory( + storeFactory = storeFactory + ).create() + } + + val label: Flow = rootStore.labels + + constructor(componentContext: ComponentContext, storeFactory: DefaultStoreFactory) : this( + componentContext, + storeFactory, + authorization = { childContext, output -> + AuthorizationComponent(childContext, storeFactory, output) + }, + main = { childContext, onSignOut -> + MainComponent( + childContext, + storeFactory, + openAuthorizationFlow = onSignOut + ) + }) + + private fun child(config: Config, componentContext: ComponentContext): Child = + when (config) { + is Config.Authorization -> Child.AuthorizationChild( + authorization( + componentContext, + ::onAuthorizationOutput + ) + ) + + is Config.Main -> Child.MainChild(main(componentContext) { + navigation.replaceAll(Config.Authorization) + }) + + Config.Undefined -> Child.Undefined + } + + + private fun onAuthorizationOutput(output: AuthorizationComponent.Output) { + when (output) { + AuthorizationComponent.Output.OpenMainScreen -> navigation.replaceAll(Config.Main) + } + } + + fun onOutput(output: Output) { + when (output) { + Output.OpenMainScreen -> navigation.replaceAll(Config.Main) + Output.OpenAuthorizationFlow -> navigation.replaceAll(Config.Authorization) + } + } + + sealed interface Output { + object OpenMainScreen : Output + object OpenAuthorizationFlow : Output + } + + sealed class Child { + object Undefined : Child() + class AuthorizationChild(val component: AuthorizationComponent) : Child() + class MainChild(val component: MainComponent) : Child() + } + + sealed class Config : Parcelable { + @Parcelize + object Undefined : Config() + + @Parcelize + object Authorization : Config() + + @Parcelize + object Main : Config() + } +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/root/RootContent.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/root/RootContent.kt new file mode 100644 index 0000000000000000000000000000000000000000..e17c34df97fd12521b7be1ffc43b5430feefc5cd --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/root/RootContent.kt @@ -0,0 +1,43 @@ +package band.effective.office.elevator.ui.root + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Modifier +import band.effective.office.elevator.ui.authorization.AuthorizationScreen +import band.effective.office.elevator.ui.main.MainScreen +import band.effective.office.elevator.ui.root.store.RootStore +import com.arkivanov.decompose.extensions.compose.jetbrains.stack.Children +import com.arkivanov.decompose.extensions.compose.jetbrains.stack.animation.fade +import com.arkivanov.decompose.extensions.compose.jetbrains.stack.animation.plus +import com.arkivanov.decompose.extensions.compose.jetbrains.stack.animation.scale +import com.arkivanov.decompose.extensions.compose.jetbrains.stack.animation.stackAnimation + +@Composable +fun RootContent(component: RootComponent, modifier: Modifier = Modifier) { + + LaunchedEffect(component) { + component.label.collect { label -> + when (label) { + RootStore.Label.UserAlreadySigned -> component.onOutput( + RootComponent.Output.OpenMainScreen + ) + + RootStore.Label.UserNotSigned -> component.onOutput(RootComponent.Output.OpenAuthorizationFlow) + } + } + } + + Children( + stack = component.childStack, + modifier = modifier, + animation = stackAnimation(fade() + scale()), + ) { + when (val child = it.instance) { + is RootComponent.Child.AuthorizationChild -> AuthorizationScreen(child.component) + is RootComponent.Child.MainChild -> MainScreen(child.component) + RootComponent.Child.Undefined -> { + // Wait until fetch Google account if user signed in previously + } + } + } +} diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/root/store/RootStore.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/root/store/RootStore.kt new file mode 100644 index 0000000000000000000000000000000000000000..1ef8345dd9c687d9dd0a5a57805a43263a981d89 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/root/store/RootStore.kt @@ -0,0 +1,14 @@ +package band.effective.office.elevator.ui.root.store + +import com.arkivanov.mvikotlin.core.store.Store + +interface RootStore : + Store { + + sealed interface Label { + object UserAlreadySigned : Label + object UserNotSigned : Label + } + + class State +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/root/store/RootStoreImpl.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/root/store/RootStoreImpl.kt new file mode 100644 index 0000000000000000000000000000000000000000..9596386d48b585b80ffba3aa6f176286f06faed6 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/root/store/RootStoreImpl.kt @@ -0,0 +1,59 @@ +package band.effective.office.elevator.ui.root.store + +import band.effective.office.elevator.data.ApiResponse +import band.effective.office.elevator.domain.GoogleSignIn +import band.effective.office.elevator.ui.root.store.RootStore.Label +import band.effective.office.elevator.ui.root.store.RootStore.State +import com.arkivanov.mvikotlin.core.store.Store +import com.arkivanov.mvikotlin.core.store.StoreFactory +import com.arkivanov.mvikotlin.core.utils.ExperimentalMviKotlinApi +import com.arkivanov.mvikotlin.extensions.coroutines.CoroutineExecutor +import com.arkivanov.mvikotlin.extensions.coroutines.coroutineBootstrapper +import kotlinx.coroutines.launch +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +internal class RootStoreImplFactory( + private val storeFactory: StoreFactory +) : KoinComponent { + + private val signInClient: GoogleSignIn by inject() + + @OptIn(ExperimentalMviKotlinApi::class) + fun create(): RootStore = + object : RootStore, Store by storeFactory.create( + name = "RootStoreImplStore", + initialState = State(), + bootstrapper = coroutineBootstrapper { + launch { dispatch(Action.CheckUserAlreadySigned) } + }, + executorFactory = ::ExecutorImpl + ) {} + + private sealed interface Action { + object CheckUserAlreadySigned : Action + } + + private inner class ExecutorImpl : CoroutineExecutor() { + override fun executeAction(action: Action, getState: () -> State) { + when (action) { + Action.CheckUserAlreadySigned -> checkUserAlreadySigned() + } + } + + private fun checkUserAlreadySigned() { + scope.launch { + when (signInClient.retrieveAuthorizedUser()) { + is ApiResponse.Error.HttpError -> TODO() + ApiResponse.Error.NetworkError -> TODO() + ApiResponse.Error.SerializationError -> TODO() + ApiResponse.Error.UnknownError -> { + publish(Label.UserNotSigned) + } + + is ApiResponse.Success -> publish(Label.UserAlreadySigned) + } + } + } + } +} diff --git a/mobile/android/src/main/res/drawable/google.png b/composeApp/src/commonMain/libres/images/google_icon.png similarity index 100% rename from mobile/android/src/main/res/drawable/google.png rename to composeApp/src/commonMain/libres/images/google_icon.png diff --git a/mobile/iosApp/iosApp/Assets.xcassets/avatar_border.imageset/Group 2.svg b/composeApp/src/commonMain/libres/images/profile_border.svg similarity index 100% rename from mobile/iosApp/iosApp/Assets.xcassets/avatar_border.imageset/Group 2.svg rename to composeApp/src/commonMain/libres/images/profile_border.svg diff --git a/composeApp/src/commonMain/libres/strings/strings_en.xml b/composeApp/src/commonMain/libres/strings/strings_en.xml new file mode 100644 index 0000000000000000000000000000000000000000..256dcfa5889c38fadb68fffbfc53f810a7febd3c --- /dev/null +++ b/composeApp/src/commonMain/libres/strings/strings_en.xml @@ -0,0 +1,24 @@ + + + Office Elevator + Sign in to Effective email + Something went wrong. Please try again + + + Profile + Elevator + + + + You need to sign in for the app to work + Network connection error + The developer seems to have broken something. Report the problem + You canceled the operation. Try again + You are using the wrong account + Request time is up. Try again + Server error ${code} + + + Successfully! + + diff --git a/composeApp/src/commonMain/libres/strings/strings_ru.xml b/composeApp/src/commonMain/libres/strings/strings_ru.xml new file mode 100644 index 0000000000000000000000000000000000000000..50e56eb088366db451089d462742254759106b30 --- /dev/null +++ b/composeApp/src/commonMain/libres/strings/strings_ru.xml @@ -0,0 +1,22 @@ + + + Office Elevator + Войти в аккаунт Effective + Что-то пошло не так. Пожалуйста попробуйте еще раз + + + Профиль + Лифт + + + Для работы приложения нужно авторизоваться + Проблема с интернет соединением + Кажется разработчик что-то поломал. Сообщите о проблеме + Вы отменили операцию. Попробуйте снова + Вы используете неправильный аккаунт + Время вышло. Попробуйте снова + Ошибка сервера ${code} + + + Лифт успешно вызван! + diff --git a/composeApp/src/iosMain/kotlin/band/effective/office/elevator/data/createHttpEngine.kt b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/data/createHttpEngine.kt new file mode 100644 index 0000000000000000000000000000000000000000..39ecda4a9d7ac05f1388efce74daafa8abab037d --- /dev/null +++ b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/data/createHttpEngine.kt @@ -0,0 +1,6 @@ +package band.effective.office.elevator.data + +import io.ktor.client.HttpClient +import io.ktor.client.engine.darwin.Darwin + +actual fun createHttpEngine(enableLogging: Boolean): HttpClient = HttpClient(Darwin) \ No newline at end of file diff --git a/composeApp/src/iosMain/kotlin/band/effective/office/elevator/di/iOSModuleDI.kt b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/di/iOSModuleDI.kt new file mode 100644 index 0000000000000000000000000000000000000000..0ed5117aa06c98e5b1bdb1116773f708ff919e24 --- /dev/null +++ b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/di/iOSModuleDI.kt @@ -0,0 +1,15 @@ +package band.effective.office.elevator.di + +import band.effective.office.elevator.OfficeElevatorConfig +import band.effective.office.elevator.domain.GoogleSignIn +import band.effective.office.elevator.domain.GoogleSignInImpl +import org.koin.dsl.module + +internal val iosModuleDI = module { + single { + GoogleSignInImpl( + gidClientId = OfficeElevatorConfig.iosClient, + serverClientId = OfficeElevatorConfig.webClient + ) + } +} diff --git a/composeApp/src/iosMain/kotlin/band/effective/office/elevator/domain/GoogleSignInImpl.kt b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/domain/GoogleSignInImpl.kt new file mode 100644 index 0000000000000000000000000000000000000000..2f00378236c6d0cbc87a37e132bce1da699107c4 --- /dev/null +++ b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/domain/GoogleSignInImpl.kt @@ -0,0 +1,61 @@ +package band.effective.office.elevator.domain + +import band.effective.office.elevator.MainRes +import band.effective.office.elevator.data.ApiResponse +import band.effective.office.elevator.domain.models.GoogleAccount +import band.effective.office.elevator.ui.uiViewController +import cocoapods.GoogleSignIn.GIDConfiguration +import cocoapods.GoogleSignIn.GIDSignIn +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import platform.UIKit.UIScreen +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine +import kotlin.math.round + +class GoogleSignInImpl(gidClientId: String, serverClientId: String) : GoogleSignIn { + + private val scope = CoroutineScope(Dispatchers.Main) + + init { + GIDSignIn.sharedInstance.setConfiguration( + configuration = GIDConfiguration( + clientID = gidClientId, serverClientID = serverClientId + ) + ) + } + + override suspend fun retrieveAuthorizedUser(): ApiResponse { + return suspendCoroutine { continuation -> + GIDSignIn.sharedInstance.restorePreviousSignInWithCompletion { result, _ -> + scope.launch { + result?.profile?.let { profileData -> + val dimension = round(100 * UIScreen.mainScreen.scale) + continuation.resume( + ApiResponse.Success( + GoogleAccount( + email = profileData.email, + name = profileData.name, + photoUrl = profileData.imageURLWithDimension(dimension = dimension.toULong())?.absoluteString, + idToken = result.idToken?.tokenString + ) + ) + ) + } ?: continuation.resume(ApiResponse.Error.UnknownError) + } + } + } + } + + override fun signIn(callback: SignInResultCallback) { + GIDSignIn.sharedInstance.signInWithPresentingViewController(uiViewController) { result, error -> + if (result == null) callback.onFailure(MainRes.string.something_went_wrong) + else callback.onSuccess() + } + } + + override fun signOut() { + GIDSignIn.sharedInstance.signOut() + } +} diff --git a/composeApp/src/iosMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.kt b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.kt new file mode 100644 index 0000000000000000000000000000000000000000..b0394bfdde7236b859f0c94b024c110e619af0e0 --- /dev/null +++ b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.kt @@ -0,0 +1,16 @@ +package band.effective.office.elevator.expects + +import band.effective.office.elevator.ui.uiViewController +import io.github.aakira.napier.Napier +import platform.UIKit.UIAlertController + +actual fun showToast(message: String) { + Napier.e { message } + val controller = UIAlertController(null, null) + controller.message = message + controller.showViewController(uiViewController, null) +} + +actual fun generateVibration(milliseconds: Long) { +// AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) +} diff --git a/composeApp/src/iosMain/kotlin/band/effective/office/elevator/ui/UIViewControllerProvider.kt b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/ui/UIViewControllerProvider.kt new file mode 100644 index 0000000000000000000000000000000000000000..0993d9abb47e5fe0a42bc94ee37f1ec2ba136bd4 --- /dev/null +++ b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/ui/UIViewControllerProvider.kt @@ -0,0 +1,5 @@ +package band.effective.office.elevator.ui + +import platform.UIKit.UIViewController + +lateinit var uiViewController: UIViewController \ No newline at end of file diff --git a/composeApp/src/iosMain/kotlin/band/effective/office/elevator/ui/root/ContentView.kt b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/ui/root/ContentView.kt new file mode 100644 index 0000000000000000000000000000000000000000..b6fc20358da1f5942fd47672beb11d5531a6c402 --- /dev/null +++ b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/ui/root/ContentView.kt @@ -0,0 +1,10 @@ +package band.effective.office.elevator.ui.root + +import androidx.compose.runtime.Composable + +@Composable +internal fun ContentView( + component: RootComponent, +) { + RootContent(component) +} \ No newline at end of file diff --git a/composeApp/src/iosMain/kotlin/main.kt b/composeApp/src/iosMain/kotlin/main.kt new file mode 100644 index 0000000000000000000000000000000000000000..f4dc6537c9c4a0c8b8e91cf8c63ccd70082c6e19 --- /dev/null +++ b/composeApp/src/iosMain/kotlin/main.kt @@ -0,0 +1,60 @@ +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Surface +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.ComposeUIViewController +import band.effective.office.elevator.AppTheme +import band.effective.office.elevator.di.appModuleDI +import band.effective.office.elevator.di.iosModuleDI +import band.effective.office.elevator.ui.helper.LocalSafeArea +import band.effective.office.elevator.ui.root.ContentView +import band.effective.office.elevator.ui.root.RootComponent +import com.arkivanov.decompose.DefaultComponentContext +import com.arkivanov.essenty.lifecycle.LifecycleRegistry +import com.arkivanov.mvikotlin.main.store.DefaultStoreFactory +import org.koin.core.context.startKoin +import platform.UIKit.UIViewController + +@Suppress("unused", "FunctionName") +fun MainViewController( + lifecycle: LifecycleRegistry, + topSafeArea: Float, + bottomSafeArea: Float +): UIViewController { + startKoin { + modules(appModuleDI + iosModuleDI) + } + + val rootComponent = + RootComponent( + componentContext = DefaultComponentContext(lifecycle = lifecycle), + storeFactory = DefaultStoreFactory(), + ) + + return ComposeUIViewController { + val density = LocalDensity.current + + val topSafeAreaDp = with(density) { topSafeArea.toDp() } + val bottomSafeAreaDp = with(density) { bottomSafeArea.toDp() } + val safeArea = PaddingValues(top = topSafeAreaDp + 10.dp, bottom = bottomSafeAreaDp) + + // Bind safe area as the value for LocalSafeArea + CompositionLocalProvider(LocalSafeArea provides safeArea) { + AppTheme { + Surface( + color = MaterialTheme.colors.background, + modifier = Modifier.fillMaxSize().padding(safeArea) + ) { + ContentView( + component = rootComponent, + ) + } + } + } + } +} diff --git a/gpio/build.gradle.kts b/gpio/build.gradle.kts index 3d3c9115f640ef277efd1bd14eb3d7fc0582b967..35044e21294fcca18fc7e4d8691c9e84198208c5 100644 --- a/gpio/build.gradle.kts +++ b/gpio/build.gradle.kts @@ -34,12 +34,3 @@ kotlin { } } -// builds the binary and deploys it into your Raspberry PI. Just change your RPI IP address below. -val deploy by tasks.creating { - dependsOn("build") - doLast { - exec { - commandLine("scp", "build/bin/native/debugExecutable/ktgpio-example-app.kexe", "ubuntu@rpi.local:~/Downloads") - } - } -} diff --git a/gradle.properties b/gradle.properties index 5dc0a6352c050f3459db999428c8471a0d2dcba4..9e8ddc175c4fb676070da391b76a2dd37caa6234 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,10 +1,19 @@ -ktor_version=2.2.2 -kotlin_version=1.7.20 -logback_version=1.4.4 -google_api=2.1.1 +#Gradle +org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx2048M" + +#Kotlin kotlin.code.style=official +kotlin.js.compiler=ir + +#MPP +kotlin.mpp.enableCInteropCommonization=true +kotlin.mpp.androidSourceSetLayoutVersion=2 + +#Compose org.jetbrains.compose.experimental.uikit.enabled=true -org.gradle.jvmargs=-Xmx2048M -Dkotlin.daemon.jvm.options\="-Xmx2048M" +org.jetbrains.compose.experimental.jscanvas.enabled=true +kotlin.native.cacheKind=none + +#Android android.useAndroidX=true -kotlin.mpp.androidSourceSetLayoutVersion=2 -kotlin.native.cacheKind=none \ No newline at end of file +android.nonTransitiveRClass=true diff --git a/iosApp/Podfile b/iosApp/Podfile new file mode 100644 index 0000000000000000000000000000000000000000..c49cd50083286a5b7a04b07eeb6f775e0fd095e2 --- /dev/null +++ b/iosApp/Podfile @@ -0,0 +1,5 @@ +target 'iosApp' do + use_frameworks! + platform :ios, '13' + pod 'composeApp', :path => '../composeApp' +end diff --git a/iosApp/Podfile.lock b/iosApp/Podfile.lock new file mode 100644 index 0000000000000000000000000000000000000000..9b09d5568ba47f19d4038fe6678f94f8633f09ed --- /dev/null +++ b/iosApp/Podfile.lock @@ -0,0 +1,42 @@ +PODS: + - AppAuth (1.6.2): + - AppAuth/Core (= 1.6.2) + - AppAuth/ExternalUserAgent (= 1.6.2) + - AppAuth/Core (1.6.2) + - AppAuth/ExternalUserAgent (1.6.2): + - AppAuth/Core + - composeApp (1.0.0): + - GoogleSignIn + - GoogleSignIn (7.0.0): + - AppAuth (~> 1.5) + - GTMAppAuth (< 3.0, >= 1.3) + - GTMSessionFetcher/Core (< 4.0, >= 1.1) + - GTMAppAuth (2.0.0): + - AppAuth/Core (~> 1.6) + - GTMSessionFetcher/Core (< 4.0, >= 1.5) + - GTMSessionFetcher/Core (3.1.1) + +DEPENDENCIES: + - composeApp (from `../composeApp`) + +SPEC REPOS: + trunk: + - AppAuth + - GoogleSignIn + - GTMAppAuth + - GTMSessionFetcher + +EXTERNAL SOURCES: + composeApp: + :path: "../composeApp" + +SPEC CHECKSUMS: + AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570 + composeApp: fb58dac014f3021b1102fccf6f946ac8f27ae369 + GoogleSignIn: b232380cf495a429b8095d3178a8d5855b42e842 + GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae + GTMSessionFetcher: e8647203b65cee28c5f73d0f473d096653945e72 + +PODFILE CHECKSUM: f592d416ef402cdced75a4fe13ce5677c60a6fa0 + +COCOAPODS: 1.12.0 diff --git a/mobile/iosApp/Pods/AppAuth/LICENSE b/iosApp/Pods/AppAuth/LICENSE similarity index 100% rename from mobile/iosApp/Pods/AppAuth/LICENSE rename to iosApp/Pods/AppAuth/LICENSE diff --git a/mobile/iosApp/Pods/AppAuth/README.md b/iosApp/Pods/AppAuth/README.md similarity index 100% rename from mobile/iosApp/Pods/AppAuth/README.md rename to iosApp/Pods/AppAuth/README.md diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuth.h b/iosApp/Pods/AppAuth/Source/AppAuth.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuth.h rename to iosApp/Pods/AppAuth/Source/AppAuth.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthState+IOS.h b/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthState+IOS.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthState+IOS.h rename to iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthState+IOS.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthState+IOS.m b/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthState+IOS.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthState+IOS.m rename to iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthState+IOS.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthorizationService+IOS.h b/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthorizationService+IOS.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthorizationService+IOS.h rename to iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthorizationService+IOS.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthorizationService+IOS.m b/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthorizationService+IOS.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthorizationService+IOS.m rename to iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDAuthorizationService+IOS.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.h b/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.h rename to iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.m b/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.m rename to iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOS.h b/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOS.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOS.h rename to iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOS.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOS.m b/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOS.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOS.m rename to iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOS.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.h b/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.h rename to iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.m b/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.m rename to iosApp/Pods/AppAuth/Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore.h b/iosApp/Pods/AppAuth/Source/AppAuthCore.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthState.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthState.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthState.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthState.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthState.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthState.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthState.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthState.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthStateChangeDelegate.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthStateChangeDelegate.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthStateChangeDelegate.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthStateChangeDelegate.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthStateErrorDelegate.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthStateErrorDelegate.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthStateErrorDelegate.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthStateErrorDelegate.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationRequest.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationRequest.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationRequest.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationRequest.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationRequest.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationRequest.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationRequest.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationRequest.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationResponse.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationResponse.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationResponse.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationResponse.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationResponse.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationResponse.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationResponse.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationResponse.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationService.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationService.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationService.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationService.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationService.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationService.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationService.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDAuthorizationService.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDClientMetadataParameters.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDClientMetadataParameters.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDClientMetadataParameters.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDClientMetadataParameters.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDClientMetadataParameters.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDClientMetadataParameters.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDClientMetadataParameters.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDClientMetadataParameters.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDDefines.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDDefines.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDDefines.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDDefines.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionRequest.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionRequest.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionRequest.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionRequest.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionRequest.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionRequest.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionRequest.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionRequest.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionResponse.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionResponse.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionResponse.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionResponse.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionResponse.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionResponse.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionResponse.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDEndSessionResponse.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDError.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDError.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDError.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDError.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDError.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDError.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDError.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDError.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDErrorUtilities.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDErrorUtilities.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDErrorUtilities.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDErrorUtilities.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDErrorUtilities.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDErrorUtilities.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDErrorUtilities.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDErrorUtilities.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDExternalUserAgent.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDExternalUserAgent.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDExternalUserAgent.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDExternalUserAgent.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDExternalUserAgentRequest.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDExternalUserAgentRequest.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDExternalUserAgentRequest.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDExternalUserAgentRequest.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDExternalUserAgentSession.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDExternalUserAgentSession.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDExternalUserAgentSession.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDExternalUserAgentSession.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDFieldMapping.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDFieldMapping.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDFieldMapping.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDFieldMapping.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDFieldMapping.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDFieldMapping.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDFieldMapping.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDFieldMapping.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDGrantTypes.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDGrantTypes.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDGrantTypes.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDGrantTypes.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDGrantTypes.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDGrantTypes.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDGrantTypes.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDGrantTypes.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDIDToken.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDIDToken.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDIDToken.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDIDToken.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDIDToken.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDIDToken.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDIDToken.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDIDToken.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationRequest.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationRequest.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationRequest.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationRequest.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationRequest.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationRequest.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationRequest.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationRequest.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationResponse.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationResponse.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationResponse.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationResponse.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationResponse.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationResponse.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationResponse.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDRegistrationResponse.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDResponseTypes.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDResponseTypes.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDResponseTypes.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDResponseTypes.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDResponseTypes.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDResponseTypes.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDResponseTypes.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDResponseTypes.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopeUtilities.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopeUtilities.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopeUtilities.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopeUtilities.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopeUtilities.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopeUtilities.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopeUtilities.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopeUtilities.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopes.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopes.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopes.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopes.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopes.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopes.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopes.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDScopes.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceConfiguration.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceConfiguration.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceConfiguration.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceConfiguration.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceConfiguration.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceConfiguration.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceConfiguration.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceConfiguration.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceDiscovery.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceDiscovery.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceDiscovery.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceDiscovery.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceDiscovery.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceDiscovery.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceDiscovery.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDServiceDiscovery.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenRequest.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenRequest.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenRequest.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenRequest.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenRequest.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenRequest.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenRequest.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenRequest.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenResponse.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenResponse.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenResponse.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenResponse.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenResponse.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenResponse.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenResponse.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenResponse.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenUtilities.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenUtilities.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenUtilities.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenUtilities.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenUtilities.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenUtilities.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenUtilities.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDTokenUtilities.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLQueryComponent.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLQueryComponent.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLQueryComponent.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLQueryComponent.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLQueryComponent.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLQueryComponent.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLQueryComponent.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLQueryComponent.m diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLSessionProvider.h b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLSessionProvider.h similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLSessionProvider.h rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLSessionProvider.h diff --git a/mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLSessionProvider.m b/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLSessionProvider.m similarity index 100% rename from mobile/iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLSessionProvider.m rename to iosApp/Pods/AppAuth/Source/AppAuthCore/OIDURLSessionProvider.m diff --git a/mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMAppAuthFetcherAuthorization+Keychain.m b/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMAppAuthFetcherAuthorization+Keychain.m similarity index 100% rename from mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMAppAuthFetcherAuthorization+Keychain.m rename to iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMAppAuthFetcherAuthorization+Keychain.m diff --git a/mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMAppAuthFetcherAuthorization.m b/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMAppAuthFetcherAuthorization.m similarity index 100% rename from mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMAppAuthFetcherAuthorization.m rename to iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMAppAuthFetcherAuthorization.m diff --git a/mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMKeychain.m b/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMKeychain.m similarity index 100% rename from mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMKeychain.m rename to iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMKeychain.m diff --git a/mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMOAuth2KeychainCompatibility.m b/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMOAuth2KeychainCompatibility.m similarity index 100% rename from mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMOAuth2KeychainCompatibility.m rename to iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/GTMOAuth2KeychainCompatibility.m diff --git a/mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuth.h b/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuth.h similarity index 100% rename from mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuth.h rename to iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuth.h diff --git a/mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization+Keychain.h b/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization+Keychain.h similarity index 100% rename from mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization+Keychain.h rename to iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization+Keychain.h diff --git a/mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization.h b/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization.h similarity index 100% rename from mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization.h rename to iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization.h diff --git a/mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMKeychain.h b/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMKeychain.h similarity index 100% rename from mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMKeychain.h rename to iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMKeychain.h diff --git a/mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMOAuth2KeychainCompatibility.h b/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMOAuth2KeychainCompatibility.h similarity index 100% rename from mobile/iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMOAuth2KeychainCompatibility.h rename to iosApp/Pods/GTMAppAuth/GTMAppAuth/Sources/Public/GTMAppAuth/GTMOAuth2KeychainCompatibility.h diff --git a/mobile/iosApp/Pods/GTMAppAuth/LICENSE b/iosApp/Pods/GTMAppAuth/LICENSE similarity index 100% rename from mobile/iosApp/Pods/GTMAppAuth/LICENSE rename to iosApp/Pods/GTMAppAuth/LICENSE diff --git a/mobile/iosApp/Pods/GTMAppAuth/README.md b/iosApp/Pods/GTMAppAuth/README.md similarity index 100% rename from mobile/iosApp/Pods/GTMAppAuth/README.md rename to iosApp/Pods/GTMAppAuth/README.md diff --git a/mobile/iosApp/Pods/GTMSessionFetcher/LICENSE b/iosApp/Pods/GTMSessionFetcher/LICENSE similarity index 100% rename from mobile/iosApp/Pods/GTMSessionFetcher/LICENSE rename to iosApp/Pods/GTMSessionFetcher/LICENSE diff --git a/mobile/iosApp/Pods/GTMSessionFetcher/README.md b/iosApp/Pods/GTMSessionFetcher/README.md similarity index 100% rename from mobile/iosApp/Pods/GTMSessionFetcher/README.md rename to iosApp/Pods/GTMSessionFetcher/README.md diff --git a/mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcher.m b/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcher.m similarity index 99% rename from mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcher.m rename to iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcher.m index 57b3f0103e5e03b0a8046484c9897babbca0ae1e..6ed610d5737398c42120adae729d3f1fea40e32b 100644 --- a/mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcher.m +++ b/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcher.m @@ -1740,22 +1740,24 @@ NSData *_Nullable GTMDataFromInputStream(NSInputStream *inputStream, NSError **o startingAtIndex:(NSUInteger)index { GTMSessionCheckNotSynchronized(self); if (index >= decorators.count) { - GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher decorate requestWillStart %zu decorators complete", - decorators.count); + GTMSESSION_LOG_DEBUG_VERBOSE( + @"GTMSessionFetcher decorate requestWillStart %zu decorators complete", decorators.count); [self beginFetchMayDelay:NO mayAuthorize:NO mayDecorate:NO]; return; } __weak __typeof__(self) weakSelf = self; id decorator = decorators[index]; - GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher decorate requestWillStart %zu decorators, index %zu, " - @"retry count %zu, decorator %@", - decorators.count, index, self.retryCount, decorator); + GTMSESSION_LOG_DEBUG_VERBOSE( + @"GTMSessionFetcher decorate requestWillStart %zu decorators, index %zu, " + @"retry count %zu, decorator %@", + decorators.count, index, self.retryCount, decorator); [decorator fetcherWillStart:self completionHandler:^(NSURLRequest *_Nullable newRequest, NSError *_Nullable error) { - GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher decorator requestWillStart index %zu " - @"complete, newRequest %@, error %@", - index, newRequest, error); + GTMSESSION_LOG_DEBUG_VERBOSE( + @"GTMSessionFetcher decorator requestWillStart index %zu " + @"complete, newRequest %@, error %@", + index, newRequest, error); __strong __typeof__(self) strongSelf = weakSelf; if (!strongSelf) { GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher destroyed before requestWillStart " @@ -1783,8 +1785,8 @@ NSData *_Nullable GTMDataFromInputStream(NSInputStream *inputStream, NSError **o shouldReleaseCallbacks:(BOOL)shouldReleaseCallbacks { GTMSessionCheckNotSynchronized(self); if (index >= decorators.count) { - GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher decorate requestDidFinish %zu decorators complete", - decorators.count); + GTMSESSION_LOG_DEBUG_VERBOSE( + @"GTMSessionFetcher decorate requestDidFinish %zu decorators complete", decorators.count); [self invokeFetchCallbacksOnCallbackQueueWithData:data error:error mayDecorate:NO @@ -1794,14 +1796,15 @@ NSData *_Nullable GTMDataFromInputStream(NSInputStream *inputStream, NSError **o __weak __typeof__(self) weakSelf = self; id decorator = decorators[index]; - GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher decorate requestDidFinish %zu decorators, index %zu, " - @"retry count %zu, decorator %@", - decorators.count, index, self.retryCount, decorator); + GTMSESSION_LOG_DEBUG_VERBOSE( + @"GTMSessionFetcher decorate requestDidFinish %zu decorators, index %zu, " + @"retry count %zu, decorator %@", + decorators.count, index, self.retryCount, decorator); [decorator fetcherDidFinish:self withData:data error:error completionHandler:^{ - GTMSESSION_LOG_DEBUG( + GTMSESSION_LOG_DEBUG_VERBOSE( @"GTMSessionFetcher decorator requestDidFinish index %zu complete", index); __strong __typeof__(self) strongSelf = weakSelf; if (!strongSelf) { @@ -1997,7 +2000,7 @@ NSData *_Nullable GTMDataFromInputStream(NSInputStream *inputStream, NSError **o [holdSelf destroyRetryTimer]; BOOL sendStopNotification = YES; - BOOL cancelStopFetcher = NO; + BOOL callbacksPending = NO; @synchronized(self) { GTMSessionMonitorSynchronized(self); @@ -2069,7 +2072,7 @@ NSData *_Nullable GTMDataFromInputStream(NSInputStream *inputStream, NSError **o } } } - cancelStopFetcher = _stopFetchingTriggersCompletionHandler && _userStoppedFetching; + callbacksPending = _stopFetchingTriggersCompletionHandler && _userStoppedFetching; } // @synchronized(self) // If the NSURLSession needs to be invalidated, but needs to wait until the delegate method @@ -2087,9 +2090,7 @@ NSData *_Nullable GTMDataFromInputStream(NSInputStream *inputStream, NSError **o self.authorizer = nil; } - if (!cancelStopFetcher) { - [service fetcherDidStop:self]; - } + [service fetcherDidStop:self callbacksPending:callbacksPending]; #if GTM_BACKGROUND_TASK_FETCHING [self endBackgroundTask]; diff --git a/mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherLogging.m b/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherLogging.m similarity index 100% rename from mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherLogging.m rename to iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherLogging.m diff --git a/mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService+Internal.h b/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService+Internal.h similarity index 91% rename from mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService+Internal.h rename to iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService+Internal.h index b59c4848d1d0eceaf9983e3f8cea66eb165bd22d..9708edfec07a511ee0ed0c15361559e7f652d159 100644 --- a/mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService+Internal.h +++ b/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService+Internal.h @@ -25,5 +25,6 @@ (nonnull NS_NOESCAPE GTMSessionFetcherSessionCreationBlock)creationBlock; - (nullable id)sessionDelegate; - (nullable NSDate *)stoppedAllFetchersDate; +- (void)fetcherDidStop:(nonnull GTMSessionFetcher *)fetcher callbacksPending: (BOOL)callbacksPending; @end diff --git a/mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService.m b/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService.m similarity index 99% rename from mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService.m rename to iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService.m index 87a1598d82b54931e9d3a0c8b7413d21150da808..3d2c6ff73b978e0ae10b3ebc438421ba50a2b4f1 100644 --- a/mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService.m +++ b/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionFetcherService.m @@ -474,6 +474,10 @@ NSString *const kGTMSessionFetcherServiceSessionKey = @"kGTMSessionFetcherServic } - (void)fetcherDidStop:(GTMSessionFetcher *)fetcher { + [self fetcherDidStop:fetcher callbacksPending:false]; +} + +- (void)fetcherDidStop:(GTMSessionFetcher *)fetcher callbacksPending:(BOOL) callbacksPending { // Entry point from the fetcher NSString *host = fetcher.serviceHost; if (!host) { @@ -483,9 +487,11 @@ NSString *const kGTMSessionFetcherServiceSessionKey = @"kGTMSessionFetcherServic // This removeFetcher: invocation is a fallback; typically, fetchers are removed from the task // map when the task completes. - GTMSessionFetcherSessionDelegateDispatcher *delegateDispatcher = - [self delegateDispatcherForFetcher:fetcher]; - [delegateDispatcher removeFetcher:fetcher]; + if (!callbacksPending) { + GTMSessionFetcherSessionDelegateDispatcher *delegateDispatcher = + [self delegateDispatcherForFetcher:fetcher]; + [delegateDispatcher removeFetcher:fetcher]; + } NSMutableArray *fetchersToStart; diff --git a/mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionUploadFetcher.m b/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionUploadFetcher.m similarity index 100% rename from mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionUploadFetcher.m rename to iosApp/Pods/GTMSessionFetcher/Sources/Core/GTMSessionUploadFetcher.m diff --git a/mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcher.h b/iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcher.h similarity index 100% rename from mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcher.h rename to iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcher.h diff --git a/mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherLogging.h b/iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherLogging.h similarity index 100% rename from mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherLogging.h rename to iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherLogging.h diff --git a/mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherService.h b/iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherService.h similarity index 100% rename from mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherService.h rename to iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherService.h diff --git a/mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h b/iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h similarity index 100% rename from mobile/iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h rename to iosApp/Pods/GTMSessionFetcher/Sources/Core/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthStateMigration.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthStateMigration.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthStateMigration.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthStateMigration.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthStateMigration.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthStateMigration.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthStateMigration.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthStateMigration.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDAuthentication.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDCallbackQueue.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDCallbackQueue.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDCallbackQueue.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDCallbackQueue.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDCallbackQueue.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDCallbackQueue.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDCallbackQueue.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDCallbackQueue.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDConfiguration.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDConfiguration.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDConfiguration.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDConfiguration.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMErrorHandler.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMErrorHandler.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMErrorHandler.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMErrorHandler.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMErrorHandler.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMErrorHandler.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMErrorHandler.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMErrorHandler.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDEMMSupport.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser_Private.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser_Private.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser_Private.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDGoogleUser_Private.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeCache.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeCache.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeCache.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeCache.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeCache.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeCache.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeCache.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeCache.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeState.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeState.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeState.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeState.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeState.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeState.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeState.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeState.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeState_Private.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeState_Private.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeState_Private.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDMDMPasscodeState_Private.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDProfileData.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDProfileData.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDProfileData.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDProfileData.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDProfileData_Private.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDProfileData_Private.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDProfileData_Private.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDProfileData_Private.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDScopes.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDScopes.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDScopes.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDScopes.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDScopes.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDScopes.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDScopes.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDScopes.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInButton.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInButton.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInButton.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInButton.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInCallbackSchemes.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInCallbackSchemes.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInCallbackSchemes.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInCallbackSchemes.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInCallbackSchemes.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInCallbackSchemes.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInCallbackSchemes.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInCallbackSchemes.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInInternalOptions.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInPreferences.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInPreferences.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInPreferences.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInPreferences.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInPreferences.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInPreferences.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInPreferences.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInPreferences.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult_Private.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult_Private.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult_Private.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInResult_Private.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInStrings.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInStrings.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInStrings.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInStrings.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInStrings.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInStrings.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInStrings.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignInStrings.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn_Private.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn_Private.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn_Private.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDSignIn_Private.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken_Private.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken_Private.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken_Private.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/GIDToken_Private.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/NSBundle+GID3PAdditions.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/NSBundle+GID3PAdditions.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/NSBundle+GID3PAdditions.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/NSBundle+GID3PAdditions.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/NSBundle+GID3PAdditions.m b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/NSBundle+GID3PAdditions.m similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/NSBundle+GID3PAdditions.m rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/NSBundle+GID3PAdditions.m diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDConfiguration.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDConfiguration.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDConfiguration.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDConfiguration.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDProfileData.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDProfileData.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDProfileData.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDProfileData.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInButton.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInButton.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInButton.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInButton.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInResult.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInResult.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInResult.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInResult.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDToken.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDToken.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDToken.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GIDToken.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GoogleSignIn.h b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GoogleSignIn.h similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GoogleSignIn.h rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Public/GoogleSignIn/GoogleSignIn.h diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/Roboto-Bold.ttf b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/Roboto-Bold.ttf similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/Roboto-Bold.ttf rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/Roboto-Bold.ttf diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/google.png b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/google.png similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/google.png rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/google.png diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/google@2x.png b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/google@2x.png similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/google@2x.png rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/google@2x.png diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/google@3x.png b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/google@3x.png similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/google@3x.png rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Resources/google@3x.png diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ar.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ar.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ar.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ar.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ca.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ca.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ca.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ca.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/cs.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/cs.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/cs.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/cs.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/da.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/da.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/da.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/da.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/de.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/de.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/de.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/de.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/el.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/el.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/el.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/el.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/en.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/en.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/en.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/en.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/en_GB.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/en_GB.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/en_GB.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/en_GB.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/es.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/es.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/es.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/es.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/es_MX.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/es_MX.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/es_MX.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/es_MX.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/fi.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/fi.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/fi.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/fi.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/fr.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/fr.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/fr.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/fr.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/fr_CA.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/fr_CA.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/fr_CA.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/fr_CA.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/he.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/he.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/he.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/he.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/hi.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/hi.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/hi.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/hi.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/hr.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/hr.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/hr.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/hr.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/hu.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/hu.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/hu.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/hu.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/id.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/id.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/id.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/id.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/it.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/it.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/it.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/it.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ja.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ja.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ja.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ja.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ko.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ko.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ko.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ko.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ms.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ms.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ms.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ms.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/nb.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/nb.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/nb.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/nb.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/nl.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/nl.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/nl.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/nl.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pl.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pl.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pl.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pl.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pt.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pt.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pt.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pt.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pt_BR.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pt_BR.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pt_BR.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pt_BR.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pt_PT.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pt_PT.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pt_PT.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/pt_PT.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ro.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ro.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ro.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ro.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ru.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ru.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ru.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/ru.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/sk.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/sk.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/sk.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/sk.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/sv.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/sv.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/sv.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/sv.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/th.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/th.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/th.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/th.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/tr.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/tr.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/tr.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/tr.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/uk.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/uk.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/uk.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/uk.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/vi.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/vi.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/vi.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/vi.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/zh_CN.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/zh_CN.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/zh_CN.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/zh_CN.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/zh_TW.lproj/GoogleSignIn.strings b/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/zh_TW.lproj/GoogleSignIn.strings similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/zh_TW.lproj/GoogleSignIn.strings rename to iosApp/Pods/GoogleSignIn/GoogleSignIn/Sources/Strings/zh_TW.lproj/GoogleSignIn.strings diff --git a/mobile/iosApp/Pods/GoogleSignIn/LICENSE b/iosApp/Pods/GoogleSignIn/LICENSE similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/LICENSE rename to iosApp/Pods/GoogleSignIn/LICENSE diff --git a/mobile/iosApp/Pods/GoogleSignIn/README.md b/iosApp/Pods/GoogleSignIn/README.md similarity index 100% rename from mobile/iosApp/Pods/GoogleSignIn/README.md rename to iosApp/Pods/GoogleSignIn/README.md diff --git a/mobile/iosApp/Pods/Local Podspecs/shared.podspec.json b/iosApp/Pods/Local Podspecs/composeApp.podspec.json similarity index 63% rename from mobile/iosApp/Pods/Local Podspecs/shared.podspec.json rename to iosApp/Pods/Local Podspecs/composeApp.podspec.json index 88bce5b8e113e3aff9e9deb4a67ac3d7349dfd02..0d0fdadf98caf89c203946266406c763762a09d9 100644 --- a/mobile/iosApp/Pods/Local Podspecs/shared.podspec.json +++ b/iosApp/Pods/Local Podspecs/composeApp.podspec.json @@ -1,28 +1,38 @@ { - "name": "shared", - "version": "0.0.1", + "name": "composeApp", + "version": "1.0.0", "homepage": "https://github.com/Radch-enko", "source": { "http": "" }, "authors": "", "license": "", - "summary": "Multiplatform Compose Shared Module", - "vendored_frameworks": "build/cocoapods/framework/shared.framework", + "summary": "Compose application framework", + "vendored_frameworks": "build/cocoapods/framework/ComposeApp.framework", "libraries": "c++", "platforms": { - "ios": "10.0" + "ios": "11.0" + }, + "dependencies": { + "GoogleSignIn": [ + + ] }, "pod_target_xcconfig": { - "KOTLIN_PROJECT_PATH": ":mobile:shared", - "PRODUCT_MODULE_NAME": "shared" + "KOTLIN_PROJECT_PATH": ":composeApp", + "PRODUCT_MODULE_NAME": "ComposeApp" }, "script_phases": [ { - "name": "Build shared", + "name": "Build composeApp", "execution_position": "before_compile", "shell_path": "/bin/sh", - "script": " if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"\"\n exit 0\n fi\n set -ev\n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \"$REPO_ROOT/../../../../../../../private/var/folders/xs/bh5ck7bs3tv5hp49wtsbrkyr0000gn/T/wrap1loc/gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n" + "script": " if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"\"\n exit 0\n fi\n set -ev\n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \"$REPO_ROOT/../../../../../../../private/var/folders/xs/bh5ck7bs3tv5hp49wtsbrkyr0000gn/T/wrap5loc/gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n" } - ] + ], + "resource_bundles": { + "LibresComposeApp": [ + "build/generated/libres/apple/resources/images/LibresComposeApp.xcassets" + ] + } } diff --git a/iosApp/Pods/Manifest.lock b/iosApp/Pods/Manifest.lock new file mode 100644 index 0000000000000000000000000000000000000000..9b09d5568ba47f19d4038fe6678f94f8633f09ed --- /dev/null +++ b/iosApp/Pods/Manifest.lock @@ -0,0 +1,42 @@ +PODS: + - AppAuth (1.6.2): + - AppAuth/Core (= 1.6.2) + - AppAuth/ExternalUserAgent (= 1.6.2) + - AppAuth/Core (1.6.2) + - AppAuth/ExternalUserAgent (1.6.2): + - AppAuth/Core + - composeApp (1.0.0): + - GoogleSignIn + - GoogleSignIn (7.0.0): + - AppAuth (~> 1.5) + - GTMAppAuth (< 3.0, >= 1.3) + - GTMSessionFetcher/Core (< 4.0, >= 1.1) + - GTMAppAuth (2.0.0): + - AppAuth/Core (~> 1.6) + - GTMSessionFetcher/Core (< 4.0, >= 1.5) + - GTMSessionFetcher/Core (3.1.1) + +DEPENDENCIES: + - composeApp (from `../composeApp`) + +SPEC REPOS: + trunk: + - AppAuth + - GoogleSignIn + - GTMAppAuth + - GTMSessionFetcher + +EXTERNAL SOURCES: + composeApp: + :path: "../composeApp" + +SPEC CHECKSUMS: + AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570 + composeApp: fb58dac014f3021b1102fccf6f946ac8f27ae369 + GoogleSignIn: b232380cf495a429b8095d3178a8d5855b42e842 + GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae + GTMSessionFetcher: e8647203b65cee28c5f73d0f473d096653945e72 + +PODFILE CHECKSUM: f592d416ef402cdced75a4fe13ce5677c60a6fa0 + +COCOAPODS: 1.12.0 diff --git a/mobile/iosApp/Pods/Pods.xcodeproj/project.pbxproj b/iosApp/Pods/Pods.xcodeproj/project.pbxproj similarity index 86% rename from mobile/iosApp/Pods/Pods.xcodeproj/project.pbxproj rename to iosApp/Pods/Pods.xcodeproj/project.pbxproj index 77060a5d03de75942c2ef67cb45688b32e3094d7..b0cf7e7a3942e11a61329c84a9966e394125d73b 100644 --- a/mobile/iosApp/Pods/Pods.xcodeproj/project.pbxproj +++ b/iosApp/Pods/Pods.xcodeproj/project.pbxproj @@ -3,205 +3,210 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 56; objects = { /* Begin PBXAggregateTarget section */ - 8777C9F6889E59EFFD631D80AEE9048B /* shared */ = { + B96E9866C2872A8B63836A92F517CD48 /* composeApp */ = { isa = PBXAggregateTarget; - buildConfigurationList = FD786CE772E05EDA23D37DE83EBB5628 /* Build configuration list for PBXAggregateTarget "shared" */; + buildConfigurationList = 060F7DB51E177926791CF73DD8BB1267 /* Build configuration list for PBXAggregateTarget "composeApp" */; buildPhases = ( - A1F0135BF97B8D2D1D6FCB5E1FF4BEED /* [CP-User] Build shared */, + BF46439D48086CA3DFDEE51E83D81AC5 /* [CP-User] Build composeApp */, ); dependencies = ( + 3B00337DCA76D2834CF3DBD142949DF0 /* PBXTargetDependency */, + D5A81774110146618D61171DED790155 /* PBXTargetDependency */, ); - name = shared; + name = composeApp; }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 008AEF3D0ED15D9901C505999DC42781 /* google@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4890FF4F30FABA5EFC8AF481B2EF1390 /* google@3x.png */; }; 00B15FCCA7CC12C15A13010614F01854 /* OIDURLQueryComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EEB145D53E25ACDC8EE9912543C0248 /* OIDURLQueryComponent.m */; }; + 00E914F8854F3BD72E58A121ED785294 /* google@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4890FF4F30FABA5EFC8AF481B2EF1390 /* google@3x.png */; }; 035956CCF35FA56AD2CD0D01F572D70F /* GIDToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 04CA8CC7E10AFED4DCC1438FA4A5CC3B /* GIDToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 062D996342F72EECE7A8ACAAC0A7EACC /* hr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = FEFCD6A8773A9712610821B2720AE34E /* hr.lproj */; }; - 091C3DA113FA9A5D5DFAC6051C057BD5 /* ar.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 3A8B3081ED1395221D785BBF962B2211 /* ar.lproj */; }; - 0A4977752D359B5C38E6AE8A4FA3E6B3 /* pt_PT.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 0322C960BC7EF2793CC049F66AA55245 /* pt_PT.lproj */; }; - 0B575F3BC45EBAED19234D2063F23017 /* zh_TW.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 70A8D967C1190BF123A42CFB139B1970 /* zh_TW.lproj */; }; 0DE74F0B226EDC8C77D5CC00C0F15A6C /* OIDTokenUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DF5CD3E2300EEED7644E5E2A944AE644 /* OIDTokenUtilities.m */; }; 105D363726CF65E8035DA2E7C35E9C53 /* GIDSignInButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 54807A9E15F22451DBDC4D0324E6A62B /* GIDSignInButton.m */; }; - 10F6C18D67B037471AA554E0CBB98CA5 /* GTMSessionFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = CA797EFDBEAC494AEA83BCB04EF7B9BC /* GTMSessionFetcherLogging.m */; }; - 119911D0EB5F3DF7F3E2A6B6A8A68DB5 /* Roboto-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DC724A5FD85893773258051DCAD07366 /* Roboto-Bold.ttf */; }; 161B289F1C83A7281E6842E33014033F /* OIDClientMetadataParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = FB502AD363DAC9FD46268D7C98639A7D /* OIDClientMetadataParameters.h */; settings = {ATTRIBUTES = (Public, ); }; }; 17EC3E69469BB4FE2ACD89184105A8BA /* OIDFieldMapping.h in Headers */ = {isa = PBXBuildFile; fileRef = C48A38E6E33C86A3295481D19ECC56E0 /* OIDFieldMapping.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F69E2CFFB6D8961D5437C7F154414B /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = F5B7A4A2582453E40B6A296F5221FF8E /* fr.lproj */; }; 19DD4581BE19AE590907FCF479F23768 /* GIDSignInResult_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CAA0BC979CE49E5FE5B6E3AAAC173C8D /* GIDSignInResult_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A5BAEAA64E0305EEE9CC777963A1C7C /* nl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A3A412DC6D3CDFB680A82C27F782A7AC /* nl.lproj */; }; + 1C30B30F62235F5309A55DFA3D3963EF /* es.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 0418ADC0BAE69C6DA6B2F63952D42CBA /* es.lproj */; }; 1D66D60A6F32CFF16C509D1396D0EFDE /* OIDURLQueryComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A30997A1B29576DBD9193AA505E9589 /* OIDURLQueryComponent.h */; settings = {ATTRIBUTES = (Public, ); }; }; 1E8E4003C67D1BB3C9661AFD5825DABF /* LocalAuthentication.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0BEF215B4EE4F102F98CD7D919C92 /* LocalAuthentication.framework */; }; + 1EAD8F29295BFC118589AF1E17F2C7F3 /* sk.lproj in Resources */ = {isa = PBXBuildFile; fileRef = DB1E62F4AA2E468AA258DD57348130C4 /* sk.lproj */; }; + 1FEB9B456511602E0270ECE3B67EFC50 /* LibresComposeApp.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BD4AAFCF2BA9C0974608615243563202 /* LibresComposeApp.xcassets */; }; 20126504B21BF96F7634D526C7950036 /* GIDSignInResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B06F2C2A3B925DA112CA946561799B8 /* GIDSignInResult.m */; }; 2156F1E12D1F62F8322CFE5C29277E6E /* OIDResponseTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = ED73B67CAFAE6E85FC491145064442AE /* OIDResponseTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23D7A484A719B35052CFCF1A47083959 /* OIDClientMetadataParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 138626DF3AADBEDBB4CC55058A5914C3 /* OIDClientMetadataParameters.m */; }; - 28A4F8FD963EEA9DD6DD86C8709A8F8B /* uk.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A8D5024A36AD8EEAC5AC936DEBE82457 /* uk.lproj */; }; - 29FF7A2D1E1C2367FF0C4EB8736DC29E /* pl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E177EF7DB423F10AD039C450A440591C /* pl.lproj */; }; + 25850A4970C8C1BE22362EE43BAA355F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C836841AFA0CD3A8BF8925BC97FBD94 /* Foundation.framework */; }; + 282433C94BA9B8040B68343937F348C9 /* vi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 48954D1F68D1972FB787A249A3D9F6BF /* vi.lproj */; }; + 294032A35E44FDC24A73F9B4E1EED920 /* it.lproj in Resources */ = {isa = PBXBuildFile; fileRef = F12A0CE55319662239AB999B53C93F3F /* it.lproj */; }; 2B0A24E6A9A8DF0242ED11007B9F0CD8 /* OIDErrorUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 57170CA5485C54155C1AB95E0F132045 /* OIDErrorUtilities.m */; }; 2CB304656EFE129CD57D675EC4C49BDD /* GIDConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 92AEBD3402EE8B260C54E8C401E6131B /* GIDConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2E767405F0004A42FC8FFBA1E21DFE20 /* OIDScopeUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 10885C8CDE389E055236ED19279B3B6F /* OIDScopeUtilities.m */; }; 2EF390C79F02F4E85DB5FB4C1F042498 /* OIDExternalUserAgentIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E0CAB8ACE8A6E0329DF4C27F9CD69F1 /* OIDExternalUserAgentIOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; 320D03F92E37CA225E1AB819D00B09B6 /* OIDAuthStateErrorDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3000439C06AC2C58B500830C7543A8CF /* OIDAuthStateErrorDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3214BD9EC0B6AC08B4AD1968AA573F81 /* pt.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 08FD40E093D01B756DBBD5131FAB24DA /* pt.lproj */; }; 3312C165C4A0F52E47D5BF1F5B831247 /* GIDMDMPasscodeState_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D3697B5E6BD858D0493FC1A03E4D699 /* GIDMDMPasscodeState_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; 33D9EB7C1F362EB29C6B6B466E075957 /* GIDCallbackQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 48A73861C55BC389749333ECDA512783 /* GIDCallbackQueue.m */; }; 36DC3ACDD3D67D6800CABB2100702A0A /* OIDAuthStateChangeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D9E940E8D421363200122569BC789A /* OIDAuthStateChangeDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3770FE86535BBC5091EDC7A26A4F583C /* GoogleSignIn-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DE12A5A2F5AE544E12CA54C7841A610 /* GoogleSignIn-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 37B71CC20A787EAE0662CD1A40DA64B6 /* OIDExternalUserAgentSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E453B8211BE54C87B352E72ADC5C890 /* OIDExternalUserAgentSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38C6D68624FE2FE864331918FCC64CF9 /* el.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 8AB712C16B534BBF978D6E1AD0B3E2C9 /* el.lproj */; }; - 391A946E03EE3F2189AE3971A8F4F0E8 /* fr_CA.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 6A586A9F8617D91AB690B2FDB7911AE3 /* fr_CA.lproj */; }; 3B20EA4BC0B328E2542C518273FA7046 /* GTMKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 54F14415C68B36EBBCC39832B0B58FA5 /* GTMKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3C587DB8D8B0EDC08B38A68A1E06FEBE /* GTMAppAuthFetcherAuthorization.m in Sources */ = {isa = PBXBuildFile; fileRef = EF148D2BB3075AC2026CB6E9DCCE7940 /* GTMAppAuthFetcherAuthorization.m */; }; - 3CE5589ECB60F281C733C47DE0FDA186 /* ca.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 2B44333048BDF416FA23798E8D39EA25 /* ca.lproj */; }; - 40D532665B8A2272D7B856E5C7D150D4 /* it.lproj in Resources */ = {isa = PBXBuildFile; fileRef = F12A0CE55319662239AB999B53C93F3F /* it.lproj */; }; - 4232544220F8673B1B71B67853819E6E /* GTMSessionUploadFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = F327D0F7F803DF01DE36C68F13E50FB2 /* GTMSessionUploadFetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3D028B04B7973B4EB186F088043F3860 /* th.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 3BAFDBEA3FC72AD48628C2C77802F090 /* th.lproj */; }; + 3D1A1285B605CA44C4E78638B3BCBA93 /* GTMSessionFetcherService+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D848BA603BA9AB42175A49082F57140 /* GTMSessionFetcherService+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3D675C5736843525E8745963F2874CD9 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A583FF113384AF569FE57015C3D69683 /* Security.framework */; }; 428C0B4A61D3AF4A8546E1F33E80756E /* GIDScopes.m in Sources */ = {isa = PBXBuildFile; fileRef = 953788234BDA6E750CD75B3F9B2DF63C /* GIDScopes.m */; }; 439CAB2D08FC0211211A3C29A8FBC623 /* OIDAuthorizationService.h in Headers */ = {isa = PBXBuildFile; fileRef = 17ABEFB0685F63FB888849F2E7645E96 /* OIDAuthorizationService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 43AEAE16684DAACB02B45F268FFD8204 /* GTMSessionFetcher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 415BFBEF363AB15B10AFE3D6D76B9E87 /* GTMSessionFetcher-dummy.m */; }; 4447683B19506EEA079DF50B4439B0D5 /* OIDGrantTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 56F1614DD4CA77052E3652C0B92AEA6E /* OIDGrantTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 44A4B8F6C07E8C6E38E6D019948E8EB4 /* en_GB.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 06021B0E36DD25B4B7983FBE197FA322 /* en_GB.lproj */; }; 44D64F1957C7A32498E40F7F45062088 /* OIDAuthorizationService.m in Sources */ = {isa = PBXBuildFile; fileRef = AA7B3A31FF8A6021756C3CA636EDF157 /* OIDAuthorizationService.m */; }; 457AAE6CF4889E50A69CC1CD6B0A75D0 /* GIDProfileData.h in Headers */ = {isa = PBXBuildFile; fileRef = EEAEDB9503E9BAFCD03E11D12AE87B8D /* GIDProfileData.h */; settings = {ATTRIBUTES = (Public, ); }; }; 457F8F3576D65A8717113C59D6665554 /* OIDEndSessionResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = D04A4EB683FE770B17ECE969B7B57D03 /* OIDEndSessionResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; 468CEC1F1ED6564685600D76F289F8CB /* AppAuthCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E53FF8835B0E321B0618435374FF094 /* AppAuthCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47CA727B8865151D71B9878A56264F47 /* he.lproj in Resources */ = {isa = PBXBuildFile; fileRef = DDB7A4F3CC9747D2FC510FFD6700E2B5 /* he.lproj */; }; 4816ED359D1CCB98A1C010564EE02C2F /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0990E43C3A9E39127EE4AF65CD861357 /* SafariServices.framework */; }; 4845BF5ED5999291320D49E88162F62A /* OIDError.h in Headers */ = {isa = PBXBuildFile; fileRef = 3813C135348F817E75D0625946172E85 /* OIDError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 48464459FF7299A24BEA185D1B616C01 /* GTMSessionFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5B1247330107A2D5CFB69FC74D2A5F /* GTMSessionFetcherService.m */; }; 48507EA6A09E5F6AB9DE03BCE1D439FF /* GIDToken_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F9FBB5C5B4A47E3FA47C8F2E07043B45 /* GIDToken_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 486C371322390EBC669B7A4CA80DFC94 /* es.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 0418ADC0BAE69C6DA6B2F63952D42CBA /* es.lproj */; }; 48B1B9E539FE704957CE5D8A1500EFB5 /* OIDAuthState+IOS.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E13BB47BDC03D81D29204E81FCE1A1A /* OIDAuthState+IOS.m */; }; - 491CDAF765BAAD32BE60331D4C2C59C5 /* th.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 3BAFDBEA3FC72AD48628C2C77802F090 /* th.lproj */; }; - 49877E2DD6721D857B5543D06CEA9033 /* nl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A3A412DC6D3CDFB680A82C27F782A7AC /* nl.lproj */; }; + 48E81707300A4513786FB96262CEC720 /* da.lproj in Resources */ = {isa = PBXBuildFile; fileRef = F1AA4E5F8263139559530DF22B5825DC /* da.lproj */; }; + 49BB5156FC2DFD31B8B2BA4B367C87E7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C836841AFA0CD3A8BF8925BC97FBD94 /* Foundation.framework */; }; 4A24503FE25D6B716A3E4E138451B70F /* OIDURLSessionProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 171B9ED8958BCAA1D9556B8715B12F1D /* OIDURLSessionProvider.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4C567889124696748960689155BB8691 /* GIDGoogleUser_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E3CA1D551388BB143D22C2077136DA09 /* GIDGoogleUser_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4C765081895B1F7551FED0CA1DBF8B77 /* OIDTokenRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 12EC15B384996CB23484ABE2F8CCB3BB /* OIDTokenRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4CF4277C7E40245C9B0D7A59BED5FDCE /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A583FF113384AF569FE57015C3D69683 /* Security.framework */; }; 4D45D093583A1740E65AAEE76983506C /* GIDConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = CAE2A37A549703F8A634EF76E70BCDE2 /* GIDConfiguration.m */; }; 4D684BCA97B22BC2978D0CD7599FC751 /* OIDExternalUserAgentIOS.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B31B82EEC41658CC97F0CE8AB3ED11 /* OIDExternalUserAgentIOS.m */; }; + 4DFCF7F4A879E4D2655994AC4575DD67 /* he.lproj in Resources */ = {isa = PBXBuildFile; fileRef = DDB7A4F3CC9747D2FC510FFD6700E2B5 /* he.lproj */; }; 4E2BCBDEB08C21AE94EE9DC81B71835F /* GIDMDMPasscodeState.m in Sources */ = {isa = PBXBuildFile; fileRef = 398F7F510DF20C9E3FE7016A492B682D /* GIDMDMPasscodeState.m */; }; + 4E7578E18E65552D4DC2EC94C03E9887 /* sv.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 41EBF452B760B99A34357BE78D2A0009 /* sv.lproj */; }; 509F3EFD00D7D468185BBA931FC40218 /* GTMAppAuth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 737A2FE490E64F1F2DC8CF44438B8859 /* GTMAppAuth-dummy.m */; }; 510356A3123F6C92F73351DBA1C62EDC /* GIDSignInInternalOptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F8E51099DD790CADD422D23DEC88E78 /* GIDSignInInternalOptions.m */; }; 5176304A117EC8C69261BB47E63C1B5F /* OIDScopes.m in Sources */ = {isa = PBXBuildFile; fileRef = E2C43C750186BBC1F6011B7FAE986985 /* OIDScopes.m */; }; + 517ACE65C9768C6A02B4F5EF2168D615 /* pt_PT.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 0322C960BC7EF2793CC049F66AA55245 /* pt_PT.lproj */; }; 51C24FAAC45273CE7FF920D0CC553274 /* OIDExternalUserAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = A39EEBB2EFF0BDF72BCBBDDF1FE6AD02 /* OIDExternalUserAgent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 51C9FA0A90EBD65FBB9ACB9E5EEEBF53 /* nb.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 299426FA19C8858D0A4483D92503E875 /* nb.lproj */; }; 52DCCBBE231688834A4430EC4DC5E2F3 /* OIDTokenUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = E509D9DF06C72C76CD3FD07BDFCF4E45 /* OIDTokenUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53D4434B14DBF9E306584407F2471187 /* OIDAuthorizationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 309DFC7BC4D04D8120B4CFE0DD03F93F /* OIDAuthorizationRequest.m */; }; 551E477DFE0DF7EA481165609280D1D7 /* OIDAuthorizationResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 96D046EC622612EE7157394C5D6BC998 /* OIDAuthorizationResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5631D6D659BC9E989D8B171F6FCB390D /* Roboto-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DC724A5FD85893773258051DCAD07366 /* Roboto-Bold.ttf */; }; 583C30A05E70888990BE81F96BCDC441 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C836841AFA0CD3A8BF8925BC97FBD94 /* Foundation.framework */; }; - 590B6F91C987FD68308313E655D7346B /* tr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = BE056B6C95F0F5D13FD5F37B621789C3 /* tr.lproj */; }; - 59387CFDA4633B5B1292264569390AC5 /* GTMSessionFetcherService.h in Headers */ = {isa = PBXBuildFile; fileRef = CD0B551B350AC5BEC9A95585E7CB9EF9 /* GTMSessionFetcherService.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5ADFFB5030307B33393A6A9B9FA3389B /* GTMSessionFetcher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E48EB88C1091A36BF278E55612758F /* GTMSessionFetcher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5BA3B79932D42CED774166F77B3008F1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C836841AFA0CD3A8BF8925BC97FBD94 /* Foundation.framework */; }; + 5AE4CC741258BDBAB9FB37BFFD8FC40A /* zh_CN.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D88962D2D8E67E42550D68B8F84976FB /* zh_CN.lproj */; }; 5BD985E4671C5879F20406153E3E574C /* AppAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 440E41EC27998A227A292C0A587FB558 /* AppAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5C493B789379CD16BA17E9E2A167227E /* GTMSessionFetcherService+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D848BA603BA9AB42175A49082F57140 /* GTMSessionFetcherService+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DD2A703EF78F064ACDD2AAA60F76CC9 /* el.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 8AB712C16B534BBF978D6E1AD0B3E2C9 /* el.lproj */; }; + 5E09C5621EEED475EA80E49F125776AF /* hr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = FEFCD6A8773A9712610821B2720AE34E /* hr.lproj */; }; 5E3B1A932202F529808ECC95A1E21886 /* GTMOAuth2KeychainCompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = C31C69B87B121F5417E20DBA8B8AF957 /* GTMOAuth2KeychainCompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E4B5CAAE8EC0083852B9BA950CC58C7 /* ar.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 3A8B3081ED1395221D785BBF962B2211 /* ar.lproj */; }; 5E6C259D8A95587237F775DE48C9E794 /* GIDAuthentication.h in Headers */ = {isa = PBXBuildFile; fileRef = 159415F238F356F028175919E44D8E11 /* GIDAuthentication.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5E6C63EDB46681D3217C20D104746D35 /* GIDSignInPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F90944D31818AAECA7E9D28C674C037 /* GIDSignInPreferences.m */; }; 5FBA17D69B45E313C317128A02326A88 /* GIDSignInButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 3324156F51132993977B52F82D2C0AB7 /* GIDSignInButton.h */; settings = {ATTRIBUTES = (Public, ); }; }; 608DEEB38C6B137DBC9A71197CBFD19D /* OIDRegistrationRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = FA2627B9BF59E34DE56CE100D5E76D48 /* OIDRegistrationRequest.m */; }; + 60A034FB73AF8B1F0D605C5DE30F6070 /* fr_CA.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 6A586A9F8617D91AB690B2FDB7911AE3 /* fr_CA.lproj */; }; 6184B44006EEB08920BCBC9C89E42321 /* GIDCallbackQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = C032FF8B7E4E5E9AE194173A76EE2771 /* GIDCallbackQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6264526D8F9C1ACEF1013E5A724FD971 /* OIDAuthState.h in Headers */ = {isa = PBXBuildFile; fileRef = 36CF0D09A1BDEA18E5E617E1C0F6098E /* OIDAuthState.h */; settings = {ATTRIBUTES = (Public, ); }; }; 626FA39B40467D3D10F75FFD561D5D98 /* GIDAppAuthFetcherAuthorizationWithEMMSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 7347F837D3116B1C09A0A4187018683E /* GIDAppAuthFetcherAuthorizationWithEMMSupport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 64F6B1DAECC70D21FA26D520B646FAED /* vi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 48954D1F68D1972FB787A249A3D9F6BF /* vi.lproj */; }; - 6514970E819CBD257E6C5445AE4678CF /* de.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 40C388176E57320A197E8EE538E727ED /* de.lproj */; }; + 63FD7D058CE7CBF3CE7A2036047FE8EB /* GTMSessionFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = CA797EFDBEAC494AEA83BCB04EF7B9BC /* GTMSessionFetcherLogging.m */; }; + 6467E755691866C45C4518C93F251802 /* GTMSessionFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E84481F926319500C3C4A661C376C076 /* GTMSessionFetcher.m */; }; + 665AD804117F64AF08A5DC474C8E0C27 /* de.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 40C388176E57320A197E8EE538E727ED /* de.lproj */; }; 69B53E4A8079382FDEDEBE386C0C0A63 /* GIDEMMErrorHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 435293359E8D24788E66352DEBB48305 /* GIDEMMErrorHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6A93849F36F56D8F7BC4DBC6285C6700 /* GTMAppAuthFetcherAuthorization+Keychain.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7BF7933E2F072BDC6E0E39036A25D3 /* GTMAppAuthFetcherAuthorization+Keychain.m */; }; + 6DEAC3B655C6C127E0875CD7718E30DC /* GTMSessionFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = A90C680628DD01CF8B33D74471A5D04B /* GTMSessionFetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6E326BE6214F8EC73EAB80711250DA65 /* pl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E177EF7DB423F10AD039C450A440591C /* pl.lproj */; }; 6ECA7A2734AE58ABDA4E743462EFCFBD /* GIDEMMErrorHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 2539862A6AC610F092CE78D1771CA72F /* GIDEMMErrorHandler.m */; }; - 71F3A84FA70969C792A1B1F0B1FC55B3 /* cs.lproj in Resources */ = {isa = PBXBuildFile; fileRef = C107DCB0B61ED60F3CA7E34BFA0CDEC8 /* cs.lproj */; }; + 70CDBFA911FD4C85A81CA1D33002650B /* uk.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A8D5024A36AD8EEAC5AC936DEBE82457 /* uk.lproj */; }; 7230B8E455EE7235C0D577397975605B /* GIDSignInResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 5ED20F4F326EDDA300D5D03E4908CF7E /* GIDSignInResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; 72E94CCB728FC43E24ACCF83B420EFC7 /* OIDFieldMapping.m in Sources */ = {isa = PBXBuildFile; fileRef = C076A115724CA9B6464E12C94D6A85DA /* OIDFieldMapping.m */; }; + 742E261BF7357161A0BEB8F203A967D1 /* ca.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 2B44333048BDF416FA23798E8D39EA25 /* ca.lproj */; }; 752935D37B27C4524979795B8403211D /* OIDExternalUserAgentRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = DE02A96833078FBAAE1CC4B4B8DCF840 /* OIDExternalUserAgentRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; 753603CE7D6B3142CFE5F9C2EA0B15D7 /* GIDSignInStrings.m in Sources */ = {isa = PBXBuildFile; fileRef = BF5B1A398B823BF4CC39ABC64499E99C /* GIDSignInStrings.m */; }; 7688E908B66AF5D9244C10F24A995391 /* GIDGoogleUser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F262AB44696A8B28DDB0DBEAB791C92 /* GIDGoogleUser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 786279267A48028AC32FF46667715769 /* ko.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 20AFE0691D0F015F858EA76627150459 /* ko.lproj */; }; 7A6888EF4D69608167457B15555A5FB2 /* OIDEndSessionResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CB812FF6F8262B42B1C0F482C35A486 /* OIDEndSessionResponse.m */; }; + 7A7963BEE89248BBE68184C3F39200C8 /* GTMSessionFetcher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 415BFBEF363AB15B10AFE3D6D76B9E87 /* GTMSessionFetcher-dummy.m */; }; 7B254F4570114B8C9182328273C9B4C8 /* GIDSignInCallbackSchemes.h in Headers */ = {isa = PBXBuildFile; fileRef = 20B68B6DC25477E2B78C9456A8BEF740 /* GIDSignInCallbackSchemes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B2697D191EBDA6E429AC39D94C71735 /* Pods-iosApp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E6DB2A5F5DADA1DDE45F36B1A2D6AC16 /* Pods-iosApp-dummy.m */; }; 7BFF1E5A1F4B3678E8A8B59771235FDF /* GIDSignInInternalOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EB517859E615A84D1F0563AA2C66A6C /* GIDSignInInternalOptions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7C8C119226894820851AD645116589AA /* GIDScopes.h in Headers */ = {isa = PBXBuildFile; fileRef = C5D9D8B8C91CBE126717B79D9A4FC908 /* GIDScopes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7D9AB49C109F63DAB4AC7679523F315A /* GIDSignIn_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 54E9A14984A16AE99AF98E8663E68601 /* GIDSignIn_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7F6E015D616C80C1FDC9C2EBAACD8BF4 /* OIDEndSessionRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 082B75EE811333FA6514BE31C789D6D9 /* OIDEndSessionRequest.m */; }; + 80778BFD74334FA27C9CE8BB310C3521 /* cs.lproj in Resources */ = {isa = PBXBuildFile; fileRef = C107DCB0B61ED60F3CA7E34BFA0CDEC8 /* cs.lproj */; }; 80ABA6ADA9A7CBB82D8B3643AB6DF428 /* GIDGoogleUser.m in Sources */ = {isa = PBXBuildFile; fileRef = A1DCBE161A75B2C0FEADD1A6A8E49CC8 /* GIDGoogleUser.m */; }; 80E535AEBF73EA88406F76E631199045 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F58631183546225C925772252955FD1D /* UIKit.framework */; }; - 825C49673D1B9CD6E4ADC14997C059AB /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A583FF113384AF569FE57015C3D69683 /* Security.framework */; }; - 82A3AED084C0CB06840CDFA18C6F716F /* sk.lproj in Resources */ = {isa = PBXBuildFile; fileRef = DB1E62F4AA2E468AA258DD57348130C4 /* sk.lproj */; }; 84721D9C8FAD373C09FFCDA8D18F212A /* OIDErrorUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 86EAB1B8156C486BA0929F22961F9E71 /* OIDErrorUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8524A5A472802C4036F435AE130B4782 /* tr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = BE056B6C95F0F5D13FD5F37B621789C3 /* tr.lproj */; }; 85EA64E2C72CFDEC660AAB46F068F1FA /* GTMAppAuthFetcherAuthorization+Keychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F76A9379847D1BCDE7272F0310B1470 /* GTMAppAuthFetcherAuthorization+Keychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 85EE6EE77D03D1A116E2A4D509C958ED /* GTMSessionUploadFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E24C407A5C92FE4971D2D06E444C27E /* GTMSessionUploadFetcher.m */; }; 8CF9E0A7ADD7449CF2026546440EBB1F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C836841AFA0CD3A8BF8925BC97FBD94 /* Foundation.framework */; }; 8D8C06CA832855F7F2A4866C3FF294B0 /* NSBundle+GID3PAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 031AD1A3645C10CFC7FFC86D8B93153A /* NSBundle+GID3PAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8D9DD3BFAECC99954598490B34B04EAC /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DCFD11EE17DEAAD81D01F301E72C3C6 /* CoreGraphics.framework */; }; - 8E8A3535BEEA126D7FA07D850D05E743 /* google.png in Resources */ = {isa = PBXBuildFile; fileRef = 7377A7D86EAAB072F5F78D3C818F227A /* google.png */; }; 8EB2A9FFA454CF8C25CFCB4F9B6E4CDB /* GIDMDMPasscodeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = AB103CC116BF80E8A0E09354C500DD92 /* GIDMDMPasscodeCache.m */; }; + 8FE346A64C06DF4496C069F94C882561 /* hi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D6F7708FACEDD6C8951EB320EFAE6538 /* hi.lproj */; }; 9050D2AF3D97A5AFF66219C94D272C78 /* OIDExternalUserAgentCatalyst.m in Sources */ = {isa = PBXBuildFile; fileRef = 567FBB6047542891A720A0EAA05850AD /* OIDExternalUserAgentCatalyst.m */; }; - 91165ECB8895AC667CF4333FB4C4363C /* sv.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 41EBF452B760B99A34357BE78D2A0009 /* sv.lproj */; }; - 924A0F299A9EB738B3BC3252B007EBDC /* id.lproj in Resources */ = {isa = PBXBuildFile; fileRef = F679902174B811F00537BDA23168A4D5 /* id.lproj */; }; + 9117CDC88CE4069283754C8844547AF8 /* GTMSessionFetcher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E48EB88C1091A36BF278E55612758F /* GTMSessionFetcher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9301C13B1C2F01C18CBEDF320060FAE9 /* OIDAuthorizationService+IOS.m in Sources */ = {isa = PBXBuildFile; fileRef = 85DE73D71EB0A7954C497AE338DB31C0 /* OIDAuthorizationService+IOS.m */; }; + 934940CC0F32CF0166FC9647EBF8EAAE /* Pods-iosApp-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 015E0D7EA7331961AB63E5AFECA86BB5 /* Pods-iosApp-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 94906F9D82EC826CDD706AFD7E50F734 /* GIDSignInStrings.h in Headers */ = {isa = PBXBuildFile; fileRef = 78E93C0219D1B8628A325D13A8C4CB2B /* GIDSignInStrings.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 950DF2FFF050F4FD9BDB4EB9F408552C /* GTMSessionFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = E84481F926319500C3C4A661C376C076 /* GTMSessionFetcher.m */; }; - 958F82BF00818F5D770ECB5D204D21C8 /* ro.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A3B8EC60C1BBACA5B2823F75EA4EED9F /* ro.lproj */; }; - 9603C8DC52735F7253CD630234EF28AA /* pt_BR.lproj in Resources */ = {isa = PBXBuildFile; fileRef = CEE11FB67D71461FC2DCEAF340222D98 /* pt_BR.lproj */; }; 980379E3B08EE6D482F86FBAE9B3E57F /* OIDTokenResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = C32AE76839857E6B875777444D0C5143 /* OIDTokenResponse.m */; }; - 99C2D0C9AA1DD8D0BC601D798A51D919 /* hi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D6F7708FACEDD6C8951EB320EFAE6538 /* hi.lproj */; }; + 9931C5DF3DF70C63D72992F728F88813 /* GTMSessionFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5B1247330107A2D5CFB69FC74D2A5F /* GTMSessionFetcherService.m */; }; 9B291E6D6C39E0075D71CE5C3F15410C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C836841AFA0CD3A8BF8925BC97FBD94 /* Foundation.framework */; }; 9B3E18F6BAC42DAC2A8BD0E2C3FFFF2C /* OIDTokenRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3026EB700E1F0BD4ECD202A463209625 /* OIDTokenRequest.m */; }; 9BCA8F259B631193A4D32A6E5C967661 /* GoogleSignIn-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 93163128B607CD5AD09FD34C879EAC67 /* GoogleSignIn-dummy.m */; }; 9E446BE4057BFB71D703FBA219517E40 /* GTMAppAuth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 59C520DAA4F3F4FE238D010255FD0A98 /* GTMAppAuth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9E760C26EA5C6FA3CAFCC46A6060560F /* GIDSignIn.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9E1C8D6A648BCC54BB826E30FEBAB0 /* GIDSignIn.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F5A2FE8960EF352A1F240A58DB732AD /* es_MX.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 69C54C297437FDBF6ADE6411A13377DF /* es_MX.lproj */; }; A087910C9EA4649572B1B524CB08AB41 /* GIDProfileData.m in Sources */ = {isa = PBXBuildFile; fileRef = DB04507D94BD6B368FCB97016C860673 /* GIDProfileData.m */; }; A0ADE174C817D317A1F11BCDD48F4108 /* GTMAppAuth.h in Headers */ = {isa = PBXBuildFile; fileRef = 333615FD2D8A65E3CC1EA39AAE3C36F8 /* GTMAppAuth.h */; settings = {ATTRIBUTES = (Public, ); }; }; A12D248E6C1951302E5463446D1B2E6F /* OIDError.m in Sources */ = {isa = PBXBuildFile; fileRef = 20171DE2548210AD1264B69EA39F1E90 /* OIDError.m */; }; A35244C9342474C7118D33BE2996BF00 /* OIDAuthorizationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 87B1CB5190F032805603A21E434A59B8 /* OIDAuthorizationRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; A448CC9FB6349D52DCDFD3652DA7D6B1 /* GTMOAuth2KeychainCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 6794DACCB761AC841E41AE224D402467 /* GTMOAuth2KeychainCompatibility.m */; }; - A4D8A1AD7850359B62D29F51C48F281A /* fi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 5E2EF318CF50920756C8B308675F23F0 /* fi.lproj */; }; + A4BF25729FE3AC9DD3A6535D7416E76A /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = F56B4B69FD63D62465ACA05FBB0474F9 /* en.lproj */; }; A51A5125B59B90F3DCA65A668C989E13 /* GIDToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 49D442DFD1AF1E8D7F8AE86A9376AC12 /* GIDToken.m */; }; A636502A305EA73DF8BE72146B23888D /* OIDURLSessionProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = F46754E65962AE4DA39C316799CA6433 /* OIDURLSessionProvider.m */; }; - A71AF3E2F1C65D39F0012B9006FC9B1F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C836841AFA0CD3A8BF8925BC97FBD94 /* Foundation.framework */; }; A75576711AB8CC3BF861A187101CCF6E /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A09480F353C56172AF71DAB1217E8C7 /* CoreText.framework */; }; + A83EBBC9C4B1CDDCFCEF34D7AAF3A0F1 /* id.lproj in Resources */ = {isa = PBXBuildFile; fileRef = F679902174B811F00537BDA23168A4D5 /* id.lproj */; }; A88A28AD0AE43322D415B1F83183EB66 /* AppAuth-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A1082DA17D30A773E4E1480E5616B367 /* AppAuth-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A959067A015EF95DD6FB1EE32B567785 /* en_GB.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 06021B0E36DD25B4B7983FBE197FA322 /* en_GB.lproj */; }; A9BBB81C38ED12E9CF718ACD96A3E50A /* OIDTokenResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E5729AD4BBDEB21C7D27238FC10E347 /* OIDTokenResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AC45A754ECCBFCD3FB8E30A5968B71A4 /* ko.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 20AFE0691D0F015F858EA76627150459 /* ko.lproj */; }; AD01060C8D0427A83796DA370460A019 /* OIDAuthState.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FCE72D26BCD6CE85FC4D090060ED59C /* OIDAuthState.m */; }; + B176F27D686425D3AF03B60487E03323 /* ro.lproj in Resources */ = {isa = PBXBuildFile; fileRef = A3B8EC60C1BBACA5B2823F75EA4EED9F /* ro.lproj */; }; B40B071395954881429075EA56BF9512 /* OIDExternalUserAgentIOSCustomBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A0E92BDECFF3AFA72636F80F91DC2EE /* OIDExternalUserAgentIOSCustomBrowser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B8D8276518137F995684F50FC67E8282 /* pt.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 08FD40E093D01B756DBBD5131FAB24DA /* pt.lproj */; }; + B55A8F3B1829DAF9C7A9440CFBB0C5FC /* google.png in Resources */ = {isa = PBXBuildFile; fileRef = 7377A7D86EAAB072F5F78D3C818F227A /* google.png */; }; + B6633CB151D641ED42FB032BD1FE1456 /* zh_TW.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 70A8D967C1190BF123A42CFB139B1970 /* zh_TW.lproj */; }; + BAD1B76D5DD22BD9A6A57508EF6D90CB /* ru.lproj in Resources */ = {isa = PBXBuildFile; fileRef = FC89CFF5AF80A8B50C82EE96FE8326F5 /* ru.lproj */; }; BB4A42BC10B2E69F4579A26457C28CDA /* OIDRegistrationRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A8C0C15B1F7BDE712688E582744D8DC /* OIDRegistrationRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE427B0223B4411BA66D3831D611F11F /* GTMSessionFetcherLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 24FDE3C045042992EBF0B76DFDE5F981 /* GTMSessionFetcherLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF233755957539E933D32E576A51484F /* google@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4790E8FE2777EB00EC88D0A1D455A87E /* google@2x.png */; }; + C1E54945FA8214EC03991F78D25FB718 /* nb.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 299426FA19C8858D0A4483D92503E875 /* nb.lproj */; }; C2636D19CCE19A2042D35425D3CCC620 /* AppAuth-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A399BA17C9598F29F6BFC201674A08B /* AppAuth-dummy.m */; }; C266072BDF15A9DE317F4C5C3AA71448 /* GIDAuthentication.m in Sources */ = {isa = PBXBuildFile; fileRef = F91614F1A7679AF60C71A74BFACDD429 /* GIDAuthentication.m */; }; C47AA202C9949468E285F71E52F59D53 /* GIDSignInCallbackSchemes.m in Sources */ = {isa = PBXBuildFile; fileRef = C44A7271EA3C5E29DB28B6B605BE59E7 /* GIDSignInCallbackSchemes.m */; }; C80E6A729D4A289850B7EFF27521998D /* GoogleSignIn-GoogleSignIn in Resources */ = {isa = PBXBuildFile; fileRef = E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn-GoogleSignIn */; }; C8976FBA6C401ACD821CC8008118D275 /* OIDIDToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 699CEF21725AC05EE2F1AB2AB8AA159F /* OIDIDToken.m */; }; - C9E1F7E4C364EDD429A7FD94BEA9000D /* GTMSessionUploadFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E24C407A5C92FE4971D2D06E444C27E /* GTMSessionUploadFetcher.m */; }; - CA6772E65A8C7A0CA89C81AEE2130EBA /* da.lproj in Resources */ = {isa = PBXBuildFile; fileRef = F1AA4E5F8263139559530DF22B5825DC /* da.lproj */; }; CCF47FFB15F39E4ACAF3C9320138B20E /* OIDExternalUserAgentCatalyst.h in Headers */ = {isa = PBXBuildFile; fileRef = AF06C93621789367781452F9F46EDBE4 /* OIDExternalUserAgentCatalyst.h */; settings = {ATTRIBUTES = (Public, ); }; }; CD86DADC8B652D9338EA26569F21C002 /* GIDMDMPasscodeState.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A0942DE301351570FC1E45C19049710 /* GIDMDMPasscodeState.h */; settings = {ATTRIBUTES = (Project, ); }; }; CEAD8DA8D7FCBD39A6540E35C3F40F61 /* GIDSignInPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = CDABE868AEEAE4031C3718347F5BD5C4 /* GIDSignInPreferences.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D04BFE4E4EE3E82A2FA3F3C4629F144F /* ms.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D76D6D192A0D4EAFAF5FF1A1997E5ED2 /* ms.lproj */; }; D08E73CE77698A4EC2EFF175667F92A8 /* OIDEndSessionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 75DFB5AAE85D0B21F9BB7FE8352019DC /* OIDEndSessionRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D28D3C6039706C6F00E306CE90E15138 /* zh_CN.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D88962D2D8E67E42550D68B8F84976FB /* zh_CN.lproj */; }; + D1FE3A1D03750C095BBD4DB16BAEE383 /* fi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 5E2EF318CF50920756C8B308675F23F0 /* fi.lproj */; }; + D281E9C1FB4250C3FA9F1733D379C8E1 /* ms.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D76D6D192A0D4EAFAF5FF1A1997E5ED2 /* ms.lproj */; }; D340F603D2D378520C7DF6D1017C5867 /* GTMAppAuthFetcherAuthorization.h in Headers */ = {isa = PBXBuildFile; fileRef = B62F1112A5D98E988E596281A6CFDDA1 /* GTMAppAuthFetcherAuthorization.h */; settings = {ATTRIBUTES = (Public, ); }; }; D38238AFB141BEDED91BC80BBE62B921 /* GIDEMMSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 67C47ECD58C9055560159DD8A9445E23 /* GIDEMMSupport.m */; }; - D3ADA950D498BC15901BDD83FF39C70C /* ja.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 9FBA1B073B25B7ACF4EC5A26DA7FFFDE /* ja.lproj */; }; - D4E7323863A25D5CA361003C84B9EDB3 /* hu.lproj in Resources */ = {isa = PBXBuildFile; fileRef = C29950397B8236234849D2FE16C359C9 /* hu.lproj */; }; + D3A720312C953715F2296325511DA43C /* GTMSessionFetcherLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 24FDE3C045042992EBF0B76DFDE5F981 /* GTMSessionFetcherLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D3CF07BFA2974C32A0353F892896DC52 /* es_MX.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 69C54C297437FDBF6ADE6411A13377DF /* es_MX.lproj */; }; D53BA1EB19FC853BD345171432069A98 /* OIDScopeUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FEF79258D2180C60FD7410CDB63C05B /* OIDScopeUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; D5642F71CE45450DF87F7190152DB0F3 /* OIDAuthorizationService+IOS.h in Headers */ = {isa = PBXBuildFile; fileRef = DD8D635C4817B7BB8F14C833D2E24055 /* OIDAuthorizationService+IOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; D5719B165C0769CDB56797822F9A1E9D /* GIDAuthStateMigration.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F6F3FC9F74BC5693594193D691E740D /* GIDAuthStateMigration.h */; settings = {ATTRIBUTES = (Project, ); }; }; D5AAB7C418BE483A6E12F1A716395E1F /* GoogleSignIn.h in Headers */ = {isa = PBXBuildFile; fileRef = D8F67519B5F8CDE609FBE8EA2EB43EAF /* GoogleSignIn.h */; settings = {ATTRIBUTES = (Public, ); }; }; D68FC1BE3E727BDC1E96521FB2542175 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A583FF113384AF569FE57015C3D69683 /* Security.framework */; }; D7D49B9129898D8BED968B9407310B1E /* OIDAuthorizationResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = D1C9F436042C589885F6D70C78875E7F /* OIDAuthorizationResponse.m */; }; + D84314C8A7C7AB348A917A19935ECE08 /* pt_BR.lproj in Resources */ = {isa = PBXBuildFile; fileRef = CEE11FB67D71461FC2DCEAF340222D98 /* pt_BR.lproj */; }; D89A9441362A4F228D78081E9FF3A580 /* GTMKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 8957690FF7CCEC12ECC3EA4B5D42E4D3 /* GTMKeychain.m */; }; D913C8BDF0EBCBF88A315025E4141D2D /* GIDProfileData_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 56CD985E3D105198EC10344803456D95 /* GIDProfileData_Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; D9CE2B486C831679A3D8947AC7E854D5 /* OIDExternalUserAgentIOSCustomBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 23376A509C0BFACE5599F8CCD3CF27A9 /* OIDExternalUserAgentIOSCustomBrowser.m */; }; DE601C5596687C11434FC0E08F30F076 /* OIDResponseTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = AF843F2730FD829DE2837F94792C237A /* OIDResponseTypes.m */; }; DF035279E713FDA8F7FA55C1EE2DE81C /* OIDGrantTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = DA6CFFFA66D3C900FA2655465BE8DA75 /* OIDGrantTypes.m */; }; - DFB1AF6102D50B92C0742DBFA7CFBBF3 /* GTMSessionFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = A90C680628DD01CF8B33D74471A5D04B /* GTMSessionFetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; E0A045EFE8632A1839FF0F23C4797FB7 /* OIDServiceConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = FB0A756C80BE7CAFF4360C34A5EBD7A4 /* OIDServiceConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E0CAC894441F41D881B4B23159DAE6F9 /* ja.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 9FBA1B073B25B7ACF4EC5A26DA7FFFDE /* ja.lproj */; }; E2225A5D2909D0EC7D24B7C335C42CB1 /* NSBundle+GID3PAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 695135386333E44A44171605B9722CF0 /* NSBundle+GID3PAdditions.m */; }; E2B6E6E693C283EF9EA674AFA8D4ABC0 /* GIDAppAuthFetcherAuthorizationWithEMMSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = A0B76914FB1A8A281261E8589F35195E /* GIDAppAuthFetcherAuthorizationWithEMMSupport.m */; }; E2D4DF482E8F882B8FEC15020D3AEAA9 /* OIDIDToken.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF4689385B0F0EDD433B9B9F433E83E /* OIDIDToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4CA34D074E0CA2BB37BB8B1D8FF5133 /* hu.lproj in Resources */ = {isa = PBXBuildFile; fileRef = C29950397B8236234849D2FE16C359C9 /* hu.lproj */; }; E5C54585B5B2C0D195F4CEA28F28E67D /* OIDScopes.h in Headers */ = {isa = PBXBuildFile; fileRef = 86CCAAB019D985EE32737E5B5433A3C1 /* OIDScopes.h */; settings = {ATTRIBUTES = (Public, ); }; }; E683FAD3781CD4FF38D3B78860451945 /* OIDServiceDiscovery.m in Sources */ = {isa = PBXBuildFile; fileRef = 61895CC11702B9610F784602F03A95F6 /* OIDServiceDiscovery.m */; }; E68DFBC20982FEA7114CBB25144D3086 /* OIDAuthState+IOS.h in Headers */ = {isa = PBXBuildFile; fileRef = CCF94E328EAAD37566245B14CAF9DEDB /* OIDAuthState+IOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -209,90 +214,102 @@ E966191B1149AEE7B5295921B2AD7381 /* OIDServiceConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D860CF77106F324A4EED5422DBE499F /* OIDServiceConfiguration.m */; }; EBDD7C160A59CECF9A1105CE9EAD1060 /* GIDEMMSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 24035D601BDBABF7B403C3345EF87FE0 /* GIDEMMSupport.h */; settings = {ATTRIBUTES = (Project, ); }; }; EBE36AFF9964F232ABAEA6E260C5CF82 /* OIDServiceDiscovery.h in Headers */ = {isa = PBXBuildFile; fileRef = 6788376F7E6D5F5A9533061AFD97C1DC /* OIDServiceDiscovery.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ED4BE908D872EC6DD08AA63AF7C06B61 /* ru.lproj in Resources */ = {isa = PBXBuildFile; fileRef = FC89CFF5AF80A8B50C82EE96FE8326F5 /* ru.lproj */; }; ED53CE337631169205936C6CC9BA929F /* GIDSignIn.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E26CF7364DD75C5076B241A59A065DA /* GIDSignIn.m */; }; + EF6F7B5E72386510BE4CF0DCC7288834 /* GTMSessionUploadFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = F327D0F7F803DF01DE36C68F13E50FB2 /* GTMSessionUploadFetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; F6E75F5FD0501A6E1464C1153B20CB97 /* OIDDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 923828E10E315D7191607D87865BAA9D /* OIDDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F76F4B20219DCA37BA8D4D153E49870F /* Pods-iosApp-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F87A626222A8D9B26448A9FEB04FD0DF /* Pods-iosApp-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; F950D208FA4D412081B58F83807785A4 /* OIDRegistrationResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 543C952FCD8B4EC1C3899E90F7265B60 /* OIDRegistrationResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FA8BC718D1B5DCC6EC5FBFFE99EC30AC /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = F5B7A4A2582453E40B6A296F5221FF8E /* fr.lproj */; }; + FAB591A77D4EC2B7E75AD3425A04AADA /* GTMSessionFetcherService.h in Headers */ = {isa = PBXBuildFile; fileRef = CD0B551B350AC5BEC9A95585E7CB9EF9 /* GTMSessionFetcherService.h */; settings = {ATTRIBUTES = (Public, ); }; }; FBEAD3D7CC06F1C9B1A2051C9183E770 /* GIDAuthStateMigration.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C4840F7AC6F3063CC9448B76EC00676 /* GIDAuthStateMigration.m */; }; - FCE3D815F427AE2194C979C0C43D7980 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = F56B4B69FD63D62465ACA05FBB0474F9 /* en.lproj */; }; FDE948CC3A35F70EAEB413E5DE09C5ED /* OIDRegistrationResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A6E92A9A0D3CFB4675FDF2EF06D90C2 /* OIDRegistrationResponse.m */; }; - FEA28F5A9E35D8745E89EBF0B3E11D0E /* Pods-iosApp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 54DC7F9924F99FEE67A9AD3BEE09A10C /* Pods-iosApp-dummy.m */; }; - FF506D938D32E8FAC4AE0A03624E9133 /* google@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4790E8FE2777EB00EC88D0A1D455A87E /* google@2x.png */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 04CA3424ED06D5602D81E4DE8FC64303 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CAD3534FC55B0333104E5117C0A9A324; - remoteInfo = GoogleSignIn; - }; - 23758A71BB2CE2C81DFC32EBDD85D53B /* PBXContainerItemProxy */ = { + 0341D2FD6BAD4D9DB0500E4067086A4F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 8627999EF1D5E93E13DAFF580DA8CDCF; remoteInfo = GTMAppAuth; }; - 37F95E100CED334E80B28DE4EB628B16 /* PBXContainerItemProxy */ = { + 088F3C2C7B827A38114C442FCFAAE8D6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 5C642AA10FB29936669CC269F42079C6; remoteInfo = AppAuth; }; - 3AC01EC1457492BDCB9DD5857B082F66 /* PBXContainerItemProxy */ = { + 0FACAC4086CE9FBE5BEBAE24D7D671F2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 8627999EF1D5E93E13DAFF580DA8CDCF; remoteInfo = GTMAppAuth; }; - 8B71F9D1311FA39ADC89685AE5283BC3 /* PBXContainerItemProxy */ = { + 1E14690846592DACDC197F0C501D54B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5C642AA10FB29936669CC269F42079C6; - remoteInfo = AppAuth; + remoteGlobalIDString = B96E9866C2872A8B63836A92F517CD48; + remoteInfo = composeApp; }; - 96F63F7C5B77F0A54CA859CCB4DEE08C /* PBXContainerItemProxy */ = { + 2229C2717F5ED0E96BFC5E7300487988 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = D676E21115185671D7258A56944ABE98; remoteInfo = GTMSessionFetcher; }; - B4FC458BE6AE13719081399A76C3E343 /* PBXContainerItemProxy */ = { + 274C83865EB0E77225412FD01BB142D1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 5C642AA10FB29936669CC269F42079C6; remoteInfo = AppAuth; }; - D441E5505B3D13924FAE930EBDDAAEC5 /* PBXContainerItemProxy */ = { + 2D3EF3AA098811EFEF9E5FDF234C67C2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = D676E21115185671D7258A56944ABE98; - remoteInfo = GTMSessionFetcher; + remoteGlobalIDString = CAD3534FC55B0333104E5117C0A9A324; + remoteInfo = GoogleSignIn; + }; + 3816CCF895F7629E12FD3E761895D765 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5C642AA10FB29936669CC269F42079C6; + remoteInfo = AppAuth; }; - E33BF018EDD639E214A513640CCE0DBD /* PBXContainerItemProxy */ = { + 57554F649A4F76C53E27D744A8717535 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 7DFA91ED3A3D0BC020C3C843A3D1EB38; remoteInfo = "GoogleSignIn-GoogleSignIn"; }; - EA4AB95310163768D3A030966F831430 /* PBXContainerItemProxy */ = { + 88A02DEDBBD845281CD40A17FAB9358A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CAD3534FC55B0333104E5117C0A9A324; + remoteInfo = GoogleSignIn; + }; + A3FAF5298939BED59221D86E52E8F16B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 8777C9F6889E59EFFD631D80AEE9048B; - remoteInfo = shared; + remoteGlobalIDString = 62631BC1E9BA3F85793C995CF410C0C8; + remoteInfo = "composeApp-LibresComposeApp"; }; - FBCA3DC41D601F1338611E85E78465A0 /* PBXContainerItemProxy */ = { + C33F43923432A9AB9738DA5A948D6E07 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D676E21115185671D7258A56944ABE98; + remoteInfo = GTMSessionFetcher; + }; + D5A127A2921A33D364FE8D5D49659E06 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; @@ -302,7 +319,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0187F135D5F61750CD24C3E04B6E8B64 /* Pods-iosApp-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-iosApp-frameworks.sh"; sourceTree = ""; }; + 015E0D7EA7331961AB63E5AFECA86BB5 /* Pods-iosApp-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-iosApp-umbrella.h"; sourceTree = ""; }; 031AD1A3645C10CFC7FFC86D8B93153A /* NSBundle+GID3PAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+GID3PAdditions.h"; path = "GoogleSignIn/Sources/NSBundle+GID3PAdditions.h"; sourceTree = ""; }; 0322C960BC7EF2793CC049F66AA55245 /* pt_PT.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = pt_PT.lproj; path = GoogleSignIn/Sources/Strings/pt_PT.lproj; sourceTree = ""; }; 0418ADC0BAE69C6DA6B2F63952D42CBA /* es.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = es.lproj; path = GoogleSignIn/Sources/Strings/es.lproj; sourceTree = ""; }; @@ -317,6 +334,7 @@ 0E5729AD4BBDEB21C7D27238FC10E347 /* OIDTokenResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDTokenResponse.h; path = Source/AppAuthCore/OIDTokenResponse.h; sourceTree = ""; }; 0EEB145D53E25ACDC8EE9912543C0248 /* OIDURLQueryComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDURLQueryComponent.m; path = Source/AppAuthCore/OIDURLQueryComponent.m; sourceTree = ""; }; 10885C8CDE389E055236ED19279B3B6F /* OIDScopeUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDScopeUtilities.m; path = Source/AppAuthCore/OIDScopeUtilities.m; sourceTree = ""; }; + 11C9B998CE0869936AE6BE69270DAAC9 /* Pods-iosApp.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-iosApp.modulemap"; sourceTree = ""; }; 12EC15B384996CB23484ABE2F8CCB3BB /* OIDTokenRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDTokenRequest.h; path = Source/AppAuthCore/OIDTokenRequest.h; sourceTree = ""; }; 138626DF3AADBEDBB4CC55058A5914C3 /* OIDClientMetadataParameters.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDClientMetadataParameters.m; path = Source/AppAuthCore/OIDClientMetadataParameters.m; sourceTree = ""; }; 159415F238F356F028175919E44D8E11 /* GIDAuthentication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDAuthentication.h; path = GoogleSignIn/Sources/GIDAuthentication.h; sourceTree = ""; }; @@ -329,6 +347,7 @@ 23376A509C0BFACE5599F8CCD3CF27A9 /* OIDExternalUserAgentIOSCustomBrowser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDExternalUserAgentIOSCustomBrowser.m; path = Source/AppAuth/iOS/OIDExternalUserAgentIOSCustomBrowser.m; sourceTree = ""; }; 23B31B82EEC41658CC97F0CE8AB3ED11 /* OIDExternalUserAgentIOS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDExternalUserAgentIOS.m; path = Source/AppAuth/iOS/OIDExternalUserAgentIOS.m; sourceTree = ""; }; 24035D601BDBABF7B403C3345EF87FE0 /* GIDEMMSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDEMMSupport.h; path = GoogleSignIn/Sources/GIDEMMSupport.h; sourceTree = ""; }; + 244FC2DAA936A0B07ACEFDC74E2D54B8 /* Pods-iosApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iosApp.release.xcconfig"; sourceTree = ""; }; 24FDE3C045042992EBF0B76DFDE5F981 /* GTMSessionFetcherLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherLogging.h; path = Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherLogging.h; sourceTree = ""; }; 2539862A6AC610F092CE78D1771CA72F /* GIDEMMErrorHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDEMMErrorHandler.m; path = GoogleSignIn/Sources/GIDEMMErrorHandler.m; sourceTree = ""; }; 26BF7E0D401DFDA5030C645987033135 /* GoogleSignIn-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GoogleSignIn-Info.plist"; sourceTree = ""; }; @@ -342,9 +361,10 @@ 3000439C06AC2C58B500830C7543A8CF /* OIDAuthStateErrorDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthStateErrorDelegate.h; path = Source/AppAuthCore/OIDAuthStateErrorDelegate.h; sourceTree = ""; }; 3026EB700E1F0BD4ECD202A463209625 /* OIDTokenRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDTokenRequest.m; path = Source/AppAuthCore/OIDTokenRequest.m; sourceTree = ""; }; 309DFC7BC4D04D8120B4CFE0DD03F93F /* OIDAuthorizationRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDAuthorizationRequest.m; path = Source/AppAuthCore/OIDAuthorizationRequest.m; sourceTree = ""; }; + 31F87FB8022080C95B1F137E9279467A /* composeApp-LibresComposeApp */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "composeApp-LibresComposeApp"; path = LibresComposeApp.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 3324156F51132993977B52F82D2C0AB7 /* GIDSignInButton.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInButton.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignInButton.h; sourceTree = ""; }; 333615FD2D8A65E3CC1EA39AAE3C36F8 /* GTMAppAuth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMAppAuth.h; path = GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuth.h; sourceTree = ""; }; - 35548E3BD8DA30925E8FE97E67B84868 /* shared.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = shared.release.xcconfig; sourceTree = ""; }; + 336205D63FC7566077865B8691AE38D4 /* ResourceBundle-LibresComposeApp-composeApp-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-LibresComposeApp-composeApp-Info.plist"; sourceTree = ""; }; 36CF0D09A1BDEA18E5E617E1C0F6098E /* OIDAuthState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthState.h; path = Source/AppAuthCore/OIDAuthState.h; sourceTree = ""; }; 3813C135348F817E75D0625946172E85 /* OIDError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDError.h; path = Source/AppAuthCore/OIDError.h; sourceTree = ""; }; 398F7F510DF20C9E3FE7016A492B682D /* GIDMDMPasscodeState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDMDMPasscodeState.m; path = GoogleSignIn/Sources/GIDMDMPasscodeState.m; sourceTree = ""; }; @@ -353,7 +373,6 @@ 3A8C0C15B1F7BDE712688E582744D8DC /* OIDRegistrationRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDRegistrationRequest.h; path = Source/AppAuthCore/OIDRegistrationRequest.h; sourceTree = ""; }; 3BAFDBEA3FC72AD48628C2C77802F090 /* th.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = th.lproj; path = GoogleSignIn/Sources/Strings/th.lproj; sourceTree = ""; }; 3D5B1247330107A2D5CFB69FC74D2A5F /* GTMSessionFetcherService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherService.m; path = Sources/Core/GTMSessionFetcherService.m; sourceTree = ""; }; - 3F64BADB16C311E9D09DAD0116F684F4 /* Pods-iosApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iosApp.debug.xcconfig"; sourceTree = ""; }; 3F6F3FC9F74BC5693594193D691E740D /* GIDAuthStateMigration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDAuthStateMigration.h; path = GoogleSignIn/Sources/GIDAuthStateMigration.h; sourceTree = ""; }; 3F76A9379847D1BCDE7272F0310B1470 /* GTMAppAuthFetcherAuthorization+Keychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GTMAppAuthFetcherAuthorization+Keychain.h"; path = "GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization+Keychain.h"; sourceTree = ""; }; 3FD1B4C1246D643E9476438C28048FA8 /* AppAuth */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AppAuth; path = AppAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -372,18 +391,19 @@ 4A09480F353C56172AF71DAB1217E8C7 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; 4C836841AFA0CD3A8BF8925BC97FBD94 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 4FED7BC72DB594FC7F4A3A4E7CB79914 /* GTMSessionFetcher-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GTMSessionFetcher-Info.plist"; sourceTree = ""; }; + 50FD35FE117ECFE01E74CDF884212EF2 /* composeApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = composeApp.debug.xcconfig; sourceTree = ""; }; 543C952FCD8B4EC1C3899E90F7265B60 /* OIDRegistrationResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDRegistrationResponse.h; path = Source/AppAuthCore/OIDRegistrationResponse.h; sourceTree = ""; }; 54807A9E15F22451DBDC4D0324E6A62B /* GIDSignInButton.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInButton.m; path = GoogleSignIn/Sources/GIDSignInButton.m; sourceTree = ""; }; - 54DC7F9924F99FEE67A9AD3BEE09A10C /* Pods-iosApp-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-iosApp-dummy.m"; sourceTree = ""; }; 54E9A14984A16AE99AF98E8663E68601 /* GIDSignIn_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignIn_Private.h; path = GoogleSignIn/Sources/GIDSignIn_Private.h; sourceTree = ""; }; 54F14415C68B36EBBCC39832B0B58FA5 /* GTMKeychain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMKeychain.h; path = GTMAppAuth/Sources/Public/GTMAppAuth/GTMKeychain.h; sourceTree = ""; }; + 55ABB06C8A1800962A74E007E7733796 /* Pods-iosApp-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-iosApp-frameworks.sh"; sourceTree = ""; }; 567FBB6047542891A720A0EAA05850AD /* OIDExternalUserAgentCatalyst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDExternalUserAgentCatalyst.m; path = Source/AppAuth/iOS/OIDExternalUserAgentCatalyst.m; sourceTree = ""; }; 56CD985E3D105198EC10344803456D95 /* GIDProfileData_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDProfileData_Private.h; path = GoogleSignIn/Sources/GIDProfileData_Private.h; sourceTree = ""; }; 56F1614DD4CA77052E3652C0B92AEA6E /* OIDGrantTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDGrantTypes.h; path = Source/AppAuthCore/OIDGrantTypes.h; sourceTree = ""; }; 57170CA5485C54155C1AB95E0F132045 /* OIDErrorUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDErrorUtilities.m; path = Source/AppAuthCore/OIDErrorUtilities.m; sourceTree = ""; }; + 5863B4851BDA4305CDDB19DC1CD22B89 /* composeApp.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = composeApp.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 58B7F380E4871801EBB9C54F2B09B4BF /* AppAuth.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AppAuth.debug.xcconfig; sourceTree = ""; }; 59C520DAA4F3F4FE238D010255FD0A98 /* GTMAppAuth-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMAppAuth-umbrella.h"; sourceTree = ""; }; - 5AC974169B09D4545F741E9A2147610E /* Pods-iosApp-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iosApp-Info.plist"; sourceTree = ""; }; 5C4840F7AC6F3063CC9448B76EC00676 /* GIDAuthStateMigration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDAuthStateMigration.m; path = GoogleSignIn/Sources/GIDAuthStateMigration.m; sourceTree = ""; }; 5E26CF7364DD75C5076B241A59A065DA /* GIDSignIn.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignIn.m; path = GoogleSignIn/Sources/GIDSignIn.m; sourceTree = ""; }; 5E2EF318CF50920756C8B308675F23F0 /* fi.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = fi.lproj; path = GoogleSignIn/Sources/Strings/fi.lproj; sourceTree = ""; }; @@ -402,13 +422,15 @@ 6E53FF8835B0E321B0618435374FF094 /* AppAuthCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AppAuthCore.h; path = Source/AppAuthCore.h; sourceTree = ""; }; 6EB517859E615A84D1F0563AA2C66A6C /* GIDSignInInternalOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInInternalOptions.h; path = GoogleSignIn/Sources/GIDSignInInternalOptions.h; sourceTree = ""; }; 6F262AB44696A8B28DDB0DBEAB791C92 /* GIDGoogleUser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDGoogleUser.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDGoogleUser.h; sourceTree = ""; }; + 6F3B5FED07117E377CFAC3D49B490F17 /* Pods-iosApp-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-iosApp-resources.sh"; sourceTree = ""; }; 6FD122EA0AB9AB2A8FFA5F676C795DF0 /* GTMAppAuth */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GTMAppAuth; path = GTMAppAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 70A8D967C1190BF123A42CFB139B1970 /* zh_TW.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = zh_TW.lproj; path = GoogleSignIn/Sources/Strings/zh_TW.lproj; sourceTree = ""; }; 7347F837D3116B1C09A0A4187018683E /* GIDAppAuthFetcherAuthorizationWithEMMSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDAppAuthFetcherAuthorizationWithEMMSupport.h; path = GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.h; sourceTree = ""; }; 7377A7D86EAAB072F5F78D3C818F227A /* google.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = google.png; path = GoogleSignIn/Sources/Resources/google.png; sourceTree = ""; }; 737A2FE490E64F1F2DC8CF44438B8859 /* GTMAppAuth-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GTMAppAuth-dummy.m"; sourceTree = ""; }; - 73D4D08B8C9FAD17B10E8E5C0EB49A76 /* shared.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = shared.framework; path = build/cocoapods/framework/shared.framework; sourceTree = ""; }; 75DFB5AAE85D0B21F9BB7FE8352019DC /* OIDEndSessionRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDEndSessionRequest.h; path = Source/AppAuthCore/OIDEndSessionRequest.h; sourceTree = ""; }; + 76A263267985B0185D85E24D40FCEE9A /* Pods-iosApp-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iosApp-Info.plist"; sourceTree = ""; }; + 76D28488EA8CF5C697DFF07967A9960E /* Pods-iosApp-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iosApp-acknowledgements.plist"; sourceTree = ""; }; 78760994FD08EA1FB47DFB097BF18968 /* GTMAppAuth-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GTMAppAuth-Info.plist"; sourceTree = ""; }; 78E93C0219D1B8628A325D13A8C4CB2B /* GIDSignInStrings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInStrings.h; path = GoogleSignIn/Sources/GIDSignInStrings.h; sourceTree = ""; }; 7A30997A1B29576DBD9193AA505E9589 /* OIDURLQueryComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDURLQueryComponent.h; path = Source/AppAuthCore/OIDURLQueryComponent.h; sourceTree = ""; }; @@ -422,7 +444,6 @@ 8957690FF7CCEC12ECC3EA4B5D42E4D3 /* GTMKeychain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMKeychain.m; path = GTMAppAuth/Sources/GTMKeychain.m; sourceTree = ""; }; 8A0942DE301351570FC1E45C19049710 /* GIDMDMPasscodeState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDMDMPasscodeState.h; path = GoogleSignIn/Sources/GIDMDMPasscodeState.h; sourceTree = ""; }; 8AB712C16B534BBF978D6E1AD0B3E2C9 /* el.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = el.lproj; path = GoogleSignIn/Sources/Strings/el.lproj; sourceTree = ""; }; - 8B524AABE529FB8A2D151B05321336E0 /* Pods-iosApp.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-iosApp.modulemap"; sourceTree = ""; }; 8DCFD11EE17DEAAD81D01F301E72C3C6 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; 8F90944D31818AAECA7E9D28C674C037 /* GIDSignInPreferences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInPreferences.m; path = GoogleSignIn/Sources/GIDSignInPreferences.m; sourceTree = ""; }; 923828E10E315D7191607D87865BAA9D /* OIDDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDDefines.h; path = Source/AppAuthCore/OIDDefines.h; sourceTree = ""; }; @@ -430,19 +451,15 @@ 93163128B607CD5AD09FD34C879EAC67 /* GoogleSignIn-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleSignIn-dummy.m"; sourceTree = ""; }; 93D9E940E8D421363200122569BC789A /* OIDAuthStateChangeDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthStateChangeDelegate.h; path = Source/AppAuthCore/OIDAuthStateChangeDelegate.h; sourceTree = ""; }; 953788234BDA6E750CD75B3F9B2DF63C /* GIDScopes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDScopes.m; path = GoogleSignIn/Sources/GIDScopes.m; sourceTree = ""; }; - 95B09EA82E7AF9ACCCCAF3E55C859116 /* shared.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = shared.debug.xcconfig; sourceTree = ""; }; 96D046EC622612EE7157394C5D6BC998 /* OIDAuthorizationResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthorizationResponse.h; path = Source/AppAuthCore/OIDAuthorizationResponse.h; sourceTree = ""; }; 96E48EB88C1091A36BF278E55612758F /* GTMSessionFetcher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMSessionFetcher-umbrella.h"; sourceTree = ""; }; - 9BB0B8B698D4C35D4F9A07EF70910170 /* Pods-iosApp-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iosApp-acknowledgements.plist"; sourceTree = ""; }; 9CB812FF6F8262B42B1C0F482C35A486 /* OIDEndSessionResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDEndSessionResponse.m; path = Source/AppAuthCore/OIDEndSessionResponse.m; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 9DE12A5A2F5AE544E12CA54C7841A610 /* GoogleSignIn-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleSignIn-umbrella.h"; sourceTree = ""; }; 9E24C407A5C92FE4971D2D06E444C27E /* GTMSessionUploadFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionUploadFetcher.m; path = Sources/Core/GTMSessionUploadFetcher.m; sourceTree = ""; }; - 9F1FFC8B10F4D7D4F37606E8959B3F29 /* Pods-iosApp-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-iosApp-acknowledgements.markdown"; sourceTree = ""; }; 9F8E51099DD790CADD422D23DEC88E78 /* GIDSignInInternalOptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInInternalOptions.m; path = GoogleSignIn/Sources/GIDSignInInternalOptions.m; sourceTree = ""; }; 9FBA1B073B25B7ACF4EC5A26DA7FFFDE /* ja.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ja.lproj; path = GoogleSignIn/Sources/Strings/ja.lproj; sourceTree = ""; }; 9FCE72D26BCD6CE85FC4D090060ED59C /* OIDAuthState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDAuthState.m; path = Source/AppAuthCore/OIDAuthState.m; sourceTree = ""; }; - 9FECCB5AFF87D121F15BA01E683C7932 /* Pods-iosApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iosApp.release.xcconfig"; sourceTree = ""; }; 9FEF79258D2180C60FD7410CDB63C05B /* OIDScopeUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDScopeUtilities.h; path = Source/AppAuthCore/OIDScopeUtilities.h; sourceTree = ""; }; A089D0B45DF6484E6B3B5896C07E78D0 /* GoogleSignIn.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleSignIn.modulemap; sourceTree = ""; }; A0B76914FB1A8A281261E8589F35195E /* GIDAppAuthFetcherAuthorizationWithEMMSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDAppAuthFetcherAuthorizationWithEMMSupport.m; path = GoogleSignIn/Sources/GIDAppAuthFetcherAuthorizationWithEMMSupport.m; sourceTree = ""; }; @@ -460,6 +477,7 @@ AF843F2730FD829DE2837F94792C237A /* OIDResponseTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDResponseTypes.m; path = Source/AppAuthCore/OIDResponseTypes.m; sourceTree = ""; }; B097DD7534E741D5C41838011D755842 /* Pods-iosApp */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-iosApp"; path = Pods_iosApp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B62F1112A5D98E988E596281A6CFDDA1 /* GTMAppAuthFetcherAuthorization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMAppAuthFetcherAuthorization.h; path = GTMAppAuth/Sources/Public/GTMAppAuth/GTMAppAuthFetcherAuthorization.h; sourceTree = ""; }; + BD4AAFCF2BA9C0974608615243563202 /* LibresComposeApp.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = LibresComposeApp.xcassets; path = build/generated/libres/apple/resources/images/LibresComposeApp.xcassets; sourceTree = ""; }; BE056B6C95F0F5D13FD5F37B621789C3 /* tr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = tr.lproj; path = GoogleSignIn/Sources/Strings/tr.lproj; sourceTree = ""; }; BF5B1A398B823BF4CC39ABC64499E99C /* GIDSignInStrings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInStrings.m; path = GoogleSignIn/Sources/GIDSignInStrings.m; sourceTree = ""; }; C032FF8B7E4E5E9AE194173A76EE2771 /* GIDCallbackQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDCallbackQueue.h; path = GoogleSignIn/Sources/GIDCallbackQueue.h; sourceTree = ""; }; @@ -497,12 +515,17 @@ DDB7A4F3CC9747D2FC510FFD6700E2B5 /* he.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = he.lproj; path = GoogleSignIn/Sources/Strings/he.lproj; sourceTree = ""; }; DE02A96833078FBAAE1CC4B4B8DCF840 /* OIDExternalUserAgentRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDExternalUserAgentRequest.h; path = Source/AppAuthCore/OIDExternalUserAgentRequest.h; sourceTree = ""; }; DF5CD3E2300EEED7644E5E2A944AE644 /* OIDTokenUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDTokenUtilities.m; path = Source/AppAuthCore/OIDTokenUtilities.m; sourceTree = ""; }; + E014A2104F68E4C427E0AE7457BBA8B5 /* ComposeApp.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ComposeApp.framework; path = build/cocoapods/framework/ComposeApp.framework; sourceTree = ""; }; E177EF7DB423F10AD039C450A440591C /* pl.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = pl.lproj; path = GoogleSignIn/Sources/Strings/pl.lproj; sourceTree = ""; }; E2C43C750186BBC1F6011B7FAE986985 /* OIDScopes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDScopes.m; path = Source/AppAuthCore/OIDScopes.m; sourceTree = ""; }; E3CA1D551388BB143D22C2077136DA09 /* GIDGoogleUser_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDGoogleUser_Private.h; path = GoogleSignIn/Sources/GIDGoogleUser_Private.h; sourceTree = ""; }; + E462E23B3674BF94EAB1504D506F2803 /* Pods-iosApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iosApp.debug.xcconfig"; sourceTree = ""; }; + E4C923318724794E3CC670804C2D6A6B /* Pods-iosApp-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-iosApp-acknowledgements.markdown"; sourceTree = ""; }; E509D9DF06C72C76CD3FD07BDFCF4E45 /* OIDTokenUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDTokenUtilities.h; path = Source/AppAuthCore/OIDTokenUtilities.h; sourceTree = ""; }; E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn-GoogleSignIn */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "GoogleSignIn-GoogleSignIn"; path = GoogleSignIn.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + E6DB2A5F5DADA1DDE45F36B1A2D6AC16 /* Pods-iosApp-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-iosApp-dummy.m"; sourceTree = ""; }; E84481F926319500C3C4A661C376C076 /* GTMSessionFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcher.m; path = Sources/Core/GTMSessionFetcher.m; sourceTree = ""; }; + E92F0AB63D269CD9685265D1E701020A /* composeApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = composeApp.release.xcconfig; sourceTree = ""; }; ED73B67CAFAE6E85FC491145064442AE /* OIDResponseTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDResponseTypes.h; path = Source/AppAuthCore/OIDResponseTypes.h; sourceTree = ""; }; EE9E1C8D6A648BCC54BB826E30FEBAB0 /* GIDSignIn.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignIn.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDSignIn.h; sourceTree = ""; }; EEAEDB9503E9BAFCD03E11D12AE87B8D /* GIDProfileData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDProfileData.h; path = GoogleSignIn/Sources/Public/GoogleSignIn/GIDProfileData.h; sourceTree = ""; }; @@ -517,12 +540,10 @@ F58631183546225C925772252955FD1D /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; F5B7A4A2582453E40B6A296F5221FF8E /* fr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = fr.lproj; path = GoogleSignIn/Sources/Strings/fr.lproj; sourceTree = ""; }; F679902174B811F00537BDA23168A4D5 /* id.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = id.lproj; path = GoogleSignIn/Sources/Strings/id.lproj; sourceTree = ""; }; - F87A626222A8D9B26448A9FEB04FD0DF /* Pods-iosApp-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-iosApp-umbrella.h"; sourceTree = ""; }; F91614F1A7679AF60C71A74BFACDD429 /* GIDAuthentication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDAuthentication.m; path = GoogleSignIn/Sources/GIDAuthentication.m; sourceTree = ""; }; F9FBB5C5B4A47E3FA47C8F2E07043B45 /* GIDToken_Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDToken_Private.h; path = GoogleSignIn/Sources/GIDToken_Private.h; sourceTree = ""; }; FA2627B9BF59E34DE56CE100D5E76D48 /* OIDRegistrationRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDRegistrationRequest.m; path = Source/AppAuthCore/OIDRegistrationRequest.m; sourceTree = ""; }; FB0A756C80BE7CAFF4360C34A5EBD7A4 /* OIDServiceConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDServiceConfiguration.h; path = Source/AppAuthCore/OIDServiceConfiguration.h; sourceTree = ""; }; - FB1BF8BE937671FB0F330C2D28634477 /* shared.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = shared.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; FB502AD363DAC9FD46268D7C98639A7D /* OIDClientMetadataParameters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDClientMetadataParameters.h; path = Source/AppAuthCore/OIDClientMetadataParameters.h; sourceTree = ""; }; FC89CFF5AF80A8B50C82EE96FE8326F5 /* ru.lproj */ = {isa = PBXFileReference; includeInIndex = 1; name = ru.lproj; path = GoogleSignIn/Sources/Strings/ru.lproj; sourceTree = ""; }; FD56AB51475BC5F592781EE2692D1412 /* GoogleSignIn */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleSignIn; path = GoogleSignIn.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -533,29 +554,43 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2E3A223E16D959A7D46F738644908EE1 /* Frameworks */ = { + 302506E051712082C0B5E6E92B04546C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 583C30A05E70888990BE81F96BCDC441 /* Foundation.framework in Frameworks */, + 4CF4277C7E40245C9B0D7A59BED5FDCE /* Security.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 329A71D900E8F2FCBFE536D5F87C3CBC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5BA3B79932D42CED774166F77B3008F1 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 302506E051712082C0B5E6E92B04546C /* Frameworks */ = { + 580F5B9B5A1F5048D1EE0BDA9E92081B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 25850A4970C8C1BE22362EE43BAA355F /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 72B9FA746EB9EA92EE7B0F25A9385FC5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 583C30A05E70888990BE81F96BCDC441 /* Foundation.framework in Frameworks */, - 4CF4277C7E40245C9B0D7A59BED5FDCE /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7E291F728B36A2B4BCAE7DBF96BFF62C /* Frameworks */ = { + 8A40B6334F4C6F2EB2611B6735651D4D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A71AF3E2F1C65D39F0012B9006FC9B1F /* Foundation.framework in Frameworks */, - 825C49673D1B9CD6E4ADC14997C059AB /* Security.framework in Frameworks */, + 49BB5156FC2DFD31B8B2BA4B367C87E7 /* Foundation.framework in Frameworks */, + 3D675C5736843525E8745963F2874CD9 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -572,13 +607,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D617F1B428F626FCC8D5F83CCC827E2F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; E8703AD13333A0CEC142335B7F4DFB50 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -640,20 +668,12 @@ name = Resources; sourceTree = ""; }; - 11C970DEAE48C6D0282DFE54684F53F1 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 52A898E555C2DBD7D25A7E44754C3FC6 /* Pods-iosApp */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - 313FE5FE915A4A924C55AAC02A910D61 /* Development Pods */ = { + 22116605DE42D9DB76311FF06F0AAADE /* Frameworks */ = { isa = PBXGroup; children = ( - EEF3277DCE2E4B31CF76A57AB68C2BA1 /* shared */, + E014A2104F68E4C427E0AE7457BBA8B5 /* ComposeApp.framework */, ); - name = "Development Pods"; + name = Frameworks; sourceTree = ""; }; 3792D0DD89C024410AD6908053A7F3BF /* GTMSessionFetcher */ = { @@ -666,29 +686,30 @@ path = GTMSessionFetcher; sourceTree = ""; }; - 52A898E555C2DBD7D25A7E44754C3FC6 /* Pods-iosApp */ = { + 3CEC6A1BA39E703306E5EFBD7B19CC72 /* Products */ = { isa = PBXGroup; children = ( - 8B524AABE529FB8A2D151B05321336E0 /* Pods-iosApp.modulemap */, - 9F1FFC8B10F4D7D4F37606E8959B3F29 /* Pods-iosApp-acknowledgements.markdown */, - 9BB0B8B698D4C35D4F9A07EF70910170 /* Pods-iosApp-acknowledgements.plist */, - 54DC7F9924F99FEE67A9AD3BEE09A10C /* Pods-iosApp-dummy.m */, - 0187F135D5F61750CD24C3E04B6E8B64 /* Pods-iosApp-frameworks.sh */, - 5AC974169B09D4545F741E9A2147610E /* Pods-iosApp-Info.plist */, - F87A626222A8D9B26448A9FEB04FD0DF /* Pods-iosApp-umbrella.h */, - 3F64BADB16C311E9D09DAD0116F684F4 /* Pods-iosApp.debug.xcconfig */, - 9FECCB5AFF87D121F15BA01E683C7932 /* Pods-iosApp.release.xcconfig */, + 3FD1B4C1246D643E9476438C28048FA8 /* AppAuth */, + 31F87FB8022080C95B1F137E9279467A /* composeApp-LibresComposeApp */, + FD56AB51475BC5F592781EE2692D1412 /* GoogleSignIn */, + E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn-GoogleSignIn */, + 6FD122EA0AB9AB2A8FFA5F676C795DF0 /* GTMAppAuth */, + C1998E0D8085221AD87F89B614C10E52 /* GTMSessionFetcher */, + B097DD7534E741D5C41838011D755842 /* Pods-iosApp */, ); - name = "Pods-iosApp"; - path = "Target Support Files/Pods-iosApp"; + name = Products; sourceTree = ""; }; - 569B56E5B05425CAE32676C6049DC8CB /* Pod */ = { + 4520E688BDF42E653AD1D18C5A46BFEA /* composeApp */ = { isa = PBXGroup; children = ( - FB1BF8BE937671FB0F330C2D28634477 /* shared.podspec */, + BD4AAFCF2BA9C0974608615243563202 /* LibresComposeApp.xcassets */, + 22116605DE42D9DB76311FF06F0AAADE /* Frameworks */, + C898C9B55AE217CCB5172FB9EF5488C3 /* Pod */, + EFC62879999E1B36085F01CB70823F9D /* Support Files */, ); - name = Pod; + name = composeApp; + path = ../../composeApp; sourceTree = ""; }; 5B22637796C5DC5DDAF2AECF38E2FA61 /* ExternalUserAgent */ = { @@ -709,16 +730,6 @@ name = ExternalUserAgent; sourceTree = ""; }; - 5CB66AAACA3977B45E9869C360E9F289 /* Support Files */ = { - isa = PBXGroup; - children = ( - 95B09EA82E7AF9ACCCCAF3E55C859116 /* shared.debug.xcconfig */, - 35548E3BD8DA30925E8FE97E67B84868 /* shared.release.xcconfig */, - ); - name = "Support Files"; - path = "../iosApp/Pods/Target Support Files/shared"; - sourceTree = ""; - }; 5E5538F870FD2AA0A23D3D7A2E4A9FC6 /* AppAuth */ = { isa = PBXGroup; children = ( @@ -746,14 +757,6 @@ name = Core; sourceTree = ""; }; - 7DBF81461E18ACE1B4BD971BAC841CF7 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 73D4D08B8C9FAD17B10E8E5C0EB49A76 /* shared.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; 8275CCB4E8732497B1021FCBC240F3C2 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -836,19 +839,6 @@ path = GoogleSignIn; sourceTree = ""; }; - 9ACC27FBB3F9D061B9F496FA9D62C50C /* Products */ = { - isa = PBXGroup; - children = ( - 3FD1B4C1246D643E9476438C28048FA8 /* AppAuth */, - FD56AB51475BC5F592781EE2692D1412 /* GoogleSignIn */, - E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn-GoogleSignIn */, - 6FD122EA0AB9AB2A8FFA5F676C795DF0 /* GTMAppAuth */, - C1998E0D8085221AD87F89B614C10E52 /* GTMSessionFetcher */, - B097DD7534E741D5C41838011D755842 /* Pods-iosApp */, - ); - name = Products; - sourceTree = ""; - }; A4CAFA033097CAB54A2594807A23B0F4 /* Core */ = { isa = PBXGroup; children = ( @@ -939,6 +929,24 @@ path = "../Target Support Files/GTMAppAuth"; sourceTree = ""; }; + BA6B7BC2729F657E9D3682E55CA6E980 /* Pods-iosApp */ = { + isa = PBXGroup; + children = ( + 11C9B998CE0869936AE6BE69270DAAC9 /* Pods-iosApp.modulemap */, + E4C923318724794E3CC670804C2D6A6B /* Pods-iosApp-acknowledgements.markdown */, + 76D28488EA8CF5C697DFF07967A9960E /* Pods-iosApp-acknowledgements.plist */, + E6DB2A5F5DADA1DDE45F36B1A2D6AC16 /* Pods-iosApp-dummy.m */, + 55ABB06C8A1800962A74E007E7733796 /* Pods-iosApp-frameworks.sh */, + 76A263267985B0185D85E24D40FCEE9A /* Pods-iosApp-Info.plist */, + 6F3B5FED07117E377CFAC3D49B490F17 /* Pods-iosApp-resources.sh */, + 015E0D7EA7331961AB63E5AFECA86BB5 /* Pods-iosApp-umbrella.h */, + E462E23B3674BF94EAB1504D506F2803 /* Pods-iosApp.debug.xcconfig */, + 244FC2DAA936A0B07ACEFDC74E2D54B8 /* Pods-iosApp.release.xcconfig */, + ); + name = "Pods-iosApp"; + path = "Target Support Files/Pods-iosApp"; + sourceTree = ""; + }; C4375FAB4EB20B14DCDBDEBC098CE572 /* Pods */ = { isa = PBXGroup; children = ( @@ -950,16 +958,40 @@ name = Pods; sourceTree = ""; }; + C898C9B55AE217CCB5172FB9EF5488C3 /* Pod */ = { + isa = PBXGroup; + children = ( + 5863B4851BDA4305CDDB19DC1CD22B89 /* composeApp.podspec */, + ); + name = Pod; + sourceTree = ""; + }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 313FE5FE915A4A924C55AAC02A910D61 /* Development Pods */, + DB2D0B7CE4B9F3DF4C66009F5A5495A4 /* Development Pods */, 8275CCB4E8732497B1021FCBC240F3C2 /* Frameworks */, C4375FAB4EB20B14DCDBDEBC098CE572 /* Pods */, - 9ACC27FBB3F9D061B9F496FA9D62C50C /* Products */, - 11C970DEAE48C6D0282DFE54684F53F1 /* Targets Support Files */, + 3CEC6A1BA39E703306E5EFBD7B19CC72 /* Products */, + D456857FB6E5BC3266BEC21401D60DB5 /* Targets Support Files */, + ); + sourceTree = ""; + }; + D456857FB6E5BC3266BEC21401D60DB5 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + BA6B7BC2729F657E9D3682E55CA6E980 /* Pods-iosApp */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + DB2D0B7CE4B9F3DF4C66009F5A5495A4 /* Development Pods */ = { + isa = PBXGroup; + children = ( + 4520E688BDF42E653AD1D18C5A46BFEA /* composeApp */, ); + name = "Development Pods"; sourceTree = ""; }; EE0EE825E6E383D4A8A9CFAC226C1808 /* Support Files */ = { @@ -991,15 +1023,15 @@ path = "../Target Support Files/AppAuth"; sourceTree = ""; }; - EEF3277DCE2E4B31CF76A57AB68C2BA1 /* shared */ = { + EFC62879999E1B36085F01CB70823F9D /* Support Files */ = { isa = PBXGroup; children = ( - 7DBF81461E18ACE1B4BD971BAC841CF7 /* Frameworks */, - 569B56E5B05425CAE32676C6049DC8CB /* Pod */, - 5CB66AAACA3977B45E9869C360E9F289 /* Support Files */, + 50FD35FE117ECFE01E74CDF884212EF2 /* composeApp.debug.xcconfig */, + E92F0AB63D269CD9685265D1E701020A /* composeApp.release.xcconfig */, + 336205D63FC7566077865B8691AE38D4 /* ResourceBundle-LibresComposeApp-composeApp-Info.plist */, ); - name = shared; - path = ../../shared; + name = "Support Files"; + path = "../iosApp/Pods/Target Support Files/composeApp"; sourceTree = ""; }; F64F6CEF3CF75CC9F062405EBD1D24AD /* GTMAppAuth */ = { @@ -1023,19 +1055,6 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 1175CFC67C2122C4B2FCC0B208900CB4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - DFB1AF6102D50B92C0742DBFA7CFBBF3 /* GTMSessionFetcher.h in Headers */, - 5ADFFB5030307B33393A6A9B9FA3389B /* GTMSessionFetcher-umbrella.h in Headers */, - BE427B0223B4411BA66D3831D611F11F /* GTMSessionFetcherLogging.h in Headers */, - 59387CFDA4633B5B1292264569390AC5 /* GTMSessionFetcherService.h in Headers */, - 5C493B789379CD16BA17E9E2A167227E /* GTMSessionFetcherService+Internal.h in Headers */, - 4232544220F8673B1B71B67853819E6E /* GTMSessionUploadFetcher.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 187A695464397D98D5BE188F47FDB6A3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1130,11 +1149,24 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 81ACD9303CA4F7A4E64C4E0E000DD878 /* Headers */ = { + E15E89D103990641735989098D2B4B45 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - F76F4B20219DCA37BA8D4D153E49870F /* Pods-iosApp-umbrella.h in Headers */, + 934940CC0F32CF0166FC9647EBF8EAAE /* Pods-iosApp-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F8FC2D4CA681D52EC36751AD36D9558A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 6DEAC3B655C6C127E0875CD7718E30DC /* GTMSessionFetcher.h in Headers */, + 9117CDC88CE4069283754C8844547AF8 /* GTMSessionFetcher-umbrella.h in Headers */, + D3A720312C953715F2296325511DA43C /* GTMSessionFetcherLogging.h in Headers */, + FAB591A77D4EC2B7E75AD3425A04AADA /* GTMSessionFetcherService.h in Headers */, + 3D1A1285B605CA44C4E78638B3BCBA93 /* GTMSessionFetcherService+Internal.h in Headers */, + EF6F7B5E72386510BE4CF0DCC7288834 /* GTMSessionUploadFetcher.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1159,13 +1191,30 @@ productReference = 3FD1B4C1246D643E9476438C28048FA8 /* AppAuth */; productType = "com.apple.product-type.framework"; }; + 62631BC1E9BA3F85793C995CF410C0C8 /* composeApp-LibresComposeApp */ = { + isa = PBXNativeTarget; + buildConfigurationList = DE3DB4BF8B3DE84F505A4DB4F4827305 /* Build configuration list for PBXNativeTarget "composeApp-LibresComposeApp" */; + buildPhases = ( + 1C4FDD91A3A121817044528A67E2D6D9 /* Sources */, + 72B9FA746EB9EA92EE7B0F25A9385FC5 /* Frameworks */, + 86FB98D9FA984C7430A9802B64058DC9 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "composeApp-LibresComposeApp"; + productName = LibresComposeApp; + productReference = 31F87FB8022080C95B1F137E9279467A /* composeApp-LibresComposeApp */; + productType = "com.apple.product-type.bundle"; + }; 7DFA91ED3A3D0BC020C3C843A3D1EB38 /* GoogleSignIn-GoogleSignIn */ = { isa = PBXNativeTarget; - buildConfigurationList = F8625E0EDF00375AC0B1358505BCB7F5 /* Build configuration list for PBXNativeTarget "GoogleSignIn-GoogleSignIn" */; + buildConfigurationList = 6C12C75418DA390B15AC04FECDADEB75 /* Build configuration list for PBXNativeTarget "GoogleSignIn-GoogleSignIn" */; buildPhases = ( - ED1D3B615E67A702C6BA1B27331F714F /* Sources */, - D617F1B428F626FCC8D5F83CCC827E2F /* Frameworks */, - 1AA2EE9221F34A90727438B616391A92 /* Resources */, + CB54430D084000DA4A149F817755DD43 /* Sources */, + 329A71D900E8F2FCBFE536D5F87C3CBC /* Frameworks */, + 8DD94C1775A2FB17D3721E2C9C1FE885 /* Resources */, ); buildRules = ( ); @@ -1188,8 +1237,8 @@ buildRules = ( ); dependencies = ( - 1BBCE200DB90F3B82ACD43CD4793930C /* PBXTargetDependency */, - CA752924664A699F92F01C9C8ECC42BF /* PBXTargetDependency */, + A3340E9E27FAAF6F80CB44AAF802C02C /* PBXTargetDependency */, + CE3B8A5B0D7505A753E649B7EEE641AD /* PBXTargetDependency */, ); name = GTMAppAuth; productName = GTMAppAuth; @@ -1208,10 +1257,10 @@ buildRules = ( ); dependencies = ( - 072FD80B2A453C3F2DE6893DB00A8546 /* PBXTargetDependency */, - A862F9B72451A96BC3D0ACC25DE7A4F0 /* PBXTargetDependency */, - CF55B8F10554708A28D53682DD9311A3 /* PBXTargetDependency */, - 6618718070E94EF0EF55BF6B0FBB6E22 /* PBXTargetDependency */, + B9A259085B206417E4201CA28F028FA0 /* PBXTargetDependency */, + 2D73200B17DE98D9C9B88233BE4EDD48 /* PBXTargetDependency */, + E2F78C93DF674B97D1995214B510C118 /* PBXTargetDependency */, + 1944B5C66C360C4ECE667FDD3DD9D227 /* PBXTargetDependency */, ); name = GoogleSignIn; productName = GoogleSignIn; @@ -1220,12 +1269,12 @@ }; D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */ = { isa = PBXNativeTarget; - buildConfigurationList = 5D86C43DAE7746C79D2D113B125CE4C0 /* Build configuration list for PBXNativeTarget "GTMSessionFetcher" */; + buildConfigurationList = A86B12AA212F8779A282E9E902B0B2B4 /* Build configuration list for PBXNativeTarget "GTMSessionFetcher" */; buildPhases = ( - 1175CFC67C2122C4B2FCC0B208900CB4 /* Headers */, - 787E91CF39E847CFA9B90B4B2A8C7334 /* Sources */, - 7E291F728B36A2B4BCAE7DBF96BFF62C /* Frameworks */, - D8EB5E1DD190AE60E69F8B015ECDBA0D /* Resources */, + F8FC2D4CA681D52EC36751AD36D9558A /* Headers */, + AB3ABA8144DF69EC3D6BBC7268BA30C1 /* Sources */, + 8A40B6334F4C6F2EB2611B6735651D4D /* Frameworks */, + A8D176D5B6BE5EAFDDAE632CE6FE6E4D /* Resources */, ); buildRules = ( ); @@ -1238,21 +1287,21 @@ }; ED39C638569286489CD697A6C8964146 /* Pods-iosApp */ = { isa = PBXNativeTarget; - buildConfigurationList = 7058F34BA98D0848F7EBD8337119905B /* Build configuration list for PBXNativeTarget "Pods-iosApp" */; + buildConfigurationList = 7DB1A94DFD49BD52D79B29AC71D14644 /* Build configuration list for PBXNativeTarget "Pods-iosApp" */; buildPhases = ( - 81ACD9303CA4F7A4E64C4E0E000DD878 /* Headers */, - 8212A66C3A484B5287A6B4BFFB3ED1A4 /* Sources */, - 2E3A223E16D959A7D46F738644908EE1 /* Frameworks */, - 21876FE08BF21766D3099175A78FA32A /* Resources */, + E15E89D103990641735989098D2B4B45 /* Headers */, + E8392FC0BB2063DB7E73802A191D281D /* Sources */, + 580F5B9B5A1F5048D1EE0BDA9E92081B /* Frameworks */, + 194D1985995AB970E1F49AAD72228595 /* Resources */, ); buildRules = ( ); dependencies = ( - C6F8EAFDB94E9F20098398D2A3719E5A /* PBXTargetDependency */, - 5B6659C7ED95C993CA373FE31DFB03B2 /* PBXTargetDependency */, - 0F509E5A4B89BC360F462499AED1A97E /* PBXTargetDependency */, - B039ED351F39341EA1FF5FAB65BBA071 /* PBXTargetDependency */, - 8D3D51EBEBC7ACF3B18D453B793AD937 /* PBXTargetDependency */, + 5EAFE0A3D8CD4EC915BFCAC138FD7942 /* PBXTargetDependency */, + 0D7C493B8BB39AFCA4021673FC75BF60 /* PBXTargetDependency */, + 38E689CB2D357EDEE01D3F66B17AF01B /* PBXTargetDependency */, + 7EF7A0125BFFF54FE643BADCE72A92ED /* PBXTargetDependency */, + 50BED98743AEF20D601B7F9526584843 /* PBXTargetDependency */, ); name = "Pods-iosApp"; productName = Pods_iosApp; @@ -1269,7 +1318,7 @@ LastUpgradeCheck = 1300; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 10.0"; + compatibilityVersion = "Xcode 14.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -1314,101 +1363,110 @@ zh_TW, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 9ACC27FBB3F9D061B9F496FA9D62C50C /* Products */; + productRefGroup = 3CEC6A1BA39E703306E5EFBD7B19CC72 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 5C642AA10FB29936669CC269F42079C6 /* AppAuth */, + B96E9866C2872A8B63836A92F517CD48 /* composeApp */, + 62631BC1E9BA3F85793C995CF410C0C8 /* composeApp-LibresComposeApp */, CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */, 7DFA91ED3A3D0BC020C3C843A3D1EB38 /* GoogleSignIn-GoogleSignIn */, 8627999EF1D5E93E13DAFF580DA8CDCF /* GTMAppAuth */, D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */, ED39C638569286489CD697A6C8964146 /* Pods-iosApp */, - 8777C9F6889E59EFFD631D80AEE9048B /* shared */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 1AA2EE9221F34A90727438B616391A92 /* Resources */ = { + 194D1985995AB970E1F49AAD72228595 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2601A5E022F946805AD2DCFEDF882720 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 091C3DA113FA9A5D5DFAC6051C057BD5 /* ar.lproj in Resources */, - 3CE5589ECB60F281C733C47DE0FDA186 /* ca.lproj in Resources */, - 71F3A84FA70969C792A1B1F0B1FC55B3 /* cs.lproj in Resources */, - CA6772E65A8C7A0CA89C81AEE2130EBA /* da.lproj in Resources */, - 6514970E819CBD257E6C5445AE4678CF /* de.lproj in Resources */, - 38C6D68624FE2FE864331918FCC64CF9 /* el.lproj in Resources */, - FCE3D815F427AE2194C979C0C43D7980 /* en.lproj in Resources */, - 44A4B8F6C07E8C6E38E6D019948E8EB4 /* en_GB.lproj in Resources */, - 486C371322390EBC669B7A4CA80DFC94 /* es.lproj in Resources */, - 9F5A2FE8960EF352A1F240A58DB732AD /* es_MX.lproj in Resources */, - A4D8A1AD7850359B62D29F51C48F281A /* fi.lproj in Resources */, - 17F69E2CFFB6D8961D5437C7F154414B /* fr.lproj in Resources */, - 391A946E03EE3F2189AE3971A8F4F0E8 /* fr_CA.lproj in Resources */, - 8E8A3535BEEA126D7FA07D850D05E743 /* google.png in Resources */, - FF506D938D32E8FAC4AE0A03624E9133 /* google@2x.png in Resources */, - 008AEF3D0ED15D9901C505999DC42781 /* google@3x.png in Resources */, - 47CA727B8865151D71B9878A56264F47 /* he.lproj in Resources */, - 99C2D0C9AA1DD8D0BC601D798A51D919 /* hi.lproj in Resources */, - 062D996342F72EECE7A8ACAAC0A7EACC /* hr.lproj in Resources */, - D4E7323863A25D5CA361003C84B9EDB3 /* hu.lproj in Resources */, - 924A0F299A9EB738B3BC3252B007EBDC /* id.lproj in Resources */, - 40D532665B8A2272D7B856E5C7D150D4 /* it.lproj in Resources */, - D3ADA950D498BC15901BDD83FF39C70C /* ja.lproj in Resources */, - 786279267A48028AC32FF46667715769 /* ko.lproj in Resources */, - D04BFE4E4EE3E82A2FA3F3C4629F144F /* ms.lproj in Resources */, - 51C9FA0A90EBD65FBB9ACB9E5EEEBF53 /* nb.lproj in Resources */, - 49877E2DD6721D857B5543D06CEA9033 /* nl.lproj in Resources */, - 29FF7A2D1E1C2367FF0C4EB8736DC29E /* pl.lproj in Resources */, - B8D8276518137F995684F50FC67E8282 /* pt.lproj in Resources */, - 9603C8DC52735F7253CD630234EF28AA /* pt_BR.lproj in Resources */, - 0A4977752D359B5C38E6AE8A4FA3E6B3 /* pt_PT.lproj in Resources */, - 958F82BF00818F5D770ECB5D204D21C8 /* ro.lproj in Resources */, - 119911D0EB5F3DF7F3E2A6B6A8A68DB5 /* Roboto-Bold.ttf in Resources */, - ED4BE908D872EC6DD08AA63AF7C06B61 /* ru.lproj in Resources */, - 82A3AED084C0CB06840CDFA18C6F716F /* sk.lproj in Resources */, - 91165ECB8895AC667CF4333FB4C4363C /* sv.lproj in Resources */, - 491CDAF765BAAD32BE60331D4C2C59C5 /* th.lproj in Resources */, - 590B6F91C987FD68308313E655D7346B /* tr.lproj in Resources */, - 28A4F8FD963EEA9DD6DD86C8709A8F8B /* uk.lproj in Resources */, - 64F6B1DAECC70D21FA26D520B646FAED /* vi.lproj in Resources */, - D28D3C6039706C6F00E306CE90E15138 /* zh_CN.lproj in Resources */, - 0B575F3BC45EBAED19234D2063F23017 /* zh_TW.lproj in Resources */, + C80E6A729D4A289850B7EFF27521998D /* GoogleSignIn-GoogleSignIn in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 21876FE08BF21766D3099175A78FA32A /* Resources */ = { + 2DE9CAF821DA733AF87E03FB3357AFE5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 2601A5E022F946805AD2DCFEDF882720 /* Resources */ = { + 6A8691D9D62A92267A23BD533B3D4D7C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C80E6A729D4A289850B7EFF27521998D /* GoogleSignIn-GoogleSignIn in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 2DE9CAF821DA733AF87E03FB3357AFE5 /* Resources */ = { + 86FB98D9FA984C7430A9802B64058DC9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1FEB9B456511602E0270ECE3B67EFC50 /* LibresComposeApp.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6A8691D9D62A92267A23BD533B3D4D7C /* Resources */ = { + 8DD94C1775A2FB17D3721E2C9C1FE885 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 5E4B5CAAE8EC0083852B9BA950CC58C7 /* ar.lproj in Resources */, + 742E261BF7357161A0BEB8F203A967D1 /* ca.lproj in Resources */, + 80778BFD74334FA27C9CE8BB310C3521 /* cs.lproj in Resources */, + 48E81707300A4513786FB96262CEC720 /* da.lproj in Resources */, + 665AD804117F64AF08A5DC474C8E0C27 /* de.lproj in Resources */, + 5DD2A703EF78F064ACDD2AAA60F76CC9 /* el.lproj in Resources */, + A4BF25729FE3AC9DD3A6535D7416E76A /* en.lproj in Resources */, + A959067A015EF95DD6FB1EE32B567785 /* en_GB.lproj in Resources */, + 1C30B30F62235F5309A55DFA3D3963EF /* es.lproj in Resources */, + D3CF07BFA2974C32A0353F892896DC52 /* es_MX.lproj in Resources */, + D1FE3A1D03750C095BBD4DB16BAEE383 /* fi.lproj in Resources */, + FA8BC718D1B5DCC6EC5FBFFE99EC30AC /* fr.lproj in Resources */, + 60A034FB73AF8B1F0D605C5DE30F6070 /* fr_CA.lproj in Resources */, + B55A8F3B1829DAF9C7A9440CFBB0C5FC /* google.png in Resources */, + BF233755957539E933D32E576A51484F /* google@2x.png in Resources */, + 00E914F8854F3BD72E58A121ED785294 /* google@3x.png in Resources */, + 4DFCF7F4A879E4D2655994AC4575DD67 /* he.lproj in Resources */, + 8FE346A64C06DF4496C069F94C882561 /* hi.lproj in Resources */, + 5E09C5621EEED475EA80E49F125776AF /* hr.lproj in Resources */, + E4CA34D074E0CA2BB37BB8B1D8FF5133 /* hu.lproj in Resources */, + A83EBBC9C4B1CDDCFCEF34D7AAF3A0F1 /* id.lproj in Resources */, + 294032A35E44FDC24A73F9B4E1EED920 /* it.lproj in Resources */, + E0CAC894441F41D881B4B23159DAE6F9 /* ja.lproj in Resources */, + AC45A754ECCBFCD3FB8E30A5968B71A4 /* ko.lproj in Resources */, + D281E9C1FB4250C3FA9F1733D379C8E1 /* ms.lproj in Resources */, + C1E54945FA8214EC03991F78D25FB718 /* nb.lproj in Resources */, + 1A5BAEAA64E0305EEE9CC777963A1C7C /* nl.lproj in Resources */, + 6E326BE6214F8EC73EAB80711250DA65 /* pl.lproj in Resources */, + 3214BD9EC0B6AC08B4AD1968AA573F81 /* pt.lproj in Resources */, + D84314C8A7C7AB348A917A19935ECE08 /* pt_BR.lproj in Resources */, + 517ACE65C9768C6A02B4F5EF2168D615 /* pt_PT.lproj in Resources */, + B176F27D686425D3AF03B60487E03323 /* ro.lproj in Resources */, + 5631D6D659BC9E989D8B171F6FCB390D /* Roboto-Bold.ttf in Resources */, + BAD1B76D5DD22BD9A6A57508EF6D90CB /* ru.lproj in Resources */, + 1EAD8F29295BFC118589AF1E17F2C7F3 /* sk.lproj in Resources */, + 4E7578E18E65552D4DC2EC94C03E9887 /* sv.lproj in Resources */, + 3D028B04B7973B4EB186F088043F3860 /* th.lproj in Resources */, + 8524A5A472802C4036F435AE130B4782 /* tr.lproj in Resources */, + 70CDBFA911FD4C85A81CA1D33002650B /* uk.lproj in Resources */, + 282433C94BA9B8040B68343937F348C9 /* vi.lproj in Resources */, + 5AE4CC741258BDBAB9FB37BFFD8FC40A /* zh_CN.lproj in Resources */, + B6633CB151D641ED42FB032BD1FE1456 /* zh_TW.lproj in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D8EB5E1DD190AE60E69F8B015ECDBA0D /* Resources */ = { + A8D176D5B6BE5EAFDDAE632CE6FE6E4D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -1418,19 +1476,26 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - A1F0135BF97B8D2D1D6FCB5E1FF4BEED /* [CP-User] Build shared */ = { + BF46439D48086CA3DFDEE51E83D81AC5 /* [CP-User] Build composeApp */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - name = "[CP-User] Build shared"; + name = "[CP-User] Build composeApp"; runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = " if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"\"\n exit 0\n fi\n set -ev\n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \"$REPO_ROOT/../../../../../../../private/var/folders/xs/bh5ck7bs3tv5hp49wtsbrkyr0000gn/T/wrap1loc/gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n"; + shellScript = " if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"\"\n exit 0\n fi\n set -ev\n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \"$REPO_ROOT/../../../../../../../private/var/folders/xs/bh5ck7bs3tv5hp49wtsbrkyr0000gn/T/wrap5loc/gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 1C4FDD91A3A121817044528A67E2D6D9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 67ECF0CEF949530990C82EC62D56BD49 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1468,26 +1533,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 787E91CF39E847CFA9B90B4B2A8C7334 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 950DF2FFF050F4FD9BDB4EB9F408552C /* GTMSessionFetcher.m in Sources */, - 43AEAE16684DAACB02B45F268FFD8204 /* GTMSessionFetcher-dummy.m in Sources */, - 10F6C18D67B037471AA554E0CBB98CA5 /* GTMSessionFetcherLogging.m in Sources */, - 48464459FF7299A24BEA185D1B616C01 /* GTMSessionFetcherService.m in Sources */, - C9E1F7E4C364EDD429A7FD94BEA9000D /* GTMSessionUploadFetcher.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8212A66C3A484B5287A6B4BFFB3ED1A4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FEA28F5A9E35D8745E89EBF0B3E11D0E /* Pods-iosApp-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 892AB60EF9089CFFAB9EC9C56DF04956 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1529,81 +1574,113 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - ED1D3B615E67A702C6BA1B27331F714F /* Sources */ = { + AB3ABA8144DF69EC3D6BBC7268BA30C1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6467E755691866C45C4518C93F251802 /* GTMSessionFetcher.m in Sources */, + 7A7963BEE89248BBE68184C3F39200C8 /* GTMSessionFetcher-dummy.m in Sources */, + 63FD7D058CE7CBF3CE7A2036047FE8EB /* GTMSessionFetcherLogging.m in Sources */, + 9931C5DF3DF70C63D72992F728F88813 /* GTMSessionFetcherService.m in Sources */, + 85EE6EE77D03D1A116E2A4D509C958ED /* GTMSessionUploadFetcher.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CB54430D084000DA4A149F817755DD43 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E8392FC0BB2063DB7E73802A191D281D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7B2697D191EBDA6E429AC39D94C71735 /* Pods-iosApp-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 072FD80B2A453C3F2DE6893DB00A8546 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = AppAuth; - target = 5C642AA10FB29936669CC269F42079C6 /* AppAuth */; - targetProxy = B4FC458BE6AE13719081399A76C3E343 /* PBXContainerItemProxy */; - }; - 0F509E5A4B89BC360F462499AED1A97E /* PBXTargetDependency */ = { + 0D7C493B8BB39AFCA4021673FC75BF60 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GTMSessionFetcher; - target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; - targetProxy = D441E5505B3D13924FAE930EBDDAAEC5 /* PBXContainerItemProxy */; + name = GTMAppAuth; + target = 8627999EF1D5E93E13DAFF580DA8CDCF /* GTMAppAuth */; + targetProxy = 0341D2FD6BAD4D9DB0500E4067086A4F /* PBXContainerItemProxy */; }; - 1BBCE200DB90F3B82ACD43CD4793930C /* PBXTargetDependency */ = { + 1944B5C66C360C4ECE667FDD3DD9D227 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AppAuth; - target = 5C642AA10FB29936669CC269F42079C6 /* AppAuth */; - targetProxy = 8B71F9D1311FA39ADC89685AE5283BC3 /* PBXContainerItemProxy */; + name = "GoogleSignIn-GoogleSignIn"; + target = 7DFA91ED3A3D0BC020C3C843A3D1EB38 /* GoogleSignIn-GoogleSignIn */; + targetProxy = 57554F649A4F76C53E27D744A8717535 /* PBXContainerItemProxy */; }; - 5B6659C7ED95C993CA373FE31DFB03B2 /* PBXTargetDependency */ = { + 2D73200B17DE98D9C9B88233BE4EDD48 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GTMAppAuth; target = 8627999EF1D5E93E13DAFF580DA8CDCF /* GTMAppAuth */; - targetProxy = 3AC01EC1457492BDCB9DD5857B082F66 /* PBXContainerItemProxy */; + targetProxy = 0FACAC4086CE9FBE5BEBAE24D7D671F2 /* PBXContainerItemProxy */; }; - 6618718070E94EF0EF55BF6B0FBB6E22 /* PBXTargetDependency */ = { + 38E689CB2D357EDEE01D3F66B17AF01B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "GoogleSignIn-GoogleSignIn"; - target = 7DFA91ED3A3D0BC020C3C843A3D1EB38 /* GoogleSignIn-GoogleSignIn */; - targetProxy = E33BF018EDD639E214A513640CCE0DBD /* PBXContainerItemProxy */; + name = GTMSessionFetcher; + target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; + targetProxy = D5A127A2921A33D364FE8D5D49659E06 /* PBXContainerItemProxy */; }; - 8D3D51EBEBC7ACF3B18D453B793AD937 /* PBXTargetDependency */ = { + 3B00337DCA76D2834CF3DBD142949DF0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = shared; - target = 8777C9F6889E59EFFD631D80AEE9048B /* shared */; - targetProxy = EA4AB95310163768D3A030966F831430 /* PBXContainerItemProxy */; + name = "composeApp-LibresComposeApp"; + target = 62631BC1E9BA3F85793C995CF410C0C8 /* composeApp-LibresComposeApp */; + targetProxy = A3FAF5298939BED59221D86E52E8F16B /* PBXContainerItemProxy */; }; - A862F9B72451A96BC3D0ACC25DE7A4F0 /* PBXTargetDependency */ = { + 50BED98743AEF20D601B7F9526584843 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GTMAppAuth; - target = 8627999EF1D5E93E13DAFF580DA8CDCF /* GTMAppAuth */; - targetProxy = 23758A71BB2CE2C81DFC32EBDD85D53B /* PBXContainerItemProxy */; + name = composeApp; + target = B96E9866C2872A8B63836A92F517CD48 /* composeApp */; + targetProxy = 1E14690846592DACDC197F0C501D54B0 /* PBXContainerItemProxy */; + }; + 5EAFE0A3D8CD4EC915BFCAC138FD7942 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AppAuth; + target = 5C642AA10FB29936669CC269F42079C6 /* AppAuth */; + targetProxy = 088F3C2C7B827A38114C442FCFAAE8D6 /* PBXContainerItemProxy */; }; - B039ED351F39341EA1FF5FAB65BBA071 /* PBXTargetDependency */ = { + 7EF7A0125BFFF54FE643BADCE72A92ED /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GoogleSignIn; target = CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */; - targetProxy = 04CA3424ED06D5602D81E4DE8FC64303 /* PBXContainerItemProxy */; + targetProxy = 2D3EF3AA098811EFEF9E5FDF234C67C2 /* PBXContainerItemProxy */; + }; + A3340E9E27FAAF6F80CB44AAF802C02C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AppAuth; + target = 5C642AA10FB29936669CC269F42079C6 /* AppAuth */; + targetProxy = 3816CCF895F7629E12FD3E761895D765 /* PBXContainerItemProxy */; }; - C6F8EAFDB94E9F20098398D2A3719E5A /* PBXTargetDependency */ = { + B9A259085B206417E4201CA28F028FA0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = AppAuth; target = 5C642AA10FB29936669CC269F42079C6 /* AppAuth */; - targetProxy = 37F95E100CED334E80B28DE4EB628B16 /* PBXContainerItemProxy */; + targetProxy = 274C83865EB0E77225412FD01BB142D1 /* PBXContainerItemProxy */; }; - CA752924664A699F92F01C9C8ECC42BF /* PBXTargetDependency */ = { + CE3B8A5B0D7505A753E649B7EEE641AD /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GTMSessionFetcher; target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; - targetProxy = 96F63F7C5B77F0A54CA859CCB4DEE08C /* PBXContainerItemProxy */; + targetProxy = C33F43923432A9AB9738DA5A948D6E07 /* PBXContainerItemProxy */; + }; + D5A81774110146618D61171DED790155 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleSignIn; + target = CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */; + targetProxy = 88A02DEDBBD845281CD40A17FAB9358A /* PBXContainerItemProxy */; }; - CF55B8F10554708A28D53682DD9311A3 /* PBXTargetDependency */ = { + E2F78C93DF674B97D1995214B510C118 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GTMSessionFetcher; target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; - targetProxy = FBCA3DC41D601F1338611E85E78465A0 /* PBXContainerItemProxy */; + targetProxy = 2229C2717F5ED0E96BFC5E7300487988 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -1612,7 +1689,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 39A51B30551953A285BC504B91F59C61 /* GTMAppAuth.release.xcconfig */; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = x86_64; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1624,7 +1700,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1644,48 +1720,28 @@ }; name = Release; }; - 15057F749163759EA1743B5FE0B5668B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 95B09EA82E7AF9ACCCCAF3E55C859116 /* shared.debug.xcconfig */; - buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = x86_64; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_WEAK = NO; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 1F2C8264CD91A3920F8E972C0021FAE0 /* Debug */ = { + 0944BCF9F82CD40F938EDDE07999919F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 466CD5F063C773FDBC08BE7148FAC530 /* GoogleSignIn.debug.xcconfig */; + baseConfigurationReference = 404F38E55A727EF1786B49C2A972300C /* GoogleSignIn.release.xcconfig */; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = x86_64; CODE_SIGNING_ALLOWED = NO; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleSignIn"; IBSC_MODULE = GoogleSignIn; INFOPLIST_FILE = "Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; PRODUCT_NAME = GoogleSignIn; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Debug; + name = Release; }; - 209373FFB982C80F9CC3893532767EBA /* Debug */ = { + 0A7F8976DDD33548FC2572451AA56663 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3F64BADB16C311E9D09DAD0116F684F4 /* Pods-iosApp.debug.xcconfig */; + baseConfigurationReference = E462E23B3674BF94EAB1504D506F2803 /* Pods-iosApp.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - "ARCHS[sdk=iphonesimulator*]" = x86_64; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1697,7 +1753,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/Pods-iosApp/Pods-iosApp-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 13; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1718,30 +1774,11 @@ }; name = Debug; }; - 20FE518C6993CBFAA67ACEE1B8C59B22 /* Release */ = { + 103E0F46F3936A7FAE76D83F349EFE20 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 35548E3BD8DA30925E8FE97E67B84868 /* shared.release.xcconfig */; + baseConfigurationReference = 68E763A01599073C48BEF14249787EFC /* GTMSessionFetcher.release.xcconfig */; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = x86_64; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_OBJC_WEAK = NO; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 73967827B79F1158451F327A03AA5288 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 58B7F380E4871801EBB9C54F2B09B4BF /* AppAuth.debug.xcconfig */; - buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = x86_64; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1750,72 +1787,99 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/AppAuth/AppAuth-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AppAuth/AppAuth-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/AppAuth/AppAuth.modulemap"; - PRODUCT_MODULE_NAME = AppAuth; - PRODUCT_NAME = AppAuth; + MODULEMAP_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap"; + PRODUCT_MODULE_NAME = GTMSessionFetcher; + PRODUCT_NAME = GTMSessionFetcher; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = ""; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 775C2A09F77652CE17DB7B51EE61F7B4 /* Release */ = { + 10BD71CD69507B58DCE08E4BF5C0E278 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9FECCB5AFF87D121F15BA01E683C7932 /* Pods-iosApp.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - "ARCHS[sdk=iphonesimulator*]" = x86_64; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-iosApp/Pods-iosApp-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; - LD_RUNPATH_SEARCH_PATHS = ( + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-iosApp/Pods-iosApp.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; }; - name = Release; + name = Debug; }; - 8A34CF7C058FDEE6696BB6BD4AFF7C39 /* Release */ = { + 11D472F1AD9668A709D31EEC5737DD28 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD3A3768FD2D7080E23D3D6065E940D5 /* AppAuth.release.xcconfig */; + baseConfigurationReference = 2E11C896F1F81FEB2F4FD6261B2F2E75 /* GTMSessionFetcher.debug.xcconfig */; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = x86_64; + CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1824,30 +1888,28 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/AppAuth/AppAuth-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/AppAuth/AppAuth-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/AppAuth/AppAuth.modulemap"; - PRODUCT_MODULE_NAME = AppAuth; - PRODUCT_NAME = AppAuth; + MODULEMAP_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap"; + PRODUCT_MODULE_NAME = GTMSessionFetcher; + PRODUCT_NAME = GTMSessionFetcher; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = ""; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 903A0004D3E6651EFD5D2E16214D101B /* Release */ = { + 280CBEAB0354DDBC341510E41B3F1D36 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -1897,7 +1959,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1909,12 +1971,27 @@ }; name = Release; }; - 913A136276781B2C8E584B488B0E5060 /* Release */ = { + 2F8DED839A442C2F87180C1C2198ADFF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 68E763A01599073C48BEF14249787EFC /* GTMSessionFetcher.release.xcconfig */; + baseConfigurationReference = 466CD5F063C773FDBC08BE7148FAC530 /* GoogleSignIn.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleSignIn"; + IBSC_MODULE = GoogleSignIn; + INFOPLIST_FILE = "Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + PRODUCT_NAME = GoogleSignIn; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 48C4116A3161C0DA7989A1E88F6DCA29 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CD3A3768FD2D7080E23D3D6065E940D5 /* AppAuth.release.xcconfig */; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = x86_64; - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1923,17 +2000,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AppAuth/AppAuth-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AppAuth/AppAuth-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap"; - PRODUCT_MODULE_NAME = GTMSessionFetcher; - PRODUCT_NAME = GTMSessionFetcher; + MODULEMAP_FILE = "Target Support Files/AppAuth/AppAuth.modulemap"; + PRODUCT_MODULE_NAME = AppAuth; + PRODUCT_NAME = AppAuth; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -1945,30 +2023,10 @@ }; name = Release; }; - 9A4DFA1244D965595C2334419DDA7E04 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 404F38E55A727EF1786B49C2A972300C /* GoogleSignIn.release.xcconfig */; - buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = x86_64; - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleSignIn"; - IBSC_MODULE = GoogleSignIn; - INFOPLIST_FILE = "Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; - PRODUCT_NAME = GoogleSignIn; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - A47D72EEE9EC9BA1946C4A7D59FD0227 /* Debug */ = { + 61B25A52857AA65D403905F0CC6BD68E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F2609545F40550A0309EDE95CF4762F8 /* GTMAppAuth.debug.xcconfig */; + baseConfigurationReference = 58B7F380E4871801EBB9C54F2B09B4BF /* AppAuth.debug.xcconfig */; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = x86_64; - CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1977,17 +2035,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/AppAuth/AppAuth-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/AppAuth/AppAuth-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth.modulemap"; - PRODUCT_MODULE_NAME = GTMAppAuth; - PRODUCT_NAME = GTMAppAuth; + MODULEMAP_FILE = "Target Support Files/AppAuth/AppAuth.modulemap"; + PRODUCT_MODULE_NAME = AppAuth; + PRODUCT_NAME = AppAuth; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -1998,77 +2057,45 @@ }; name = Debug; }; - B4EFE046ACF8F37157F6E322C7FCFC28 /* Debug */ = { + 66A4133720813ED21598AA08398210A3 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = E92F0AB63D269CD9685265D1E701020A /* composeApp.release.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_OBJC_WEAK = NO; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", + "@executable_path/Frameworks", ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 783C38BE2B5F0D9E6FAA7432D73EFAB8 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E92F0AB63D269CD9685265D1E701020A /* composeApp.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/composeApp"; + IBSC_MODULE = composeApp; + INFOPLIST_FILE = "Target Support Files/composeApp/ResourceBundle-LibresComposeApp-composeApp-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; + PRODUCT_NAME = LibresComposeApp; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; }; - name = Debug; + name = Release; }; - B7FC135578D27421F2878B7282230AED /* Debug */ = { + A47D72EEE9EC9BA1946C4A7D59FD0227 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2E11C896F1F81FEB2F4FD6261B2F2E75 /* GTMSessionFetcher.debug.xcconfig */; + baseConfigurationReference = F2609545F40550A0309EDE95CF4762F8 /* GTMAppAuth.debug.xcconfig */; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = x86_64; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2078,17 +2105,17 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist"; + INFOPLIST_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap"; - PRODUCT_MODULE_NAME = GTMSessionFetcher; - PRODUCT_NAME = GTMSessionFetcher; + MODULEMAP_FILE = "Target Support Files/GTMAppAuth/GTMAppAuth.modulemap"; + PRODUCT_MODULE_NAME = GTMAppAuth; + PRODUCT_NAME = GTMAppAuth; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -2103,7 +2130,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 404F38E55A727EF1786B49C2A972300C /* GoogleSignIn.release.xcconfig */; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = x86_64; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2114,7 +2140,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -2138,7 +2164,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 466CD5F063C773FDBC08BE7148FAC530 /* GoogleSignIn.debug.xcconfig */; buildSettings = { - "ARCHS[sdk=iphonesimulator*]" = x86_64; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -2149,7 +2174,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -2168,9 +2193,90 @@ }; name = Debug; }; + E823886A8BD75087D4042C94BC2B1831 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 244FC2DAA936A0B07ACEFDC74E2D54B8 /* Pods-iosApp.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-iosApp/Pods-iosApp-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-iosApp/Pods-iosApp.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + F5376A380568881677DF5D775F014679 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 50FD35FE117ECFE01E74CDF884212EF2 /* composeApp.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/composeApp"; + IBSC_MODULE = composeApp; + INFOPLIST_FILE = "Target Support Files/composeApp/ResourceBundle-LibresComposeApp-composeApp-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + PRODUCT_NAME = LibresComposeApp; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + FB1CB604AF4F57FE0DFA3D5D6A1FCCD0 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 50FD35FE117ECFE01E74CDF884212EF2 /* composeApp.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_OBJC_WEAK = NO; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 060F7DB51E177926791CF73DD8BB1267 /* Build configuration list for PBXAggregateTarget "composeApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FB1CB604AF4F57FE0DFA3D5D6A1FCCD0 /* Debug */, + 66A4133720813ED21598AA08398210A3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 1166072F19D605AE7E4B016DD27CFA21 /* Build configuration list for PBXNativeTarget "GTMAppAuth" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -2192,53 +2298,53 @@ 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - B4EFE046ACF8F37157F6E322C7FCFC28 /* Debug */, - 903A0004D3E6651EFD5D2E16214D101B /* Release */, + 10BD71CD69507B58DCE08E4BF5C0E278 /* Debug */, + 280CBEAB0354DDBC341510E41B3F1D36 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5D86C43DAE7746C79D2D113B125CE4C0 /* Build configuration list for PBXNativeTarget "GTMSessionFetcher" */ = { + 6C12C75418DA390B15AC04FECDADEB75 /* Build configuration list for PBXNativeTarget "GoogleSignIn-GoogleSignIn" */ = { isa = XCConfigurationList; buildConfigurations = ( - B7FC135578D27421F2878B7282230AED /* Debug */, - 913A136276781B2C8E584B488B0E5060 /* Release */, + 2F8DED839A442C2F87180C1C2198ADFF /* Debug */, + 0944BCF9F82CD40F938EDDE07999919F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7058F34BA98D0848F7EBD8337119905B /* Build configuration list for PBXNativeTarget "Pods-iosApp" */ = { + 7DB1A94DFD49BD52D79B29AC71D14644 /* Build configuration list for PBXNativeTarget "Pods-iosApp" */ = { isa = XCConfigurationList; buildConfigurations = ( - 209373FFB982C80F9CC3893532767EBA /* Debug */, - 775C2A09F77652CE17DB7B51EE61F7B4 /* Release */, + 0A7F8976DDD33548FC2572451AA56663 /* Debug */, + E823886A8BD75087D4042C94BC2B1831 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - AA5A2205A881DE5528CA6FE384DDD74F /* Build configuration list for PBXNativeTarget "AppAuth" */ = { + A86B12AA212F8779A282E9E902B0B2B4 /* Build configuration list for PBXNativeTarget "GTMSessionFetcher" */ = { isa = XCConfigurationList; buildConfigurations = ( - 73967827B79F1158451F327A03AA5288 /* Debug */, - 8A34CF7C058FDEE6696BB6BD4AFF7C39 /* Release */, + 11D472F1AD9668A709D31EEC5737DD28 /* Debug */, + 103E0F46F3936A7FAE76D83F349EFE20 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - F8625E0EDF00375AC0B1358505BCB7F5 /* Build configuration list for PBXNativeTarget "GoogleSignIn-GoogleSignIn" */ = { + AA5A2205A881DE5528CA6FE384DDD74F /* Build configuration list for PBXNativeTarget "AppAuth" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1F2C8264CD91A3920F8E972C0021FAE0 /* Debug */, - 9A4DFA1244D965595C2334419DDA7E04 /* Release */, + 61B25A52857AA65D403905F0CC6BD68E /* Debug */, + 48C4116A3161C0DA7989A1E88F6DCA29 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FD786CE772E05EDA23D37DE83EBB5628 /* Build configuration list for PBXAggregateTarget "shared" */ = { + DE3DB4BF8B3DE84F505A4DB4F4827305 /* Build configuration list for PBXNativeTarget "composeApp-LibresComposeApp" */ = { isa = XCConfigurationList; buildConfigurations = ( - 15057F749163759EA1743B5FE0B5668B /* Debug */, - 20FE518C6993CBFAA67ACEE1B8C59B22 /* Release */, + F5376A380568881677DF5D775F014679 /* Debug */, + 783C38BE2B5F0D9E6FAA7432D73EFAB8 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/AppAuth.xcscheme b/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/AppAuth.xcscheme similarity index 100% rename from mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/AppAuth.xcscheme rename to iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/AppAuth.xcscheme diff --git a/mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GTMAppAuth.xcscheme b/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GTMAppAuth.xcscheme similarity index 100% rename from mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GTMAppAuth.xcscheme rename to iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GTMAppAuth.xcscheme diff --git a/mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GTMSessionFetcher.xcscheme b/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GTMSessionFetcher.xcscheme similarity index 100% rename from mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GTMSessionFetcher.xcscheme rename to iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GTMSessionFetcher.xcscheme diff --git a/mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GoogleSignIn-GoogleSignIn.xcscheme b/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GoogleSignIn-GoogleSignIn.xcscheme similarity index 100% rename from mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GoogleSignIn-GoogleSignIn.xcscheme rename to iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GoogleSignIn-GoogleSignIn.xcscheme diff --git a/mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GoogleSignIn.xcscheme b/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GoogleSignIn.xcscheme similarity index 100% rename from mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GoogleSignIn.xcscheme rename to iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/GoogleSignIn.xcscheme diff --git a/mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/Pods-iosApp.xcscheme b/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/Pods-iosApp.xcscheme similarity index 100% rename from mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/Pods-iosApp.xcscheme rename to iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/Pods-iosApp.xcscheme diff --git a/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/composeApp-LibresComposeApp.xcscheme b/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/composeApp-LibresComposeApp.xcscheme new file mode 100644 index 0000000000000000000000000000000000000000..c8701684d503e3f4808455ece43777e0d638ef5a --- /dev/null +++ b/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/composeApp-LibresComposeApp.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/shared.xcscheme b/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/composeApp.xcscheme similarity index 92% rename from mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/shared.xcscheme rename to iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/composeApp.xcscheme index 86133ae4df55ddceeae05c9013aac54717068b1f..e997d7401efd9ace13c8a5891e9ce4ea875670f7 100644 --- a/mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/shared.xcscheme +++ b/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/composeApp.xcscheme @@ -14,9 +14,9 @@ buildForAnalyzing = "YES"> diff --git a/mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/xcschememanagement.plist b/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 62% rename from mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/xcschememanagement.plist rename to iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/xcschememanagement.plist index af835a4804cd659f768f9a9a9887b3db4b068f50..fcf60d299e923f469c2e5395275e3ec99bfafe63 100644 --- a/mobile/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/iosApp/Pods/Pods.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/xcschememanagement.plist @@ -8,36 +8,57 @@ isShown + orderHint + 0 GTMAppAuth.xcscheme isShown + orderHint + 5 GTMSessionFetcher.xcscheme isShown + orderHint + 6 GoogleSignIn-GoogleSignIn.xcscheme isShown + orderHint + 4 GoogleSignIn.xcscheme isShown + orderHint + 3 Pods-iosApp.xcscheme isShown + orderHint + 7 - shared.xcscheme + composeApp-LibresComposeApp.xcscheme isShown + orderHint + 2 + + composeApp.xcscheme + + isShown + + orderHint + 1 SuppressBuildableAutocreation diff --git a/mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth-Info.plist b/iosApp/Pods/Target Support Files/AppAuth/AppAuth-Info.plist similarity index 97% rename from mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth-Info.plist rename to iosApp/Pods/Target Support Files/AppAuth/AppAuth-Info.plist index 2d5470eecf1238bfb26616529d6e894d2fe32372..bd1b39158f17be9d8991972aa81ccc509ee5015d 100644 --- a/mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth-Info.plist +++ b/iosApp/Pods/Target Support Files/AppAuth/AppAuth-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.6.0 + 1.6.2 CFBundleSignature ???? CFBundleVersion diff --git a/mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth-dummy.m b/iosApp/Pods/Target Support Files/AppAuth/AppAuth-dummy.m similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth-dummy.m rename to iosApp/Pods/Target Support Files/AppAuth/AppAuth-dummy.m diff --git a/mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth-prefix.pch b/iosApp/Pods/Target Support Files/AppAuth/AppAuth-prefix.pch similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth-prefix.pch rename to iosApp/Pods/Target Support Files/AppAuth/AppAuth-prefix.pch diff --git a/mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth-umbrella.h b/iosApp/Pods/Target Support Files/AppAuth/AppAuth-umbrella.h similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth-umbrella.h rename to iosApp/Pods/Target Support Files/AppAuth/AppAuth-umbrella.h diff --git a/mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth.debug.xcconfig b/iosApp/Pods/Target Support Files/AppAuth/AppAuth.debug.xcconfig similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth.debug.xcconfig rename to iosApp/Pods/Target Support Files/AppAuth/AppAuth.debug.xcconfig diff --git a/mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth.modulemap b/iosApp/Pods/Target Support Files/AppAuth/AppAuth.modulemap similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth.modulemap rename to iosApp/Pods/Target Support Files/AppAuth/AppAuth.modulemap diff --git a/mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth.release.xcconfig b/iosApp/Pods/Target Support Files/AppAuth/AppAuth.release.xcconfig similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/AppAuth/AppAuth.release.xcconfig rename to iosApp/Pods/Target Support Files/AppAuth/AppAuth.release.xcconfig diff --git a/mobile/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist b/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist rename to iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-Info.plist diff --git a/mobile/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-dummy.m b/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-dummy.m similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-dummy.m rename to iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-dummy.m diff --git a/mobile/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-umbrella.h b/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-umbrella.h similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-umbrella.h rename to iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth-umbrella.h diff --git a/mobile/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.debug.xcconfig b/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.debug.xcconfig similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.debug.xcconfig rename to iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.debug.xcconfig diff --git a/mobile/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.modulemap b/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.modulemap similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.modulemap rename to iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.modulemap diff --git a/mobile/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.release.xcconfig b/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.release.xcconfig similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.release.xcconfig rename to iosApp/Pods/Target Support Files/GTMAppAuth/GTMAppAuth.release.xcconfig diff --git a/mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist b/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist similarity index 97% rename from mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist rename to iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist index 362a435d4fea629a11199b1e00af3294457c6519..56509df06ccb0580df2c1b6479cb326bec3b2026 100644 --- a/mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist +++ b/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.1.0 + 3.1.1 CFBundleSignature ???? CFBundleVersion diff --git a/mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-dummy.m b/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-dummy.m similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-dummy.m rename to iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-dummy.m diff --git a/mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-umbrella.h b/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-umbrella.h similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-umbrella.h rename to iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-umbrella.h diff --git a/mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.debug.xcconfig b/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.debug.xcconfig similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.debug.xcconfig rename to iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.debug.xcconfig diff --git a/mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap b/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap rename to iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap diff --git a/mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.release.xcconfig b/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.release.xcconfig similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.release.xcconfig rename to iosApp/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.release.xcconfig diff --git a/mobile/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist b/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist rename to iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-Info.plist diff --git a/mobile/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-dummy.m b/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-dummy.m similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-dummy.m rename to iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-dummy.m diff --git a/mobile/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-umbrella.h b/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-umbrella.h similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-umbrella.h rename to iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn-umbrella.h diff --git a/mobile/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.debug.xcconfig b/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.debug.xcconfig similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.debug.xcconfig rename to iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.debug.xcconfig diff --git a/mobile/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.modulemap b/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.modulemap similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.modulemap rename to iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.modulemap diff --git a/mobile/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.release.xcconfig b/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.release.xcconfig similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.release.xcconfig rename to iosApp/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.release.xcconfig diff --git a/mobile/iosApp/Pods/Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist b/iosApp/Pods/Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist rename to iosApp/Pods/Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-Info.plist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-Info.plist similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-Info.plist rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-Info.plist diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.markdown b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.markdown similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.markdown rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.markdown diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.plist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.plist similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.plist rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.plist diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-dummy.m b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-dummy.m similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-dummy.m rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-dummy.m diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-input-files.xcfilelist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-input-files.xcfilelist similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-input-files.xcfilelist rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-input-files.xcfilelist diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-output-files.xcfilelist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-output-files.xcfilelist similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-output-files.xcfilelist rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-output-files.xcfilelist diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-input-files.xcfilelist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-input-files.xcfilelist similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-input-files.xcfilelist rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-input-files.xcfilelist diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-output-files.xcfilelist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-output-files.xcfilelist similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-output-files.xcfilelist rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-output-files.xcfilelist diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources-Debug-input-files.xcfilelist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources-Debug-input-files.xcfilelist new file mode 100644 index 0000000000000000000000000000000000000000..b8a98f2075fcb3a31b0d61089378a0c10f0e2a88 --- /dev/null +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources-Debug-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources.sh +${PODS_CONFIGURATION_BUILD_DIR}/composeApp/LibresComposeApp.bundle \ No newline at end of file diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources-Debug-output-files.xcfilelist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources-Debug-output-files.xcfilelist new file mode 100644 index 0000000000000000000000000000000000000000..2c7c92f0e2801b45a2b7fe29212c9427ad5871ea --- /dev/null +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources-Debug-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/LibresComposeApp.bundle \ No newline at end of file diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources-Release-input-files.xcfilelist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources-Release-input-files.xcfilelist new file mode 100644 index 0000000000000000000000000000000000000000..b8a98f2075fcb3a31b0d61089378a0c10f0e2a88 --- /dev/null +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources-Release-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources.sh +${PODS_CONFIGURATION_BUILD_DIR}/composeApp/LibresComposeApp.bundle \ No newline at end of file diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources-Release-output-files.xcfilelist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources-Release-output-files.xcfilelist new file mode 100644 index 0000000000000000000000000000000000000000..2c7c92f0e2801b45a2b7fe29212c9427ad5871ea --- /dev/null +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources-Release-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/LibresComposeApp.bundle \ No newline at end of file diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources.sh b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources.sh new file mode 100755 index 0000000000000000000000000000000000000000..bdab25d384cc75b916d92436775769761d703986 --- /dev/null +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-resources.sh @@ -0,0 +1,129 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +case "${TARGETED_DEVICE_FAMILY:-}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + 3) + TARGET_DEVICE_ARGS="--target-device tv" + ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" || true + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/composeApp/LibresComposeApp.bundle" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/composeApp/LibresComposeApp.bundle" +fi + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find -L "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" + fi +fi diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-umbrella.h b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-umbrella.h similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-umbrella.h rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-umbrella.h diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig similarity index 73% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig index a6dd17009c8b72697d8e44ae1925e01501c34c13..2fd34deb62181f26e8e1eee8759c80d53c53884e 100644 --- a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig @@ -1,9 +1,9 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn" "${PODS_ROOT}/../../shared/build/cocoapods/framework" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn" "${PODS_ROOT}/../../composeApp/build/cocoapods/framework" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth/AppAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth/GTMAppAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn/GoogleSignIn.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -framework "AppAuth" -framework "CoreGraphics" -framework "CoreText" -framework "Foundation" -framework "GTMAppAuth" -framework "GTMSessionFetcher" -framework "GoogleSignIn" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "UIKit" -framework "shared" -weak_framework "AuthenticationServices" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -framework "AppAuth" -framework "ComposeApp" -framework "CoreGraphics" -framework "CoreText" -framework "Foundation" -framework "GTMAppAuth" -framework "GTMSessionFetcher" -framework "GoogleSignIn" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "UIKit" -weak_framework "AuthenticationServices" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.modulemap b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.modulemap similarity index 100% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.modulemap rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.modulemap diff --git a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig similarity index 73% rename from mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig rename to iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig index a6dd17009c8b72697d8e44ae1925e01501c34c13..2fd34deb62181f26e8e1eee8759c80d53c53884e 100644 --- a/mobile/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig @@ -1,9 +1,9 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn" "${PODS_ROOT}/../../shared/build/cocoapods/framework" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn" "${PODS_ROOT}/../../composeApp/build/cocoapods/framework" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth/AppAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth/GTMAppAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn/GoogleSignIn.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -framework "AppAuth" -framework "CoreGraphics" -framework "CoreText" -framework "Foundation" -framework "GTMAppAuth" -framework "GTMSessionFetcher" -framework "GoogleSignIn" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "UIKit" -framework "shared" -weak_framework "AuthenticationServices" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -framework "AppAuth" -framework "ComposeApp" -framework "CoreGraphics" -framework "CoreText" -framework "Foundation" -framework "GTMAppAuth" -framework "GTMSessionFetcher" -framework "GoogleSignIn" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "UIKit" -weak_framework "AuthenticationServices" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/iosApp/Pods/Target Support Files/composeApp/ResourceBundle-LibresComposeApp-composeApp-Info.plist b/iosApp/Pods/Target Support Files/composeApp/ResourceBundle-LibresComposeApp-composeApp-Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..00863675aa290be7c04fa53571c974be5c2b008e --- /dev/null +++ b/iosApp/Pods/Target Support Files/composeApp/ResourceBundle-LibresComposeApp-composeApp-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + ${PODS_DEVELOPMENT_LANGUAGE} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/iosApp/Pods/Target Support Files/composeApp/composeApp.debug.xcconfig b/iosApp/Pods/Target Support Files/composeApp/composeApp.debug.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..d68aa2928790c1424287b2c5fd26bd58a8f72e55 --- /dev/null +++ b/iosApp/Pods/Target Support Files/composeApp/composeApp.debug.xcconfig @@ -0,0 +1,16 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/composeApp +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn" "${PODS_ROOT}/../../composeApp/build/cocoapods/framework" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +KOTLIN_PROJECT_PATH = :composeApp +OTHER_LDFLAGS = $(inherited) -l"c++" -weak_framework "AuthenticationServices" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../composeApp +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +PRODUCT_MODULE_NAME = ComposeApp +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iosApp/Pods/Target Support Files/composeApp/composeApp.release.xcconfig b/iosApp/Pods/Target Support Files/composeApp/composeApp.release.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..d68aa2928790c1424287b2c5fd26bd58a8f72e55 --- /dev/null +++ b/iosApp/Pods/Target Support Files/composeApp/composeApp.release.xcconfig @@ -0,0 +1,16 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/composeApp +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn" "${PODS_ROOT}/../../composeApp/build/cocoapods/framework" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +KOTLIN_PROJECT_PATH = :composeApp +OTHER_LDFLAGS = $(inherited) -l"c++" -weak_framework "AuthenticationServices" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../composeApp +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +PRODUCT_MODULE_NAME = ComposeApp +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/mobile/iosApp/iosApp.xcodeproj/project.pbxproj b/iosApp/iosApp.xcodeproj/project.pbxproj similarity index 55% rename from mobile/iosApp/iosApp.xcodeproj/project.pbxproj rename to iosApp/iosApp.xcodeproj/project.pbxproj index 593b91a92b8a163c3f8300aaf1850e8d5f31e593..1fe1c8a54657fb6ab8191fd3696dcc569c9cca93 100644 --- a/mobile/iosApp/iosApp.xcodeproj/project.pbxproj +++ b/iosApp/iosApp.xcodeproj/project.pbxproj @@ -3,95 +3,95 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 56; objects = { /* Begin PBXBuildFile section */ - 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557BA273AAA24004C7B11 /* Assets.xcassets */; }; - 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */; }; - 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2152FB032600AC8F00CF470E /* iOSApp.swift */; }; - 75C51A27290B28AC00D5CEF6 /* AvoidDispose.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C51A26290B28AC00D5CEF6 /* AvoidDispose.swift */; }; - 83C33F1B29C5A86F00D09D42 /* Config.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 83C33F1A29C5A86F00D09D42 /* Config.xcconfig */; }; - 8FE78B70A0AFE0C6BFD58492 /* Pods_iosApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7CBC4089977C6234731E2A40 /* Pods_iosApp.framework */; }; + 8353E90C2A2F991D008864CD /* ComposeControllerToSwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8353E90B2A2F991D008864CD /* ComposeControllerToSwiftUI.swift */; }; + 8353E90E2A2F998D008864CD /* LifecycleHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8353E90D2A2F998D008864CD /* LifecycleHolder.swift */; }; + 83EE76A62A0CAD2F00C22CA2 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A93A954129CC810D00F8E227 /* Preview Assets.xcassets */; }; + 936DC71E579D551C18B27BC1 /* Pods_iosApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F460AC6B7F13C738251A7649 /* Pods_iosApp.framework */; }; + A93A953B29CC810C00F8E227 /* iosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A93A953A29CC810C00F8E227 /* iosApp.swift */; }; + A93A953F29CC810D00F8E227 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A93A953E29CC810D00F8E227 /* Assets.xcassets */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 058557BA273AAA24004C7B11 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; - 2152FB032600AC8F00CF470E /* iOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSApp.swift; sourceTree = ""; }; - 22767059826D5C958E106117 /* Pods-iosApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iosApp.debug.xcconfig"; path = "Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig"; sourceTree = ""; }; - 7555FF7B242A565900829871 /* iosApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iosApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 7555FF8C242A565B00829871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 75C51A26290B28AC00D5CEF6 /* AvoidDispose.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvoidDispose.swift; sourceTree = ""; }; - 7CBC4089977C6234731E2A40 /* Pods_iosApp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iosApp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 83C33F1A29C5A86F00D09D42 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; - D5D86A4A59C4892F5E73A390 /* Pods-iosApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iosApp.release.xcconfig"; path = "Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig"; sourceTree = ""; }; + 1827569E0AB67A938D63CF60 /* Pods-iosApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iosApp.debug.xcconfig"; path = "Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig"; sourceTree = ""; }; + 8353E90B2A2F991D008864CD /* ComposeControllerToSwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeControllerToSwiftUI.swift; sourceTree = ""; }; + 8353E90D2A2F998D008864CD /* LifecycleHolder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LifecycleHolder.swift; sourceTree = ""; }; + 8391E6E32A06C560000AAEE7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = ../Info.plist; sourceTree = ""; }; + A93A953729CC810C00F8E227 /* Office Elevator.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Office Elevator.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + A93A953A29CC810C00F8E227 /* iosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iosApp.swift; sourceTree = ""; }; + A93A953E29CC810D00F8E227 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + A93A954129CC810D00F8E227 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + EC6A94A9C4EAEFB47CDC8DFC /* Pods-iosApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iosApp.release.xcconfig"; path = "Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig"; sourceTree = ""; }; + F460AC6B7F13C738251A7649 /* Pods_iosApp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iosApp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 634185C6AA8517AADC651003 /* Frameworks */ = { + A93A953429CC810C00F8E227 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8FE78B70A0AFE0C6BFD58492 /* Pods_iosApp.framework in Frameworks */, + 936DC71E579D551C18B27BC1 /* Pods_iosApp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 058557D7273AAEEB004C7B11 /* Preview Content */ = { + 979913F6AE5D271756D4649D /* Pods */ = { isa = PBXGroup; children = ( - 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */, + 1827569E0AB67A938D63CF60 /* Pods-iosApp.debug.xcconfig */, + EC6A94A9C4EAEFB47CDC8DFC /* Pods-iosApp.release.xcconfig */, ); - path = "Preview Content"; + path = Pods; sourceTree = ""; }; - 2FDA9C18166FCDB47E94FB40 /* Pods */ = { + A93A952E29CC810C00F8E227 = { isa = PBXGroup; children = ( - 22767059826D5C958E106117 /* Pods-iosApp.debug.xcconfig */, - D5D86A4A59C4892F5E73A390 /* Pods-iosApp.release.xcconfig */, + A93A953929CC810C00F8E227 /* iosApp */, + A93A953829CC810C00F8E227 /* Products */, + 979913F6AE5D271756D4649D /* Pods */, + C9E4D17461014272DBBCEEEB /* Frameworks */, ); - path = Pods; sourceTree = ""; }; - 7555FF72242A565900829871 = { + A93A953829CC810C00F8E227 /* Products */ = { isa = PBXGroup; children = ( - 83C33F1A29C5A86F00D09D42 /* Config.xcconfig */, - 7555FF7D242A565900829871 /* iosApp */, - 7555FF7C242A565900829871 /* Products */, - 2FDA9C18166FCDB47E94FB40 /* Pods */, - 7B269FB8D41926C7E3BB802C /* Frameworks */, + A93A953729CC810C00F8E227 /* Office Elevator.app */, ); + name = Products; sourceTree = ""; }; - 7555FF7C242A565900829871 /* Products */ = { + A93A953929CC810C00F8E227 /* iosApp */ = { isa = PBXGroup; children = ( - 7555FF7B242A565900829871 /* iosApp.app */, + 8391E6E32A06C560000AAEE7 /* Info.plist */, + A93A953A29CC810C00F8E227 /* iosApp.swift */, + A93A953E29CC810D00F8E227 /* Assets.xcassets */, + A93A954029CC810D00F8E227 /* Preview Content */, + 8353E90B2A2F991D008864CD /* ComposeControllerToSwiftUI.swift */, + 8353E90D2A2F998D008864CD /* LifecycleHolder.swift */, ); - name = Products; + path = iosApp; sourceTree = ""; }; - 7555FF7D242A565900829871 /* iosApp */ = { + A93A954029CC810D00F8E227 /* Preview Content */ = { isa = PBXGroup; children = ( - 75C51A26290B28AC00D5CEF6 /* AvoidDispose.swift */, - 2152FB032600AC8F00CF470E /* iOSApp.swift */, - 058557BA273AAA24004C7B11 /* Assets.xcassets */, - 7555FF8C242A565B00829871 /* Info.plist */, - 058557D7273AAEEB004C7B11 /* Preview Content */, + A93A954129CC810D00F8E227 /* Preview Assets.xcassets */, ); - path = iosApp; + path = "Preview Content"; sourceTree = ""; }; - 7B269FB8D41926C7E3BB802C /* Frameworks */ = { + C9E4D17461014272DBBCEEEB /* Frameworks */ = { isa = PBXGroup; children = ( - 7CBC4089977C6234731E2A40 /* Pods_iosApp.framework */, + F460AC6B7F13C738251A7649 /* Pods_iosApp.framework */, ); name = Frameworks; sourceTree = ""; @@ -99,15 +99,16 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 7555FF7A242A565900829871 /* iosApp */ = { + A93A953629CC810C00F8E227 /* iosApp */ = { isa = PBXNativeTarget; - buildConfigurationList = 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "iosApp" */; + buildConfigurationList = A93A954529CC810D00F8E227 /* Build configuration list for PBXNativeTarget "iosApp" */; buildPhases = ( - D61D4AE5D9F64D789F34D2BE /* [CP] Check Pods Manifest.lock */, - 7555FF77242A565900829871 /* Sources */, - 7555FF79242A565900829871 /* Resources */, - 634185C6AA8517AADC651003 /* Frameworks */, - 41F73A04FABD0C2818CAA2ED /* [CP] Embed Pods Frameworks */, + D6083C08AE4609EF0C53CE7D /* [CP] Check Pods Manifest.lock */, + A93A953329CC810C00F8E227 /* Sources */, + A93A953429CC810C00F8E227 /* Frameworks */, + A93A953529CC810C00F8E227 /* Resources */, + 507007E4C951FE5AC1F98EBB /* [CP] Embed Pods Frameworks */, + CCC9E7DD8F826D9232D0B535 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -115,57 +116,55 @@ ); name = iosApp; productName = iosApp; - productReference = 7555FF7B242A565900829871 /* iosApp.app */; + productReference = A93A953729CC810C00F8E227 /* Office Elevator.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 7555FF73242A565900829871 /* Project object */ = { + A93A952F29CC810C00F8E227 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1130; - LastUpgradeCheck = 1130; - ORGANIZATIONNAME = orgName; + LastSwiftUpdateCheck = 1420; + LastUpgradeCheck = 1420; TargetAttributes = { - 7555FF7A242A565900829871 = { - CreatedOnToolsVersion = 11.3.1; + A93A953629CC810C00F8E227 = { + CreatedOnToolsVersion = 14.2; }; }; }; - buildConfigurationList = 7555FF76242A565900829871 /* Build configuration list for PBXProject "iosApp" */; - compatibilityVersion = "Xcode 9.3"; + buildConfigurationList = A93A953229CC810C00F8E227 /* Build configuration list for PBXProject "iosApp" */; + compatibilityVersion = "Xcode 14.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 7555FF72242A565900829871; - productRefGroup = 7555FF7C242A565900829871 /* Products */; + mainGroup = A93A952E29CC810C00F8E227; + productRefGroup = A93A953829CC810C00F8E227 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 7555FF7A242A565900829871 /* iosApp */, + A93A953629CC810C00F8E227 /* iosApp */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 7555FF79242A565900829871 /* Resources */ = { + A93A953529CC810C00F8E227 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */, - 83C33F1B29C5A86F00D09D42 /* Config.xcconfig in Resources */, - 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */, + 83EE76A62A0CAD2F00C22CA2 /* Preview Assets.xcassets in Resources */, + A93A953F29CC810D00F8E227 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 41F73A04FABD0C2818CAA2ED /* [CP] Embed Pods Frameworks */ = { + 507007E4C951FE5AC1F98EBB /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -182,7 +181,24 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D61D4AE5D9F64D789F34D2BE /* [CP] Check Pods Manifest.lock */ = { + CCC9E7DD8F826D9232D0B535 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + D6083C08AE4609EF0C53CE7D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -207,28 +223,26 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 7555FF77242A565900829871 /* Sources */ = { + A93A953329CC810C00F8E227 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */, - 75C51A27290B28AC00D5CEF6 /* AvoidDispose.swift in Sources */, + 8353E90E2A2F998D008864CD /* LifecycleHolder.swift in Sources */, + 8353E90C2A2F991D008864CD /* ComposeControllerToSwiftUI.swift in Sources */, + A93A953B29CC810C00F8E227 /* iosApp.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 7555FFA3242A565B00829871 /* Debug */ = { + A93A954329CC810D00F8E227 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 83C33F1A29C5A86F00D09D42 /* Config.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - "ARCHS[sdk=iphonesimulator*]" = x86_64; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; @@ -255,8 +269,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_BITCODE = NO; + DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -273,7 +286,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -283,15 +296,13 @@ }; name = Debug; }; - 7555FFA4242A565B00829871 /* Release */ = { + A93A954429CC810D00F8E227 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 83C33F1A29C5A86F00D09D42 /* Config.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; @@ -319,7 +330,6 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_BITCODE = NO; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -330,7 +340,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; @@ -340,47 +350,67 @@ }; name = Release; }; - 7555FFA6242A565B00829871 /* Debug */ = { + A93A954629CC810D00F8E227 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 22767059826D5C958E106117 /* Pods-iosApp.debug.xcconfig */; + baseConfigurationReference = 1827569E0AB67A938D63CF60 /* Pods-iosApp.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\""; - DEVELOPMENT_TEAM = JVX7U43WRX; - ENABLE_BITCODE = NO; + DEVELOPMENT_TEAM = 3HXPZFA9AN; ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = iosApp/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = band.effective.office.elevator.ios; - PRODUCT_NAME = "$(TARGET_NAME)"; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = band.effective.office.elevator.iosApp; + PRODUCT_NAME = "Office Elevator"; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 7555FFA7242A565B00829871 /* Release */ = { + A93A954729CC810D00F8E227 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D5D86A4A59C4892F5E73A390 /* Pods-iosApp.release.xcconfig */; + baseConfigurationReference = EC6A94A9C4EAEFB47CDC8DFC /* Pods-iosApp.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\""; - DEVELOPMENT_TEAM = JVX7U43WRX; - ENABLE_BITCODE = NO; + DEVELOPMENT_TEAM = 3HXPZFA9AN; ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = iosApp/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = band.effective.office.elevator.ios; - PRODUCT_NAME = "$(TARGET_NAME)"; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = band.effective.office.elevator.iosApp; + PRODUCT_NAME = "Office Elevator"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -389,25 +419,25 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 7555FF76242A565900829871 /* Build configuration list for PBXProject "iosApp" */ = { + A93A953229CC810C00F8E227 /* Build configuration list for PBXProject "iosApp" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7555FFA3242A565B00829871 /* Debug */, - 7555FFA4242A565B00829871 /* Release */, + A93A954329CC810D00F8E227 /* Debug */, + A93A954429CC810D00F8E227 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "iosApp" */ = { + A93A954529CC810D00F8E227 /* Build configuration list for PBXNativeTarget "iosApp" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7555FFA6242A565B00829871 /* Debug */, - 7555FFA7242A565B00829871 /* Release */, + A93A954629CC810D00F8E227 /* Debug */, + A93A954729CC810D00F8E227 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 7555FF73242A565900829871 /* Project object */; + rootObject = A93A952F29CC810C00F8E227 /* Project object */; } diff --git a/iosApp/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iosApp/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000000000000000000000000000000000..919434a6254f0e9651f402737811be6634a03e9c --- /dev/null +++ b/iosApp/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/mobile/iosApp/iosApp.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/xcschememanagement.plist b/iosApp/iosApp.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 92% rename from mobile/iosApp/iosApp.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/xcschememanagement.plist rename to iosApp/iosApp.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/xcschememanagement.plist index a8258f08bf887bb54852fc795375d22cb587fa00..24a9e6487974ff5d114f38ae809cf2d87676fee3 100644 --- a/mobile/iosApp/iosApp.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/iosApp/iosApp.xcodeproj/xcuserdata/stanislav.radchenko.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ iosApp.xcscheme_^#shared#^_ orderHint - 7 + 8 diff --git a/mobile/iosApp/iosApp.xcworkspace/contents.xcworkspacedata b/iosApp/iosApp.xcworkspace/contents.xcworkspacedata similarity index 100% rename from mobile/iosApp/iosApp.xcworkspace/contents.xcworkspacedata rename to iosApp/iosApp.xcworkspace/contents.xcworkspacedata diff --git a/mobile/iosApp/iosApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iosApp/iosApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from mobile/iosApp/iosApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to iosApp/iosApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/iosApp/iosApp.xcworkspace/xcuserdata/stanislav.radchenko.xcuserdatad/UserInterfaceState.xcuserstate b/iosApp/iosApp.xcworkspace/xcuserdata/stanislav.radchenko.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..9609811cad97c4fe6cf3e45027c5a80eb0c60133 Binary files /dev/null and b/iosApp/iosApp.xcworkspace/xcuserdata/stanislav.radchenko.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/mobile/iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json b/iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 98% rename from mobile/iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json rename to iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json index ee7e3ca03f87013a3835b316ffc76d35eb06c902..eb8789700816459c1e1480e0b34781d9fb78a1ca 100644 --- a/mobile/iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json +++ b/iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json @@ -8,4 +8,4 @@ "author" : "xcode", "version" : 1 } -} \ No newline at end of file +} diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/AppleWatch-Icon-29@2x.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/AppleWatch-Icon-29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ebe99091bc301df7cb44fa3ed46b31fe4bd7b017 Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/AppleWatch-Icon-29@2x.png differ diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/AppleWatch-Icon-29@3x.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/AppleWatch-Icon-29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e5a606ed2a9a9011810cf11f64a322da25c6c7 Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/AppleWatch-Icon-29@3x.png differ diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/AppleWatch-Icon-40@2x.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/AppleWatch-Icon-40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7999159097e46bcd6a800eb7eebbf02f0489ba7c Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/AppleWatch-Icon-40@2x.png differ diff --git a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 62% rename from mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json rename to iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json index 26d82cc49224a98d8d373d58b04cd0e021018cd2..8930251107c611edd124f1c24dac44cd13e17d3b 100644 --- a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,11 @@ { "images" : [ + { + "filename" : "iTunesArtwork-1024 1.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, { "filename" : "Icon-20@2x.png", "idiom" : "iphone", @@ -13,19 +19,25 @@ "size" : "20x20" }, { - "filename" : "Icon-29@2x.png", + "filename" : "Icon-29.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "29x29" + }, + { + "filename" : "AppleWatch-Icon-29@2x.png", "idiom" : "iphone", "scale" : "2x", "size" : "29x29" }, { - "filename" : "Icon-29@3x.png", + "filename" : "AppleWatch-Icon-29@3x.png", "idiom" : "iphone", "scale" : "3x", "size" : "29x29" }, { - "filename" : "Icon-40@2x.png", + "filename" : "AppleWatch-Icon-40@2x.png", "idiom" : "iphone", "scale" : "2x", "size" : "40x40" @@ -37,63 +49,31 @@ "size" : "40x40" }, { - "filename" : "Icon-60@2x.png", + "filename" : "Icon-57.png", "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "filename" : "Icon-60@3x.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "idiom" : "ipad", "scale" : "1x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" + "size" : "57x57" }, { - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "idiom" : "ipad", + "filename" : "Icon-57@2x.png", + "idiom" : "iphone", "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" + "size" : "57x57" }, { - "idiom" : "ipad", + "filename" : "Icon-60@2x.png", + "idiom" : "iphone", "scale" : "2x", - "size" : "76x76" + "size" : "60x60" }, { - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" + "filename" : "Icon-60@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" }, { + "filename" : "iTunesArtwork-1024.png", "idiom" : "ios-marketing", "scale" : "1x", "size" : "1024x1024" diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a318ebdc99178427af290596f9f7745af5899ddc Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png differ diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75de8849bf83f5189fa95d3b000b4c54b5fd9376 Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png differ diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-29.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-29.png new file mode 100644 index 0000000000000000000000000000000000000000..898da7ed7f2addcc5c09e6f6c2ebb3924347f764 Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-29.png differ diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..15893dc96c00c03f19d4595ae581326748db424f Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png differ diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-57.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-57.png new file mode 100644 index 0000000000000000000000000000000000000000..ad736c0a3cf0a54f62982adaf0571908bbe32ff6 Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-57.png differ diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-57@2x.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-57@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..023bfd8a859c730726fa006019a18e830f22dfe7 Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-57@2x.png differ diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..15893dc96c00c03f19d4595ae581326748db424f Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png differ diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..93b43e15f0dd57ab0c57ae535b8ac6863063543c Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png differ diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/iTunesArtwork-1024 1.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/iTunesArtwork-1024 1.png new file mode 100644 index 0000000000000000000000000000000000000000..02e8ec1aa2fccb97081e9455cd6440bb8d1a6d88 Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/iTunesArtwork-1024 1.png differ diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/iTunesArtwork-1024.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/iTunesArtwork-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..02e8ec1aa2fccb97081e9455cd6440bb8d1a6d88 Binary files /dev/null and b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/iTunesArtwork-1024.png differ diff --git a/mobile/iosApp/iosApp/Assets.xcassets/Contents.json b/iosApp/iosApp/Assets.xcassets/Contents.json similarity index 100% rename from mobile/iosApp/iosApp/Assets.xcassets/Contents.json rename to iosApp/iosApp/Assets.xcassets/Contents.json diff --git a/iosApp/iosApp/ComposeControllerToSwiftUI.swift b/iosApp/iosApp/ComposeControllerToSwiftUI.swift new file mode 100644 index 0000000000000000000000000000000000000000..39602b5e6bc6eb8f6d491a87be62184d2c690a39 --- /dev/null +++ b/iosApp/iosApp/ComposeControllerToSwiftUI.swift @@ -0,0 +1,35 @@ +// +// ComposeControllerToSwiftUI.swift +// iosApp +// +// Created by Stanislav Radchenko on 06.06.2023. +// + +import SwiftUI +import ComposeApp + +struct ComposeViewControllerToSwiftUI: UIViewControllerRepresentable { + private let lifecycle: LifecycleRegistry + private let topSafeArea: Float + private let bottomSafeArea: Float + + init(lifecycle: LifecycleRegistry, topSafeArea: Float, bottomSafeArea: Float) { + self.lifecycle = lifecycle + self.topSafeArea = topSafeArea + self.bottomSafeArea = bottomSafeArea + } + + func makeUIViewController(context: Context) -> UIViewController { + + let controller = MainKt.MainViewController( + lifecycle: lifecycle, + topSafeArea: topSafeArea, + bottomSafeArea: bottomSafeArea + ) + UIViewControllerProviderKt.uiViewController = controller + return controller + } + + func updateUIViewController(_ uiViewController: UIViewController, context: Context) { + } +} diff --git a/mobile/iosApp/iosApp/Info.plist b/iosApp/iosApp/Info.plist similarity index 86% rename from mobile/iosApp/iosApp/Info.plist rename to iosApp/iosApp/Info.plist index cb940f348c209b4c4e14ec03ca27adef3973a68f..df23f5e37696a60602ff865f9756a906729e6772 100644 --- a/mobile/iosApp/iosApp/Info.plist +++ b/iosApp/iosApp/Info.plist @@ -43,13 +43,13 @@ UIInterfaceOrientationPortraitUpsideDown CFBundleURLTypes - - - CFBundleURLSchemes - - $(GOOGLE_SIGN_IN_SCHEME) - - - + + + CFBundleURLSchemes + + com.googleusercontent.apps.726357293621-hegk0410bsb1a5hvl3ihpc4d2bfkmlgb + + + diff --git a/iosApp/iosApp/LifecycleHolder.swift b/iosApp/iosApp/LifecycleHolder.swift new file mode 100644 index 0000000000000000000000000000000000000000..464102d09aa8f767b095833f608c212129c84c68 --- /dev/null +++ b/iosApp/iosApp/LifecycleHolder.swift @@ -0,0 +1,23 @@ +// +// LifecycleHolder.swift +// iosApp +// +// Created by Stanislav Radchenko on 06.06.2023. +// + +import Foundation +import ComposeApp + +class LifecycleHolder : ObservableObject { + let lifecycle: LifecycleRegistry + + init() { + lifecycle = LifecycleRegistryKt.LifecycleRegistry() + + lifecycle.onCreate() + } + + deinit { + lifecycle.onDestroy() + } +} diff --git a/mobile/iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json b/iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json similarity index 96% rename from mobile/iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json rename to iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json index 4aa7c5350bfce4a2c61e00815cbdbcbfab59ed24..73c00596a7fca3f3d4bdd64053b69d86745f9e10 100644 --- a/mobile/iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json +++ b/iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json @@ -3,4 +3,4 @@ "author" : "xcode", "version" : 1 } -} \ No newline at end of file +} diff --git a/iosApp/iosApp/iosApp.swift b/iosApp/iosApp/iosApp.swift new file mode 100644 index 0000000000000000000000000000000000000000..751535a39a4bec3b5f12d0e9f5a0a02ccee3ec70 --- /dev/null +++ b/iosApp/iosApp/iosApp.swift @@ -0,0 +1,30 @@ +import UIKit +import SwiftUI +import ComposeApp +import GoogleSignIn + +@main +struct iosApp: App { + + @Environment(\.scenePhase) private var scenePhase + private var lifecycleHolder: LifecycleHolder { LifecycleHolder() } + + var body: some Scene { + WindowGroup { + GeometryReader { geo in + ComposeViewControllerToSwiftUI( + lifecycle: lifecycleHolder.lifecycle, + topSafeArea: Float(geo.safeAreaInsets.top), + bottomSafeArea: Float(geo.safeAreaInsets.bottom) + ) + .ignoresSafeArea() + .onTapGesture { + // Hide keyboard on tap outside of TextField + UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) + } + }.onOpenURL { url in + GIDSignIn.sharedInstance.handle(url) + } + } + } +} diff --git a/mobile/keystore/debug.keystore b/keystore/debug.keystore similarity index 100% rename from mobile/keystore/debug.keystore rename to keystore/debug.keystore diff --git a/mobile/keystore/main.keystore b/keystore/main.keystore similarity index 100% rename from mobile/keystore/main.keystore rename to keystore/main.keystore diff --git a/local.properties b/local.properties deleted file mode 100644 index 080603aec412e4aae7351b6c3fa4a01141b877be..0000000000000000000000000000000000000000 --- a/local.properties +++ /dev/null @@ -1,8 +0,0 @@ -## This file must *NOT* be checked into Version Control Systems, -# as it contains information specific to your local configuration. -# -# Location of the SDK. This is only used by Gradle. -# For customization when using a Version Control System, please read the -# header note. -#Thu May 25 02:06:44 OMST 2023 -sdk.dir=/home/max/Android/Sdk diff --git a/mobile-app/README.md b/mobile-app/README.md deleted file mode 100644 index b72463ea92f15398ed35499209534c57ed2370bc..0000000000000000000000000000000000000000 --- a/mobile-app/README.md +++ /dev/null @@ -1,138 +0,0 @@ -### Office Elevator - -Note: Project is in active development as part of internship at Student Labs & Effective. - -I’m developing it individually for the company at which I am currently doing an internship. The -company’s office is located on the 5th floor of a business center. To access the floor the company’s -staff need to use a special key in the elevator cabin. The thing is people tend to forget the key. -So, I thought it would be great to develop a mobile app enabling the elevator to go up. No key – no -problem. - -Wanted UX: An employee wishing to access the office needs to just tap a button inside the app. App -uses Google Sign in and secure communication on the backend side to keep the office safe from -unauthorized access. That’s it. - -I deeply love Kotlin and KMM. So my challenge is to make the entire project on Kotlin, including -Android+iOS apps with Compose Multiplatform, ktor(jvm) on server side, ktor(both, jvm and native) -and ktgpio(native) on RPI. - -For debug/dev purpose, I’m using RPI with led indicator to test and develop the system without -connection to real elevator controller. - - - -If you’re not familiar with KMM, please understand that Compose Multiplatform and Kotlin Native is -in active development, so you can have some random issues trying to build the project. In case of -any issues, feel free to contact me via telegram: @StanislavRadchenko. - -### Architecture diagram - - - -Basic idea of communication: - -- Client authorizes within the app with the Google Sign In -- Client touches elevator google with the app - - App makes request to server (running in Digital Ocean) - - Requests includes id token, current time, and signature hash (that depends on current time and - private secret shared between server and RPI) - - Server checks that token is correct and call RPI web hook - - RPI checks that signature hash is correct and current time is within 1 minute from now - - In case of check success, RPI makes signal to GPIO which is connected with the elevator system - and returns success to server. In case of check failure, RPI returns error response to server. - - Server proxies RPI response back to the client app. -- Note: both, server and RPI and publically available on the Internet. - -### How to build project - -Project is organized as mono repo. I’m using OS X Monterey and Macbook Pro (with M1 Pro processor) -for development. Also, build is tested on Macbook Pro with Intel x64 processor. - -In order to build all parts of project, you will need JDK, Android SDK, and XCode. I’m using OpenJDK -11, Android SDK install together with Android Studio Dolphin 2021.3, XCode 14.2. If you have -something slightly different, the latest stable versions should work. - -Also, project relies on RPI Model B+ (which works as endpoint to physically interconnect with -elevator controller). You won’t be able to run project end-to-end locally you don’t have RPI. But -you should be able to run all other parts of the projects. - -You can run only mobile part. After build you will get app that’s connected with cloud-server -deployed to Digital Ocean. So you don’t need to deploy it by youself, if you’re just exploring the -mobile part. - -The below is a guide to build all parts of the app one by one. - -**Build Android app** - -```bash -$ cd mobile-app -$ ./gradlew :android:assembleDebug -``` - -The build process can take about 5 minutes. The output APK will be placed -to `mobile-app/android/build/outputs/apk/debug` folder. You can install and run it on the device -using adb. - -I’m using Nothing Phone for development. Minimal supported API is 21 (Android 5.0 Lollipop). Though -I didn’t test it enough on versions below API 30. So please use API 30 as well. - -Also, you can use Android Studio or Intellij IDEA to build the project using its wizards. I’m using -Intellij IDEA CE to development. - -**Build iOS app** - -```bash -$ cd mobile-app/iosApp -$ pod install -$ open iosApp.xcworkspace -``` - -Next you will need to build the app using XCode wizard. I’m not iOS developer, so iOS signing -process is the most hard for me. The build process is working find on my machine. But I’m not sure -how it will work for others, and it wasn’t tested enough atm. If you have any issues with iOS build, -please report it to github issues. - -**Build Server** - -Server is based on ktor. Netty is used as a server engine. - -```bash -$ cd mobile-app/cloud-server -$ ./gradlew build -``` - -The server jar will be places to `cloud-server/build/libs/cloud-server-all.jar` - -**Build RPI part** - -RPI part is currently implemented with Ktor (JVM). Right now, I’m exploring the options to move it -to pure Kotlin Native, including both server/ktor part and gpio control. It’s not stable and located -inside `develop` branch. More stable option is usage of ktor (jvm) and control of gpio with Python. -That’s what you can find in `rpi_ktor_server_jvm` branch. - -In order to build rpi part use - -```bash -$ cd rpi-server -$ ./gradlew build -``` - -### Major Dependencies - -mobile-app - -- ktor-client -- compose multiplatform -- google sign-in - -cloud-server - -- ktor -- krypto -- google-api-client -- shadow jar - -rpi-server - -- ktor -- kotlin/native \ No newline at end of file diff --git a/mobile/android/.gitignore b/mobile/android/.gitignore deleted file mode 100644 index aaec5b8a3d8a751dd09d553afaad8138ad3ccdf7..0000000000000000000000000000000000000000 --- a/mobile/android/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/build -.gradle/ \ No newline at end of file diff --git a/mobile/android/build.gradle.kts b/mobile/android/build.gradle.kts deleted file mode 100644 index 47e246157dd2cdbdd1f66ecd01eb5868ed53f040..0000000000000000000000000000000000000000 --- a/mobile/android/build.gradle.kts +++ /dev/null @@ -1,75 +0,0 @@ -plugins { - id("com.android.application") - kotlin("android") - id("kotlin-parcelize") -} - -android { - compileSdk = ConfigData.Android.compileSdkVersion - - defaultConfig { - minSdk = ConfigData.Android.minSdkVersion - targetSdk = ConfigData.Android.targetSdkVersion - versionCode = 1 - versionName = "1.0.0" - } - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } - - composeOptions { - kotlinCompilerExtensionVersion = ConfigData.Android.kotlinCompilerExtensionVersion - } - buildFeatures { - compose = true - } - - signingConfigs { - getByName("debug") { - keyPassword = "android" - storeFile = file("${rootDir}/mobile/keystore/debug.keystore") - storePassword = "android" - } - create("release") { - keyAlias = System.getenv()["OFFICE_ELEVATOR_RELEASE_ALIAS"] - keyPassword = System.getenv()["OFFICE_ELEVATOR_RELEASE_KEY_PASSWORD"] - storeFile = file("${rootDir}/mobile/keystore/main.keystore") - storePassword = System.getenv()["OFFICE_ELEVATOR_RELEASE_STORE_PASSWORD"] - } - } - - buildTypes { - getByName("release") { - signingConfig = signingConfigs.getByName("release") - isDebuggable = false - isMinifyEnabled = true - } - getByName("debug") { - signingConfig = signingConfigs.getByName("debug") - isDebuggable = true - } - - } - lintOptions { - isCheckReleaseBuilds = false - } - - packagingOptions { - exclude("META-INF/*") - } -} - -dependencies { - implementation(project(":mobile:shared")) - - implementation(Dependencies.AndroidX.AppCompat.appCompat) - implementation(Dependencies.Android.material) - implementation(Dependencies.AndroidX.Activity.activityCompose) - - implementation(Dependencies.JetBrains.Compose.runtime) - implementation(Dependencies.JetBrains.Compose.ui) - implementation(Dependencies.JetBrains.Compose.foundationLayout) - implementation(Dependencies.JetBrains.Compose.material) -} \ No newline at end of file diff --git a/mobile/android/src/main/ic_launcher-playstore.png b/mobile/android/src/main/ic_launcher-playstore.png deleted file mode 100644 index fcb2debdf05b1f6bfe94f2de46683099a444cbd7..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/ic_launcher-playstore.png and /dev/null differ diff --git a/mobile/android/src/main/java/band/effective/office/elevator/android/MainActivity.kt b/mobile/android/src/main/java/band/effective/office/elevator/android/MainActivity.kt deleted file mode 100644 index 572d12ae46e6138b6618735d89bb44296da55133..0000000000000000000000000000000000000000 --- a/mobile/android/src/main/java/band/effective/office/elevator/android/MainActivity.kt +++ /dev/null @@ -1,21 +0,0 @@ -package band.effective.office.elevator.android - -import android.content.Intent -import android.os.Bundle -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import band.effective.office.elevator.common.compose.RootView -import band.effective.office.elevator.common.compose.screens.login.GoogleAuthorization - -class MainActivity : ComponentActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContent { RootView() } - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - GoogleAuthorization.activityResult(requestCode, resultCode, data) - } -} diff --git a/mobile/android/src/main/java/band/effective/office/elevator/android/OfficeElevatorApp.kt b/mobile/android/src/main/java/band/effective/office/elevator/android/OfficeElevatorApp.kt deleted file mode 100644 index 35dc21792d06db2543e3425fff38145a13c6e6d5..0000000000000000000000000000000000000000 --- a/mobile/android/src/main/java/band/effective/office/elevator/android/OfficeElevatorApp.kt +++ /dev/null @@ -1,14 +0,0 @@ -package band.effective.office.elevator.android - -import android.app.Application -import band.effective.office.elevator.common.compose.Android -import band.effective.office.elevator.common.compose.helpers.LastOpenActivityProvider - -class OfficeElevatorApp : Application() { - - override fun onCreate() { - super.onCreate() - Android.applicationContext = this - LastOpenActivityProvider.start(this) - } -} \ No newline at end of file diff --git a/mobile/android/src/main/res/drawable/about.xml b/mobile/android/src/main/res/drawable/about.xml deleted file mode 100644 index f38ec77566849d50f70e4ce6fd3e3468dfaf8f05..0000000000000000000000000000000000000000 --- a/mobile/android/src/main/res/drawable/about.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/mobile/android/src/main/res/drawable/avatar_border.xml b/mobile/android/src/main/res/drawable/avatar_border.xml deleted file mode 100644 index c67e1096f36fb865175b83d50203daabdc6892e4..0000000000000000000000000000000000000000 --- a/mobile/android/src/main/res/drawable/avatar_border.xml +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mobile/android/src/main/res/drawable/home.xml b/mobile/android/src/main/res/drawable/home.xml deleted file mode 100644 index e4bd7b03d6053363b7e5d99b1087597d1b7c028d..0000000000000000000000000000000000000000 --- a/mobile/android/src/main/res/drawable/home.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/mobile/android/src/main/res/drawable/ic_launcher_background.xml b/mobile/android/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index ca3826a46ce070f906d0d3fbe6987df882134381..0000000000000000000000000000000000000000 --- a/mobile/android/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mobile/android/src/main/res/drawable/profile.xml b/mobile/android/src/main/res/drawable/profile.xml deleted file mode 100644 index 88c1ed2ff0cffd5a59942fd1868c045793e8ed7b..0000000000000000000000000000000000000000 --- a/mobile/android/src/main/res/drawable/profile.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/mobile/android/src/main/res/drawable/statistic.xml b/mobile/android/src/main/res/drawable/statistic.xml deleted file mode 100644 index c704b9f0bcfb985830c6fad440418c83f4d51b54..0000000000000000000000000000000000000000 --- a/mobile/android/src/main/res/drawable/statistic.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - diff --git a/mobile/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/mobile/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index c4a603d4cce78b2fbd8094bd0224d4778bc8c976..0000000000000000000000000000000000000000 --- a/mobile/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/mobile/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/mobile/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index c4a603d4cce78b2fbd8094bd0224d4778bc8c976..0000000000000000000000000000000000000000 --- a/mobile/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/mobile/android/src/main/res/mipmap-hdpi/ic_launcher.png b/mobile/android/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index d8353e7308b08a605cfd5cbf0b34472fe858d845..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/mobile/android/src/main/res/mipmap-hdpi/ic_launcher_foreground.png deleted file mode 100644 index c5ff63fca2a5fdb07830514dabedbb36224174a5..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-hdpi/ic_launcher_round.png b/mobile/android/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 17c896ea978e3b2c673cc4d986382060817b34a1..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-mdpi/ic_launcher.png b/mobile/android/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 21454cdc1c5093f9102d0e4fdfb12a94e7e29772..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/mobile/android/src/main/res/mipmap-mdpi/ic_launcher_foreground.png deleted file mode 100644 index 82fc3d9f9a72e8b771c8f828d81cac18381e341b..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-mdpi/ic_launcher_round.png b/mobile/android/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 69a67a93d46e2f5b6eaa6952f3c77bf5a9abcd39..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-xhdpi/ic_launcher.png b/mobile/android/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index ef2d1cd8051705d0c5180cf3a269101ca23d15b3..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/mobile/android/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png deleted file mode 100644 index d6122c5af5bde742794459269172c590172f19fc..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/mobile/android/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index d89f3a6811b4f8f4f336d4e11c57a593a9e85d36..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-xxhdpi/ic_launcher.png b/mobile/android/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 171e15f2955bab50127d84dd474c6c6b2efbea69..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/mobile/android/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 3f4376df5688dc70da17c0a34e56a83e6e84ce10..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/mobile/android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index adb141dccbb60ac3e1bf2e992f01f281a2d5141e..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mobile/android/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index ab285f263c89cbd2bc70bf904995e674c1257fff..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/mobile/android/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 5d8416edc6ace05a882a5a4d915e73140243de13..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/mobile/android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/mobile/android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 61aa721c4f2fc322789398c431b02b135ce95551..0000000000000000000000000000000000000000 Binary files a/mobile/android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/mobile/android/src/main/res/values/strings.xml b/mobile/android/src/main/res/values/strings.xml deleted file mode 100644 index 972693bead364e7a110ab6d7c3f3ce06f064a9cf..0000000000000000000000000000000000000000 --- a/mobile/android/src/main/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - Office Elevator - \ No newline at end of file diff --git a/mobile/android/src/main/res/values/themes.xml b/mobile/android/src/main/res/values/themes.xml deleted file mode 100644 index 149ee47ee9ad33c2c07f3c51a6385ae7d2954fc3..0000000000000000000000000000000000000000 --- a/mobile/android/src/main/res/values/themes.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/mobile/gradle/wrapper/gradle-wrapper.jar b/mobile/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index ccebba7710deaf9f98673a68957ea02138b60d0a..0000000000000000000000000000000000000000 Binary files a/mobile/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/mobile/gradle/wrapper/gradle-wrapper.properties b/mobile/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index e1bef7e873c1f79108a6676ad60e4566ca1d1950..0000000000000000000000000000000000000000 --- a/mobile/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/mobile/iosApp/.gitignore b/mobile/iosApp/.gitignore deleted file mode 100644 index ca75161fb45e619039e4381780eef630769f2703..0000000000000000000000000000000000000000 --- a/mobile/iosApp/.gitignore +++ /dev/null @@ -1,92 +0,0 @@ -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## User settings -xcuserdata/ - -## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) -*.xcscmblueprint -*.xccheckout - -## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) -build/ -DerivedData/ -*.moved-aside -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 - -## Obj-C/Swift specific -*.hmap - -## App packaging -*.ipa -*.dSYM.zip -*.dSYM - -## Playgrounds -timeline.xctimeline -playground.xcworkspace - -# Swift Package Manager -# -# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -# Packages/ -# Package.pins -# Package.resolved -# *.xcodeproj -# -# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata -# hence it is not needed unless you have added a package configuration file to your project -# .swiftpm - -.build/ - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# -# Pods/ -# -# Add this line if you want to avoid checking in source code from the Xcode workspace -# *.xcworkspace - -# Carthage -# -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build/ - -# Accio dependency management -Dependencies/ -.accio/ - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. -# Instead, use fastlane to re-generate the screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/#source-control - -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots/**/*.png -fastlane/test_output - -# Code Injection -# -# After new code Injection tools there's a generated folder /iOSInjectionProject -# https://github.com/johnno1962/injectionforxcode - -iOSInjectionProject/ -*.xcconfig -*.env \ No newline at end of file diff --git a/mobile/iosApp/Podfile b/mobile/iosApp/Podfile deleted file mode 100644 index 90847c4a558a31092f2ebde5dd77d2b17f8f26c9..0000000000000000000000000000000000000000 --- a/mobile/iosApp/Podfile +++ /dev/null @@ -1,18 +0,0 @@ -source 'https://cdn.cocoapods.org' -platform :ios, '11.0' - -target 'iosApp' do - use_frameworks! - pod 'shared', :path => '../shared' - pod 'GoogleSignIn' -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.4' - # Force CocoaPods targets to always build for x86_64 - config.build_settings['ARCHS[sdk=iphonesimulator*]'] = 'x86_64' - end - end -end diff --git a/mobile/iosApp/Podfile.lock b/mobile/iosApp/Podfile.lock deleted file mode 100644 index e5c7a033a5c95f7d698a8a802b475bfa21646c76..0000000000000000000000000000000000000000 --- a/mobile/iosApp/Podfile.lock +++ /dev/null @@ -1,42 +0,0 @@ -PODS: - - AppAuth (1.6.0): - - AppAuth/Core (= 1.6.0) - - AppAuth/ExternalUserAgent (= 1.6.0) - - AppAuth/Core (1.6.0) - - AppAuth/ExternalUserAgent (1.6.0): - - AppAuth/Core - - GoogleSignIn (7.0.0): - - AppAuth (~> 1.5) - - GTMAppAuth (< 3.0, >= 1.3) - - GTMSessionFetcher/Core (< 4.0, >= 1.1) - - GTMAppAuth (2.0.0): - - AppAuth/Core (~> 1.6) - - GTMSessionFetcher/Core (< 4.0, >= 1.5) - - GTMSessionFetcher/Core (3.1.0) - - shared (0.0.1) - -DEPENDENCIES: - - GoogleSignIn - - shared (from `../shared`) - -SPEC REPOS: - trunk: - - AppAuth - - GoogleSignIn - - GTMAppAuth - - GTMSessionFetcher - -EXTERNAL SOURCES: - shared: - :path: "../shared" - -SPEC CHECKSUMS: - AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add - GoogleSignIn: b232380cf495a429b8095d3178a8d5855b42e842 - GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae - GTMSessionFetcher: c9e714f7eec91a55641e2bab9f45fd83a219b882 - shared: 1fd4de2fb634f26f060830f5dcac451617f9109f - -PODFILE CHECKSUM: 9b71095ad12f1b3055b61a1556f26a9a3ec6e27f - -COCOAPODS: 1.12.0 diff --git a/mobile/iosApp/Pods/Manifest.lock b/mobile/iosApp/Pods/Manifest.lock deleted file mode 100644 index e5c7a033a5c95f7d698a8a802b475bfa21646c76..0000000000000000000000000000000000000000 --- a/mobile/iosApp/Pods/Manifest.lock +++ /dev/null @@ -1,42 +0,0 @@ -PODS: - - AppAuth (1.6.0): - - AppAuth/Core (= 1.6.0) - - AppAuth/ExternalUserAgent (= 1.6.0) - - AppAuth/Core (1.6.0) - - AppAuth/ExternalUserAgent (1.6.0): - - AppAuth/Core - - GoogleSignIn (7.0.0): - - AppAuth (~> 1.5) - - GTMAppAuth (< 3.0, >= 1.3) - - GTMSessionFetcher/Core (< 4.0, >= 1.1) - - GTMAppAuth (2.0.0): - - AppAuth/Core (~> 1.6) - - GTMSessionFetcher/Core (< 4.0, >= 1.5) - - GTMSessionFetcher/Core (3.1.0) - - shared (0.0.1) - -DEPENDENCIES: - - GoogleSignIn - - shared (from `../shared`) - -SPEC REPOS: - trunk: - - AppAuth - - GoogleSignIn - - GTMAppAuth - - GTMSessionFetcher - -EXTERNAL SOURCES: - shared: - :path: "../shared" - -SPEC CHECKSUMS: - AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add - GoogleSignIn: b232380cf495a429b8095d3178a8d5855b42e842 - GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae - GTMSessionFetcher: c9e714f7eec91a55641e2bab9f45fd83a219b882 - shared: 1fd4de2fb634f26f060830f5dcac451617f9109f - -PODFILE CHECKSUM: 9b71095ad12f1b3055b61a1556f26a9a3ec6e27f - -COCOAPODS: 1.12.0 diff --git a/mobile/iosApp/Pods/Target Support Files/shared/shared.debug.xcconfig b/mobile/iosApp/Pods/Target Support Files/shared/shared.debug.xcconfig deleted file mode 100644 index aad48adb4591d33ff2a240cafb173d62a7022f44..0000000000000000000000000000000000000000 --- a/mobile/iosApp/Pods/Target Support Files/shared/shared.debug.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/shared -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../shared/build/cocoapods/framework" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -KOTLIN_PROJECT_PATH = :mobile:shared -OTHER_LDFLAGS = $(inherited) -l"c++" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../shared -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -PRODUCT_MODULE_NAME = shared -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/mobile/iosApp/Pods/Target Support Files/shared/shared.release.xcconfig b/mobile/iosApp/Pods/Target Support Files/shared/shared.release.xcconfig deleted file mode 100644 index aad48adb4591d33ff2a240cafb173d62a7022f44..0000000000000000000000000000000000000000 --- a/mobile/iosApp/Pods/Target Support Files/shared/shared.release.xcconfig +++ /dev/null @@ -1,16 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/shared -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../shared/build/cocoapods/framework" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -KOTLIN_PROJECT_PATH = :mobile:shared -OTHER_LDFLAGS = $(inherited) -l"c++" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../../shared -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -PRODUCT_MODULE_NAME = shared -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/mobile/iosApp/iosApp.xcodeproj/xcshareddata/xcschemes/iosApp.xcscheme b/mobile/iosApp/iosApp.xcodeproj/xcshareddata/xcschemes/iosApp.xcscheme deleted file mode 100644 index d8e7b057d78f805ef2f877ec214b3bb4852199f9..0000000000000000000000000000000000000000 --- a/mobile/iosApp/iosApp.xcodeproj/xcshareddata/xcschemes/iosApp.xcscheme +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mobile/iosApp/iosApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mobile/iosApp/iosApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d68d0546c4804ac2ff47dd97c6e7921..0000000000000000000000000000000000000000 --- a/mobile/iosApp/iosApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/mobile/iosApp/iosApp.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mobile/iosApp/iosApp.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5ea15f194be85eb6ee8e6721a87ff4644..0000000000000000000000000000000000000000 --- a/mobile/iosApp/iosApp.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/mobile/iosApp/iosApp.xcworkspace/xcuserdata/stanislav.radchenko.xcuserdatad/UserInterfaceState.xcuserstate b/mobile/iosApp/iosApp.xcworkspace/xcuserdata/stanislav.radchenko.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index a4a53aacedda473b22a8b150b60f440adf01d371..0000000000000000000000000000000000000000 Binary files a/mobile/iosApp/iosApp.xcworkspace/xcuserdata/stanislav.radchenko.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/mobile/iosApp/iosApp.xcworkspace/xcuserdata/stanislav.radchenko.xcuserdatad/WorkspaceSettings.xcsettings b/mobile/iosApp/iosApp.xcworkspace/xcuserdata/stanislav.radchenko.xcuserdatad/WorkspaceSettings.xcsettings deleted file mode 100644 index 379adbed5a64c54e605e0a7b5ec7b19fc20e53a4..0000000000000000000000000000000000000000 --- a/mobile/iosApp/iosApp.xcworkspace/xcuserdata/stanislav.radchenko.xcuserdatad/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,18 +0,0 @@ - - - - - BuildLocationStyle - UseAppPreferences - CustomBuildLocationType - RelativeToDerivedData - DerivedDataLocationStyle - Default - IssueFilterStyle - ShowActiveSchemeOnly - LiveSourceIssuesEnabled - - ShowSharedSchemesAutomaticallyEnabled - - - diff --git a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png b/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png deleted file mode 100644 index 66399c7c62d7f9471db68708f2b06654b2483b6c..0000000000000000000000000000000000000000 Binary files a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-20@2x.png and /dev/null differ diff --git a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png b/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png deleted file mode 100644 index 30ee4dacace149ee759068bd9c67d1de671283b6..0000000000000000000000000000000000000000 Binary files a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-20@3x.png and /dev/null differ diff --git a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png b/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png deleted file mode 100644 index 83287e7ef3a73a19090c715bf74baf05c67a31e4..0000000000000000000000000000000000000000 Binary files a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png and /dev/null differ diff --git a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png b/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png deleted file mode 100644 index b9a912074aefbb16fc537f3eb79226df5f71a76c..0000000000000000000000000000000000000000 Binary files a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png and /dev/null differ diff --git a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png b/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png deleted file mode 100644 index bbedcd84e14bd4d5745c2e52ce2c2ed1a8c10310..0000000000000000000000000000000000000000 Binary files a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png and /dev/null differ diff --git a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png b/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png deleted file mode 100644 index 5960ec4a751fea9786440a44b9be89f64690750a..0000000000000000000000000000000000000000 Binary files a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png and /dev/null differ diff --git a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png deleted file mode 100644 index 5960ec4a751fea9786440a44b9be89f64690750a..0000000000000000000000000000000000000000 Binary files a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png and /dev/null differ diff --git a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png b/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png deleted file mode 100644 index 6523725b96e3df7a85a56e1e4feb54c60cc8be03..0000000000000000000000000000000000000000 Binary files a/mobile/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png and /dev/null differ diff --git a/mobile/iosApp/iosApp/Assets.xcassets/about.imageset/Contents.json b/mobile/iosApp/iosApp/Assets.xcassets/about.imageset/Contents.json deleted file mode 100644 index fa06b5f41df34dbcd6a53cf50e80d2b13aad5062..0000000000000000000000000000000000000000 --- a/mobile/iosApp/iosApp/Assets.xcassets/about.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "↳ Icon Color (3).svg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/mobile/iosApp/iosApp/Assets.xcassets/about.imageset/\342\206\263 Icon Color (3).svg" "b/mobile/iosApp/iosApp/Assets.xcassets/about.imageset/\342\206\263 Icon Color (3).svg" deleted file mode 100644 index 211862e897d6dc4f082366e09ef429e3176b7bd8..0000000000000000000000000000000000000000 --- "a/mobile/iosApp/iosApp/Assets.xcassets/about.imageset/\342\206\263 Icon Color (3).svg" +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/mobile/iosApp/iosApp/Assets.xcassets/avatar_border.imageset/Contents.json b/mobile/iosApp/iosApp/Assets.xcassets/avatar_border.imageset/Contents.json deleted file mode 100644 index c735567212444a8227ca06ff519d6cd729f03429..0000000000000000000000000000000000000000 --- a/mobile/iosApp/iosApp/Assets.xcassets/avatar_border.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "Group 2.svg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/mobile/iosApp/iosApp/Assets.xcassets/google.imageset/Contents.json b/mobile/iosApp/iosApp/Assets.xcassets/google.imageset/Contents.json deleted file mode 100644 index 8ff8a35c4e24a4904a0268ba26e9a4c4ec47bdec..0000000000000000000000000000000000000000 --- a/mobile/iosApp/iosApp/Assets.xcassets/google.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "google.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/mobile/iosApp/iosApp/Assets.xcassets/google.imageset/google.png b/mobile/iosApp/iosApp/Assets.xcassets/google.imageset/google.png deleted file mode 100644 index 494acede0c520f847f75982ca1f671fc6eaa889e..0000000000000000000000000000000000000000 Binary files a/mobile/iosApp/iosApp/Assets.xcassets/google.imageset/google.png and /dev/null differ diff --git a/mobile/iosApp/iosApp/Assets.xcassets/home.imageset/Contents.json b/mobile/iosApp/iosApp/Assets.xcassets/home.imageset/Contents.json deleted file mode 100644 index 79ccbf79e06efec689f1e29d07a6290517b5e872..0000000000000000000000000000000000000000 --- a/mobile/iosApp/iosApp/Assets.xcassets/home.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "↳ Icon Color (4).svg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/mobile/iosApp/iosApp/Assets.xcassets/home.imageset/\342\206\263 Icon Color (4).svg" "b/mobile/iosApp/iosApp/Assets.xcassets/home.imageset/\342\206\263 Icon Color (4).svg" deleted file mode 100644 index 91c6f8c9022bede5dd23aa9b8a43d47ee5d5d8c8..0000000000000000000000000000000000000000 --- "a/mobile/iosApp/iosApp/Assets.xcassets/home.imageset/\342\206\263 Icon Color (4).svg" +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/mobile/iosApp/iosApp/Assets.xcassets/profile.imageset/Contents.json b/mobile/iosApp/iosApp/Assets.xcassets/profile.imageset/Contents.json deleted file mode 100644 index a2e38f99d5032d332607953fc8e90fe1d9c37d69..0000000000000000000000000000000000000000 --- a/mobile/iosApp/iosApp/Assets.xcassets/profile.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "↳ Icon Color (2).svg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/mobile/iosApp/iosApp/Assets.xcassets/profile.imageset/\342\206\263 Icon Color (2).svg" "b/mobile/iosApp/iosApp/Assets.xcassets/profile.imageset/\342\206\263 Icon Color (2).svg" deleted file mode 100644 index 2f97ee8aed687162f67320817967b60ddade6914..0000000000000000000000000000000000000000 --- "a/mobile/iosApp/iosApp/Assets.xcassets/profile.imageset/\342\206\263 Icon Color (2).svg" +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/mobile/iosApp/iosApp/Assets.xcassets/statistic.imageset/Contents.json b/mobile/iosApp/iosApp/Assets.xcassets/statistic.imageset/Contents.json deleted file mode 100644 index e6a1a525762e01526361130d7c6f35c1fd747d1b..0000000000000000000000000000000000000000 --- a/mobile/iosApp/iosApp/Assets.xcassets/statistic.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "↳ Icon Color (1).svg", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git "a/mobile/iosApp/iosApp/Assets.xcassets/statistic.imageset/\342\206\263 Icon Color (1).svg" "b/mobile/iosApp/iosApp/Assets.xcassets/statistic.imageset/\342\206\263 Icon Color (1).svg" deleted file mode 100644 index 148c490c02f56af2d4ca4a4a2e0272f7643f9c8d..0000000000000000000000000000000000000000 --- "a/mobile/iosApp/iosApp/Assets.xcassets/statistic.imageset/\342\206\263 Icon Color (1).svg" +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/mobile/iosApp/iosApp/AvoidDispose.swift b/mobile/iosApp/iosApp/AvoidDispose.swift deleted file mode 100644 index c795f1c2cdd2e412f7452f5771a4d823d5957546..0000000000000000000000000000000000000000 --- a/mobile/iosApp/iosApp/AvoidDispose.swift +++ /dev/null @@ -1,70 +0,0 @@ -// -// AvoidDispose.swift -// iosApp -// -// Created by Clem on 27.10.22. -// Copyright © 2022 orgName. All rights reserved. -// - -import UIKit -import shared - -// ComposeWindow is disposed on viewDidDisappear so but it inside a container view: -// https://github.com/JetBrains/androidx/blob/jb-main/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/window/ComposeWindow.uikit.kt - -class AvoidDispose: UIViewController { - let controller: UIViewController - - init(_ controller: UIViewController) { - self.controller = controller - super.init(nibName: nil, bundle: nil) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - addChild(controller) - view.addSubview(controller.view) - } - - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - } - - override func viewDidDisappear(_ animated: Bool) { - super.viewDidDisappear(animated) - controller.removeFromParent() - controller.view.removeFromSuperview() - } - - override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { - super.viewWillTransition(to: size, with: coordinator) - skiaRefresh() - } - - override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - skiaRefresh() - } - - override func viewSafeAreaInsetsDidChange() { - super.viewSafeAreaInsetsDidChange() - skiaRefresh() - } - - override var preferredStatusBarStyle: UIStatusBarStyle { - return .lightContent - } - - private func skiaRefresh() { - controller.view.frame = view.bounds - controller.viewWillAppear(false) - RootViewControllersKt.setDarkMode() - RootViewControllersKt.setSafeArea(start: view.safeAreaInsets.left, top: view.safeAreaInsets.top, end: view.safeAreaInsets.right, bottom: view.safeAreaInsets.bottom) - //kotlin compose refresh - controller.view.touchesCancelled([UITouch()], with: UIEvent()) - } -} diff --git a/mobile/iosApp/iosApp/iOSApp.swift b/mobile/iosApp/iosApp/iOSApp.swift deleted file mode 100644 index 014e4463b99e63c4c4fad58d5aeee8690d46e0f6..0000000000000000000000000000000000000000 --- a/mobile/iosApp/iosApp/iOSApp.swift +++ /dev/null @@ -1,92 +0,0 @@ -import SwiftUI -import shared -import GoogleSignIn - -@UIApplicationMain -class AppDelegate: NSObject, UIApplicationDelegate { - var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { - let rootViewController = RootViewControllersKt.RootViewController() - //GIDSignIn.sharedInstance.presentingViewController = rootViewController - - let iosClient = GoogleAuthorization.shared.getClientId() - let serverIdClient = GoogleAuthorization.shared.getServerClientId() - let config = GIDConfiguration.init(clientID: iosClient, serverClientID: serverIdClient) - - GIDSignIn.sharedInstance.configuration = config - - GIDSignIn.sharedInstance.restorePreviousSignIn { user, error in - if error != nil || user == nil { - GoogleAuthorization.shared.token = nil - } else { - let dimension = round(100 * UIScreen.main.scale) - let imageUrl = user?.profile?.imageURL(withDimension: UInt(dimension))?.absoluteURL.absoluteString - let username = user?.profile?.givenName - let email = user?.profile?.email - GoogleAuthorization.shared.token = user?.idToken?.tokenString - GoogleAuthorization.shared.googleAccountUser = GoogleAccountUser(imageUrl: imageUrl, username: username, email: email) - } - } - - GoogleAuthorization.shared.setSignIn { - GIDSignIn.sharedInstance.signIn( - withPresenting: rootViewController) { signInResult, error in - guard signInResult != nil else { - GoogleAuthorization.shared.onSignInFailure(KotlinException(message: error?.localizedDescription)) - return - } - let dimension = round(100 * UIScreen.main.scale) - let imageUrl = signInResult?.user.profile?.imageURL(withDimension: UInt(dimension))?.absoluteURL.absoluteString - let username = signInResult?.user.profile?.givenName - let email = signInResult?.user.profile?.email - GoogleAuthorization.shared.token = signInResult?.user.idToken?.tokenString - GoogleAuthorization.shared.googleAccountUser = GoogleAccountUser(imageUrl: imageUrl, username: username, email: email) - GoogleAuthorization.shared.onSignInSuccess() - } - } - - GoogleAuthorization.shared.signOut { - GIDSignIn.sharedInstance.signOut() - } - - GoogleAuthorization.shared.setLastSignedAccount { - GIDSignIn.sharedInstance.restorePreviousSignIn { user, error in - if error != nil || user == nil { - GoogleAuthorization.shared.token = nil - } else { - GoogleAuthorization.shared.token = user?.idToken?.tokenString - } - } - } - - - let controller = AvoidDispose(rootViewController) - - controller.view.backgroundColor = .white - let window = UIWindow(frame: UIScreen.main.bounds) - window.backgroundColor = .white - window.rootViewController = controller - window.makeKeyAndVisible() - self.window = window - - return true - } - - func application( - _ app: UIApplication, - open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:] - ) -> Bool { - var handled: Bool - - handled = GIDSignIn.sharedInstance.handle(url) - if handled { - return true - } - - // Handle other custom URL types. - - // If not handled by this app, return false. - return false - } -} diff --git a/mobile/shared/build.gradle.kts b/mobile/shared/build.gradle.kts deleted file mode 100644 index 89ac78e498f48917a46a7b9d7f179784006bd6ce..0000000000000000000000000000000000000000 --- a/mobile/shared/build.gradle.kts +++ /dev/null @@ -1,90 +0,0 @@ -import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.STRING - -plugins { - kotlin("multiplatform") - kotlin("native.cocoapods") - id("android-setup") - id("org.jetbrains.compose") version Dependencies.JetBrains.Compose.VERSION - id("com.codingfeline.buildkonfig") -} - -version = "0.0.1" - -kotlin { - android() - ios() - - cocoapods { - summary = "Multiplatform Compose Shared Module" - homepage = "https://github.com/Radch-enko" - podfile = project.file("../iosApp/Podfile") - ios.deploymentTarget = "10.0" - framework { - baseName = "shared" - isStatic = true - } - } - - sourceSets { - val commonMain by getting { - dependencies { - //implementation(compose.ui) - implementation(compose.foundation) - implementation(compose.material) - implementation(compose.runtime) - //implementation(compose.materialIconsExtended) - - implementation(Dependencies.Ktor.Client.Core) - implementation(Dependencies.Ktor.Client.commonLogging) - implementation(Dependencies.Ktor.Client.cio) - - implementation(Dependencies.Coroutines.Core) - - implementation(Dependencies.JetBrains.Kotlin.dateTime) - - api(Dependencies.Napier.logger) - - //implementation(Dependencies.Voyager.transition) - api(Dependencies.asyncImageCompose) - } - } - - val androidMain by getting { - dependencies { - //implementation("androidx.appcompat:appcompat:1.4.0-alpha03") - //implementation("androidx.core:core-ktx:1.6.0") - implementation(Dependencies.Google.SignIn) - implementation(Dependencies.AndroidX.Activity.activityCompose) - } - } - //val iosX64Main by getting - val iosMain by getting { - dependsOn(commonMain) - // iosX64Main.dependsOn(this) - //iosSimulatorArm64Main.dependsOn(this) - dependencies { - implementation(Dependencies.Ktor.Client.ios) - } - } - } -} - -kotlin { - targets.withType { - binaries.all { - freeCompilerArgs += "-Xdisable-phases=VerifyBitcode" - } - } -} - -buildkonfig { - packageName = "band.effective.office.elevator" - - defaultConfigs { - buildConfigField( - STRING, - "webClient", - "726357293621-s4lju93oibotmefghoh3b3ucckalh933.apps.googleusercontent.com" - ) - } -} \ No newline at end of file diff --git a/mobile/shared/gradle/wrapper/gradle-wrapper.jar b/mobile/shared/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index ccebba7710deaf9f98673a68957ea02138b60d0a..0000000000000000000000000000000000000000 Binary files a/mobile/shared/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/mobile/shared/gradle/wrapper/gradle-wrapper.properties b/mobile/shared/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index e1bef7e873c1f79108a6676ad60e4566ca1d1950..0000000000000000000000000000000000000000 --- a/mobile/shared/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/mobile/shared/src/androidMain/AndroidManifest.xml b/mobile/shared/src/androidMain/AndroidManifest.xml deleted file mode 100644 index 1c257e33b8fdf01bfea58f4109e1edb5e15b1c44..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/AndroidManifest.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/Resources.kt b/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/Resources.kt deleted file mode 100644 index 7f04784239e1bef43634a8a39ad8aee37bfee66a..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/Resources.kt +++ /dev/null @@ -1,21 +0,0 @@ -package band.effective.office.elevator.common.compose - -import android.content.Context -import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.ImageBitmap -import androidx.compose.ui.graphics.asAndroidBitmap -import androidx.compose.ui.graphics.asImageBitmap -import androidx.compose.ui.res.imageResource -import band.effective.office.elevator.common.compose.helpers.LastOpenActivityProvider - -@Composable -internal actual fun imageResource(id: String): ImageBitmap { - val context = Android.applicationContext - val id = context.resources.getIdentifier(id, "drawable", context.packageName) - return ImageBitmap.Companion.imageResource(id = id) -} - -object Android { - lateinit var applicationContext: Context - val activity = LastOpenActivityProvider.lastOpenedActivity() -} diff --git a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/RootView.kt b/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/RootView.kt deleted file mode 100644 index 04e34c911addea25e516a9f63d52e6cdfee155c9..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/RootView.kt +++ /dev/null @@ -1,8 +0,0 @@ -package band.effective.office.elevator.common.compose - -import androidx.compose.runtime.Composable - -@Composable -fun RootView() { - Content() -} diff --git a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/expects/ImageVector.kt b/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/expects/ImageVector.kt deleted file mode 100644 index 73a5f5d90dd0cfff0687d1e8ffbc692181fe1147..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/expects/ImageVector.kt +++ /dev/null @@ -1,22 +0,0 @@ -package band.effective.office.elevator.common.compose.expects - -import androidx.compose.foundation.Image -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.ColorFilter -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.res.vectorResource -import band.effective.office.elevator.common.compose.Android - -@Composable -internal actual fun ImageVector(id: String, modifier: Modifier, tint: Color?) { - val context = Android.applicationContext - val id = context.resources.getIdentifier(id, "drawable", context.packageName) - Image( - modifier = modifier, - imageVector = ImageVector.vectorResource(id), - contentDescription = null, - colorFilter = if (tint != null) ColorFilter.tint(tint) else null - ) -} \ No newline at end of file diff --git a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/helpers/BaseUrl.kt b/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/helpers/BaseUrl.kt deleted file mode 100644 index 3659f68c1741ea6eab1b8bf6106d30095afe0620..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/helpers/BaseUrl.kt +++ /dev/null @@ -1,3 +0,0 @@ -package band.effective.office.elevator.common.compose.helpers - -actual val BaseUrl: String = "10.0.2.2" \ No newline at end of file diff --git a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/screens/login/GoogleAuthorization.kt b/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/screens/login/GoogleAuthorization.kt deleted file mode 100644 index 56b33b89b74c9bba879031b3934c728bd3959049..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/band/effective/office/elevator/common/compose/screens/login/GoogleAuthorization.kt +++ /dev/null @@ -1,152 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.login - -import android.content.Intent -import band.effective.office.elevator.BuildKonfig -import band.effective.office.elevator.common.compose.Android -import band.effective.office.elevator.common.compose.expects.showToast -import com.google.android.gms.auth.api.signin.GoogleSignIn -import com.google.android.gms.auth.api.signin.GoogleSignInAccount -import com.google.android.gms.auth.api.signin.GoogleSignInOptions -import com.google.android.gms.common.api.ApiException -import com.google.android.gms.tasks.Task -import io.github.aakira.napier.Napier -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.launch - - -actual object GoogleAuthorization { - - private const val TAG: String = "GoogleAuthorization" - private const val RC_SIGN_IN: Int = 1234 - - // Configure sign-in to request the user's ID, email address, and basic - // profile. ID and basic profile are included in DEFAULT_SIGN_IN. - private val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) - .requestIdToken(BuildKonfig.webClient) - .requestEmail() - .build() - - private lateinit var onSignInFailure: (e: Exception) -> Unit - private lateinit var onSignInSuccess: () -> Unit - - actual var token: String? = null - set(value) { - field = if (value?.isNotBlank() == true) value else null - } - - init { - - // Check for existing Google Sign In account, if the user is already signed in - // the GoogleSignInAccount will be non-null. - val account = - GoogleSignIn.getLastSignedInAccount(Android.applicationContext.applicationContext) - if (account != null) { - printAccountInfo(account) - token = account.idToken - } - } - - actual fun signIn( - onSignInSuccess: () -> Unit, - onSignInFailure: (e: Exception) -> Unit - ) { - this.onSignInFailure = onSignInFailure - this.onSignInSuccess = onSignInSuccess - startAuthorizationIntent() - } - - actual fun signOut() { - val client = GoogleSignIn.getClient(Android.applicationContext.applicationContext, gso) - this.token = null - client.signOut() - } - - fun activityResult(requestCode: Int, resultCode: Int, data: Intent?) { - // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...); - if (requestCode == RC_SIGN_IN) { - // The Task returned from this call is always completed, no need to attach - // a listener. - val task: Task = GoogleSignIn.getSignedInAccountFromIntent(data) - handleSignInResult(task) - } - } - - private fun startAuthorizationIntent() { - val client = GoogleSignIn.getClient(Android.applicationContext, gso) - val signInIntent: Intent = client.signInIntent - - CoroutineScope(Dispatchers.Main).launch { - Android.activity.first()?.startActivityForResult(signInIntent, RC_SIGN_IN) - ?: showToast("Something went wrong. Please try again") - } - } - - private fun handleSignInResult(completedTask: Task) { - try { - val account = completedTask.getResult(ApiException::class.java) - - // Signed in successfully, show authenticated UI. - printAccountInfo(account) - token = account.idToken - - onSignInSuccess() - - } catch (e: ApiException) { - // The ApiException status code indicates the detailed failure reason. - // Please refer to the GoogleSignInStatusCodes class reference for more information. - Napier.e(tag = TAG, message = "signInResult:failed code=" + e.statusCode, throwable = e) - onSignInFailure(e) - } catch (e: Exception) { - Napier.e(tag = TAG, throwable = e, message = "Failed handle sign in result") - onSignInFailure(e) - } - } - - private fun printAccountInfo(account: GoogleSignInAccount) { - Napier.d( - TAG, null, "\nSigned profile:\n displayName = ${account.displayName}\n" + - "email = ${account.email}\n" + - "photo = ${account.photoUrl}\n" + - "token = ${account.idToken}" - ) - } - - actual suspend fun performWithFreshToken( - action: (token: String) -> Unit, - failure: (message: String) -> Unit - ) { - val client = GoogleSignIn.getClient(Android.applicationContext, gso) - val task = client.silentSignIn() - if (task.isSuccessful) { - val signInAccount = task.result - signInAccount.idToken?.let { action(it) } - ?: failure("Something went wrong. Please try again") - } else { - task.addOnCompleteListener { completedTask -> - try { - val signInAccount = completedTask.getResult( - ApiException::class.java - ) - signInAccount.idToken?.let { action(it) } - ?: failure("Something went wrong. Please try again") - } catch (apiException: ApiException) { - Napier.e(message = "ApiException", tag = TAG, throwable = apiException) - apiException.message?.let { failure("Something went wrong. Please try again") } - } - } - } - } - - actual fun getAccount(): GoogleAccountUser { - val account = - GoogleSignIn.getLastSignedInAccount(Android.applicationContext.applicationContext) - Napier.d { "photoUrl: ${account?.photoUrl}" } - return GoogleAccountUser( - imageUrl = account?.photoUrl.toString(), - username = account?.displayName, - email = account?.email - ) - } -} \ No newline at end of file diff --git a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/concurrent/AtomicInt32.kt b/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/concurrent/AtomicInt32.kt deleted file mode 100644 index c1c312d23b4bb09189ecdb0272341cda7caa6955..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/concurrent/AtomicInt32.kt +++ /dev/null @@ -1,3 +0,0 @@ -package cafe.adriel.voyager.core.concurrent - -internal actual typealias AtomicInt32 = java.util.concurrent.atomic.AtomicInteger \ No newline at end of file diff --git a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeList.kt b/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeList.kt deleted file mode 100644 index b9fb187706d92e680ef5b3c95a783264f22f5bb0..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeList.kt +++ /dev/null @@ -1,5 +0,0 @@ -package cafe.adriel.voyager.core.concurrent - -import java.util.concurrent.CopyOnWriteArrayList - -internal actual class ThreadSafeList : MutableList by CopyOnWriteArrayList() diff --git a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeMap.kt b/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeMap.kt deleted file mode 100644 index 0f1eb99b5254a1c9d4c53a7e059f2e1b0526e19d..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeMap.kt +++ /dev/null @@ -1,5 +0,0 @@ -package cafe.adriel.voyager.core.concurrent - -import java.util.concurrent.ConcurrentHashMap - -internal actual class ThreadSafeMap : MutableMap by ConcurrentHashMap() diff --git a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeSet.kt b/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeSet.kt deleted file mode 100644 index 1a3b75e0d8da607f1da2b90a793217e5cdd6e31b..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeSet.kt +++ /dev/null @@ -1,5 +0,0 @@ -package cafe.adriel.voyager.core.concurrent - -import java.util.concurrent.CopyOnWriteArraySet - -internal actual class ThreadSafeSet : MutableSet by CopyOnWriteArraySet() diff --git a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/lifecycle/ConfigurationChecker.kt b/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/lifecycle/ConfigurationChecker.kt deleted file mode 100644 index 45ba95c5a5c9cdae2b253a794fb1d06ddb69af71..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/lifecycle/ConfigurationChecker.kt +++ /dev/null @@ -1,28 +0,0 @@ -package cafe.adriel.voyager.core.lifecycle - -import android.app.Activity -import android.content.Context -import android.content.ContextWrapper -import androidx.compose.runtime.Composable -import androidx.compose.runtime.Stable -import androidx.compose.runtime.remember -import androidx.compose.ui.platform.LocalContext - -internal tailrec fun Context.getActivity(): Activity? = when (this) { - is Activity -> this - is ContextWrapper -> baseContext.getActivity() - else -> null -} - -@Composable -internal actual fun getConfigurationChecker(): ConfigurationChecker { - val context = LocalContext.current - return remember(context) { ConfigurationChecker(context.getActivity()) } -} - -@Stable -internal actual class ConfigurationChecker(private val activity: Activity?) { - actual fun isChangingConfigurations(): Boolean { - return activity?.isChangingConfigurations ?: false - } -} diff --git a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/lifecycle/Serializable.jvm.kt b/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/lifecycle/Serializable.jvm.kt deleted file mode 100644 index e23c6d22464a62db9c8879c6f3bf25c6781766d1..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/lifecycle/Serializable.jvm.kt +++ /dev/null @@ -1,5 +0,0 @@ -package cafe.adriel.voyager.core.lifecycle - -import java.io.Serializable - -internal actual interface JavaSerializable : Serializable diff --git a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/platform/KClassEx.jvm.kt b/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/platform/KClassEx.jvm.kt deleted file mode 100644 index 737aa0051a093153d553ab2068fd9cdd4d417c00..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/platform/KClassEx.jvm.kt +++ /dev/null @@ -1,5 +0,0 @@ -package cafe.adriel.voyager.core.platform - -import kotlin.reflect.KClass - -internal actual val KClass<*>.multiplatformName: String? get() = qualifiedName diff --git a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/screen/Screen.kt b/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/screen/Screen.kt deleted file mode 100644 index 94e0b6d774eb56b4535c077c089905d0b51642c5..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/core/screen/Screen.kt +++ /dev/null @@ -1,12 +0,0 @@ -package cafe.adriel.voyager.core.screen - -import androidx.compose.runtime.Composable -import java.io.Serializable - -internal actual interface Screen : Serializable { - public actual val key: ScreenKey - get() = commonKeyGeneration() - - @Composable - public actual fun Content() -} diff --git a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/navigator/internal/Actuals.kt b/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/navigator/internal/Actuals.kt deleted file mode 100644 index 72894e09ae7c999adcb959339958eaa1432eff4f..0000000000000000000000000000000000000000 --- a/mobile/shared/src/androidMain/kotlin/cafe/adriel/voyager/navigator/internal/Actuals.kt +++ /dev/null @@ -1,7 +0,0 @@ -package cafe.adriel.voyager.navigator.internal - -import androidx.activity.compose.BackHandler -import androidx.compose.runtime.Composable - -@Composable -internal actual fun BackHandler(enabled: Boolean, onBack: () -> Unit) = BackHandler(enabled, onBack) diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/App.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/App.kt deleted file mode 100644 index 00aa45a46d1df0180faf0f2d60b568b5ddf00f43..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/App.kt +++ /dev/null @@ -1,23 +0,0 @@ -package band.effective.office.elevator.common.compose - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.padding -import androidx.compose.material.MaterialTheme -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import band.effective.office.elevator.common.compose.navigation.RootScreen -import cafe.adriel.voyager.navigator.Navigator -import io.github.aakira.napier.DebugAntilog -import io.github.aakira.napier.Napier - -@Composable -internal fun App() { - Napier.base(DebugAntilog()) - Box( - modifier = Modifier.background(MaterialTheme.colors.background) - .padding(top = SafeArea.current.value.calculateTopPadding()) - ) { - Navigator(screen = RootScreen()) - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/Content.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/Content.kt deleted file mode 100644 index 444e716fa494cca25ce541723d7708eedada3fda..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/Content.kt +++ /dev/null @@ -1,26 +0,0 @@ -package band.effective.office.elevator.common.compose - -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.compositionLocalOf -import androidx.compose.runtime.mutableStateOf -import band.effective.office.elevator.common.compose.theme.OfficeElevatorTheme - -internal val darkmodeState = mutableStateOf(false) -internal val safeAreaState = mutableStateOf(PaddingValues()) -internal val SafeArea = compositionLocalOf { safeAreaState } -internal val DarkMode = compositionLocalOf { darkmodeState } - -@Composable -internal fun Content() { - OfficeElevatorTheme { - App() - } - // isSystemInDarkTheme is not working correctly on iOS - val darkMode = isSystemInDarkTheme() - LaunchedEffect(key1 = Unit, block = { - darkmodeState.value = darkMode - }) -} diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/Resources.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/Resources.kt deleted file mode 100644 index 90ac955615b70110802428560ec4fc820f766821..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/Resources.kt +++ /dev/null @@ -1,7 +0,0 @@ -package band.effective.office.elevator.common.compose - -import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.ImageBitmap - -@Composable -internal expect fun imageResource(id: String): ImageBitmap diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/components/TabNavigationItem.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/components/TabNavigationItem.kt deleted file mode 100644 index 89301afb80ceee16d42e6ad7b4af31d1b5ee001d..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/components/TabNavigationItem.kt +++ /dev/null @@ -1,32 +0,0 @@ -package band.effective.office.elevator.common.compose.components - -import androidx.compose.foundation.layout.RowScope -import androidx.compose.foundation.layout.padding -import androidx.compose.material.BottomNavigationItem -import androidx.compose.material.Icon -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Text -import androidx.compose.material.ripple.LocalRippleTheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.ui.Modifier -import band.effective.office.elevator.common.compose.SafeArea -import band.effective.office.elevator.common.compose.navigation.tabs.internal.LocalTabNavigator -import band.effective.office.elevator.common.compose.navigation.tabs.internal.Tab -import band.effective.office.elevator.common.compose.theme.colors.unselectedColor - -@Composable -internal fun RowScope.TabNavigationItem(tab: Tab) { - val tabNavigator = LocalTabNavigator.current - CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) { - BottomNavigationItem( - modifier = Modifier.padding(bottom = SafeArea.current.value.calculateBottomPadding()), - selected = tabNavigator.current == tab, - selectedContentColor = MaterialTheme.colors.secondary, - unselectedContentColor = unselectedColor, - onClick = { tabNavigator.current = tab }, - icon = { tab.icon?.let { Icon(painter = it, contentDescription = tab.title) } }, - label = { Text(text = tab.title) } - ) - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/expects/ImageVector.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/expects/ImageVector.kt deleted file mode 100644 index 093c3c3dceea14d1579037860b79d6b2f0f8b558..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/expects/ImageVector.kt +++ /dev/null @@ -1,8 +0,0 @@ -package band.effective.office.elevator.common.compose.expects - -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color - -@Composable -internal expect fun ImageVector(id: String, modifier: Modifier, tint: Color?) \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/expects/PlatformExpects.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/expects/PlatformExpects.kt deleted file mode 100644 index c2d85ada73ca974503bf8a2af64231c68063282e..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/expects/PlatformExpects.kt +++ /dev/null @@ -1,5 +0,0 @@ -package band.effective.office.elevator.common.compose.expects - -expect fun showToast(message: String) - -expect fun generateVibration(milliseconds: Long) \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/helpers/BaseUrl.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/helpers/BaseUrl.kt deleted file mode 100644 index 843e9ef66d0c6b05ad897a691118aece54612c20..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/helpers/BaseUrl.kt +++ /dev/null @@ -1,3 +0,0 @@ -package band.effective.office.elevator.common.compose.helpers - -internal expect val BaseUrl: String \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/RootScreen.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/RootScreen.kt deleted file mode 100644 index e1a8c9a96ab568e2c047a069d9e5df2b02b78240..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/RootScreen.kt +++ /dev/null @@ -1,24 +0,0 @@ -package band.effective.office.elevator.common.compose.navigation - -import androidx.compose.runtime.Composable -import band.effective.office.elevator.common.compose.screens.login.GoogleAuthorization -import band.effective.office.elevator.common.compose.screens.login.LoginScreen -import band.effective.office.elevator.common.compose.screens.main.MainScreenWrapper -import cafe.adriel.voyager.core.screen.Screen -import cafe.adriel.voyager.navigator.LocalNavigator -import cafe.adriel.voyager.navigator.Navigator -import cafe.adriel.voyager.navigator.currentOrThrow - -internal class RootScreen : Screen { - @Composable - override fun Content() { - val rootNavigator = LocalNavigator.currentOrThrow - val initialRoute = - if (GoogleAuthorization.token.isNullOrBlank().not()) MainScreenWrapper() - else LoginScreen(onSignInSuccess = { - rootNavigator.replace(MainScreenWrapper()) - }) - - Navigator(screen = initialRoute) - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/tabs/ElevatorTab.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/tabs/ElevatorTab.kt deleted file mode 100644 index b531b9fc33fd4ece8b18a79ec5e16835d5e36fe9..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/tabs/ElevatorTab.kt +++ /dev/null @@ -1,36 +0,0 @@ -package band.effective.office.elevator.common.compose.navigation.tabs - -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Home -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.graphics.vector.rememberVectorPainter -import band.effective.office.elevator.common.compose.navigation.tabs.internal.Tab -import band.effective.office.elevator.common.compose.navigation.tabs.internal.TabOptions -import band.effective.office.elevator.common.compose.screens.home.ElevatorScreen -import band.effective.office.elevator.common.compose.screens.home.ElevatorScreenViewModel -import cafe.adriel.voyager.core.model.rememberScreenModel - -internal object ElevatorTab : Tab { - - override val options: TabOptions - @Composable - get() { - val title = "Main" - val icon = rememberVectorPainter(Icons.Default.Home) - - return remember { - TabOptions( - index = 0u, - title = title, - icon = icon - ) - } - } - - @Composable - override fun Content() { - val viewModel: ElevatorScreenViewModel = rememberScreenModel { ElevatorScreenViewModel() } - ElevatorScreen(viewModel) - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/tabs/ProfileTab.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/tabs/ProfileTab.kt deleted file mode 100644 index fcde7517c5dc4723012ab55d21183d2da55dead3..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/tabs/ProfileTab.kt +++ /dev/null @@ -1,46 +0,0 @@ -package band.effective.office.elevator.common.compose.navigation.tabs - -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Person -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.graphics.vector.rememberVectorPainter -import band.effective.office.elevator.common.compose.navigation.tabs.internal.Tab -import band.effective.office.elevator.common.compose.navigation.tabs.internal.TabOptions -import band.effective.office.elevator.common.compose.screens.login.LoginScreen -import band.effective.office.elevator.common.compose.screens.main.MainScreenWrapper -import band.effective.office.elevator.common.compose.screens.profile.ProfileScreen -import band.effective.office.elevator.common.compose.screens.profile.ProfileScreenViewModel -import cafe.adriel.voyager.core.model.rememberScreenModel -import cafe.adriel.voyager.navigator.LocalNavigator - -internal object ProfileTab : Tab { - - override val options: TabOptions - @Composable - get() { - val title = "Profile" - val icon = rememberVectorPainter(Icons.Filled.Person) - - return remember { - TabOptions( - index = 0u, - title = title, - icon = icon - ) - } - } - - @Composable - override fun Content() { - val viewModel: ProfileScreenViewModel = rememberScreenModel { ProfileScreenViewModel() } - val parentNavigator = LocalNavigator.current?.parent - ProfileScreen(viewModel = viewModel, onSignOut = { - parentNavigator?.replaceAll(LoginScreen(onSignInSuccess = { - parentNavigator.replace( - MainScreenWrapper() - ) - })) - }) - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/tabs/internal/CurrentTab.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/tabs/internal/CurrentTab.kt deleted file mode 100644 index 37faa0437bd9f2c0d2e96308e63e9739e827801a..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/tabs/internal/CurrentTab.kt +++ /dev/null @@ -1,41 +0,0 @@ -package band.effective.office.elevator.common.compose.navigation.tabs.internal - -import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.painter.Painter -import cafe.adriel.voyager.core.screen.Screen - -@Composable -internal fun CurrentTab() { - val tabNavigator = LocalTabNavigator.current - val currentTab = tabNavigator.current - - tabNavigator.saveableState("currentTab") { - currentTab.Content() - } -} - -internal data class TabOptions( - val index: UShort, - val title: String, - val icon: Painter? = null -) - -internal interface Tab : Screen { - - public val options: TabOptions - @Composable get - - @Deprecated( - message = "Use 'options' instead. Will be removed in 1.0.0.", - replaceWith = ReplaceWith("options") - ) - public val title: String - @Composable get() = options.title - - @Deprecated( - message = "Use 'options' instead. Will be removed in 1.0.0.", - replaceWith = ReplaceWith("options") - ) - public val icon: Painter? - @Composable get() = options.icon -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/tabs/internal/TabNavigatorContent.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/tabs/internal/TabNavigatorContent.kt deleted file mode 100644 index eb567a14d0d6c448587935dcd5729f3e175b9a4c..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/navigation/tabs/internal/TabNavigatorContent.kt +++ /dev/null @@ -1,56 +0,0 @@ -package band.effective.office.elevator.common.compose.navigation.tabs.internal - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.ProvidableCompositionLocal -import androidx.compose.runtime.remember -import androidx.compose.runtime.staticCompositionLocalOf -import cafe.adriel.voyager.navigator.Navigator -import cafe.adriel.voyager.navigator.NavigatorDisposeBehavior - -internal typealias TabNavigatorContent = @Composable (tabNavigator: TabNavigator) -> Unit - -internal val LocalTabNavigator: ProvidableCompositionLocal = - staticCompositionLocalOf { error("TabNavigator not initialized") } - -@Composable -internal fun TabNavigator( - tab: Tab, - disposeNestedNavigators: Boolean = false, - content: TabNavigatorContent = { CurrentTab() } -) { - Navigator( - screen = tab, - disposeBehavior = NavigatorDisposeBehavior( - disposeNestedNavigators = disposeNestedNavigators, - disposeSteps = true - ), - onBackPressed = null - ) { navigator -> - val tabNavigator = remember(navigator) { - TabNavigator(navigator) - } - - CompositionLocalProvider(LocalTabNavigator provides tabNavigator) { - content(tabNavigator) - } - } -} - -internal class TabNavigator internal constructor( - private val navigator: Navigator -) { - - public var current: Tab - get() = navigator.lastItem as Tab - set(tab) = navigator.replaceAll(tab) - - @Composable - public fun saveableState( - key: String, - tab: Tab = current, - content: @Composable () -> Unit - ) { - navigator.saveableState(key, tab, content = content) - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/network/KtorClient.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/network/KtorClient.kt deleted file mode 100644 index f5264c8328b1aab2a06adb0c0982c75e5516e474..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/network/KtorClient.kt +++ /dev/null @@ -1,20 +0,0 @@ -package band.effective.office.elevator.common.compose.network - -import io.github.aakira.napier.Napier -import io.ktor.client.* -import io.ktor.client.plugins.* -import io.ktor.client.plugins.logging.* - -val ktorClient: HttpClient = HttpClient() { - defaultRequest { - host = "51.250.11.188" - port = 2105 - } - install(Logging) { - logger = object : Logger { - override fun log(message: String) { - Napier.d(message = message) - } - } - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorAction.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorAction.kt deleted file mode 100644 index d88ff1c70ab533a36f26e8d64f34de341ded2732..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorAction.kt +++ /dev/null @@ -1,4 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.home - -sealed class ElevatorAction { -} diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorEvent.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorEvent.kt deleted file mode 100644 index 70bfe56ea02704b95967ec28d733b459acd25a99..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorEvent.kt +++ /dev/null @@ -1,6 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.home - -sealed class ElevatorEvent { - object SignOut : ElevatorEvent() - object CallElevator : ElevatorEvent() -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorMessageState.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorMessageState.kt deleted file mode 100644 index 67dffbfa537af67f6190873d28028d079c3bc782..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorMessageState.kt +++ /dev/null @@ -1,11 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.home - -sealed class ElevatorMessageState(val message: String) { - object Empty: ElevatorMessageState("") - object Start: ElevatorMessageState("Press button to call elevator") - object Loading: ElevatorMessageState("Attempt to call elevator") - object IncorrectToken: ElevatorMessageState("Could not verify you Google account. Please try again or re-authenticate in app") - object AuthorizationError: ElevatorMessageState("Authorization error. Please try again") - object UndefinedError: ElevatorMessageState("Oops, something went wrong. Please try again") - object Success: ElevatorMessageState("Success") -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorScreen.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorScreen.kt deleted file mode 100644 index 03d223d59cb48f646ad07d9c4fdacac39d4c85f7..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorScreen.kt +++ /dev/null @@ -1,38 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.home - -import androidx.compose.foundation.layout.* -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import band.effective.office.elevator.common.compose.components.ElevatorButton -import band.effective.office.elevator.common.compose.expects.generateVibration - -@Composable -internal fun ElevatorScreen(viewModel: ElevatorScreenViewModel) { - val messageState by viewModel.messageState.collectAsState() - val buttonIsActive by viewModel.buttonState.collectAsState() - - Box( - modifier = Modifier.fillMaxSize().padding(16.dp) - ) { - Spacer(modifier = Modifier.height(30.dp)) - Text( - text = messageState.message, - modifier = Modifier.padding(50.dp).align(Alignment.TopCenter), - textAlign = TextAlign.Center - ) - ElevatorButton( - modifier = Modifier.align(Alignment.Center), - isActive = buttonIsActive, - isEnabled = !buttonIsActive - ) { - viewModel.sendEvent(ElevatorEvent.CallElevator) - } - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorScreenViewModel.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorScreenViewModel.kt deleted file mode 100644 index 73a132d64dbdfb96dd2acd6ca47f23e9254b3234..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorScreenViewModel.kt +++ /dev/null @@ -1,93 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.home - -import band.effective.office.elevator.common.compose.expects.generateVibration -import band.effective.office.elevator.common.compose.network.ktorClient -import band.effective.office.elevator.common.compose.screens.login.GoogleAuthorization -import cafe.adriel.voyager.core.model.ScreenModel -import cafe.adriel.voyager.core.model.coroutineScope -import io.ktor.client.request.* -import kotlinx.coroutines.FlowPreview -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.* -import kotlinx.coroutines.launch - -@OptIn(FlowPreview::class) -internal class ElevatorScreenViewModel : ScreenModel { - - private val mutableMessageStateFlow = - MutableStateFlow(ElevatorMessageState.Start) - val messageState = mutableMessageStateFlow.asStateFlow() - - private val mutableButtonStateFlow = MutableStateFlow(false) - val buttonState = mutableButtonStateFlow.asStateFlow() - - init { - load() - } - - /*** - * This method must be deleted when `ScreenModel` will work properly - */ - private fun load() { - mutableMessageStateFlow.update { ElevatorMessageState.Start } - coroutineScope.launch { - mutableButtonStateFlow.onEach { isEnable -> if (isEnable) generateVibration(50) } - .debounce(1000).collectLatest { state -> - delay(500) - if (state) { - GoogleAuthorization.performWithFreshToken(action = { token -> - coroutineScope.launch { - doNetworkElevatorCall(token) - } - }, failure = { message -> - mutableMessageStateFlow.update { ElevatorMessageState.AuthorizationError } - mutableButtonStateFlow.update { false } - }) - } - } - } - } - - fun sendEvent(viewEvent: ElevatorEvent) { - when (viewEvent) { - ElevatorEvent.CallElevator -> handleElevatorRequest() - ElevatorEvent.SignOut -> GoogleAuthorization.signOut() - } - } - - private fun handleElevatorRequest() { - mutableMessageStateFlow.update { ElevatorMessageState.Loading } - mutableButtonStateFlow.update { true } - } - - private suspend fun doNetworkElevatorCall(token: String) { - try { - val response = ktorClient.get("elevate") { - parameter("key", token) - } - when (response.status.value) { - in 200..299 -> { - mutableMessageStateFlow.update { ElevatorMessageState.Success } - delay(500) - mutableMessageStateFlow.update { ElevatorMessageState.Empty } - mutableButtonStateFlow.update { false } - } - 403 -> { - mutableMessageStateFlow.update { ElevatorMessageState.IncorrectToken } - mutableButtonStateFlow.update { false } - } - else -> { - mutableMessageStateFlow.update { ElevatorMessageState.UndefinedError } - mutableButtonStateFlow.update { false } - } - } - } catch (cause: Throwable) { - mutableMessageStateFlow.update { - ElevatorMessageState.UndefinedError - } - mutableButtonStateFlow.update { false } - } finally { - generateVibration(50) - } - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorState.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorState.kt deleted file mode 100644 index 0d80fc438afc403e4a94eede3b0f2a9f5f4bbc67..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/home/ElevatorState.kt +++ /dev/null @@ -1,5 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.home - -data class ElevatorState( - val message: String? = null -) \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/main/MainScreenWrapper.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/main/MainScreenWrapper.kt deleted file mode 100644 index a09329b37f67ece4c02e2939bd5cd55dea53d915..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/main/MainScreenWrapper.kt +++ /dev/null @@ -1,46 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.main - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.height -import androidx.compose.material.BottomNavigation -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Scaffold -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp -import band.effective.office.elevator.common.compose.SafeArea -import band.effective.office.elevator.common.compose.components.TabNavigationItem -import band.effective.office.elevator.common.compose.navigation.tabs.ElevatorTab -import band.effective.office.elevator.common.compose.navigation.tabs.ProfileTab -import band.effective.office.elevator.common.compose.navigation.tabs.internal.CurrentTab -import band.effective.office.elevator.common.compose.navigation.tabs.internal.TabNavigator -import cafe.adriel.voyager.core.screen.Screen - -internal class MainScreenWrapper : Screen { - @Composable - override fun Content() { - TabNavigator( - ElevatorTab, - disposeNestedNavigators = true - ) { - Scaffold( - modifier = Modifier, - content = { - CurrentTab() - }, - bottomBar = { - - Box(modifier = Modifier.background(MaterialTheme.colors.primary)) { - BottomNavigation( - modifier = Modifier.height(55.dp + SafeArea.current.value.calculateBottomPadding()) - ) { - TabNavigationItem(ElevatorTab) - TabNavigationItem(ProfileTab) - } - } - } - ) - } - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileAction.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileAction.kt deleted file mode 100644 index f2c2ff9e4aa60432b5ccfd0271f1257b9bf4cc8a..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileAction.kt +++ /dev/null @@ -1,5 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.profile - -class ProfileAction { - -} diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileEvent.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileEvent.kt deleted file mode 100644 index 5fe4f409f8b30148260a19585857ae36957bfeff..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileEvent.kt +++ /dev/null @@ -1,5 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.profile - -sealed class ProfileEvent { - object SignOut : ProfileEvent() -} diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileScreenViewModel.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileScreenViewModel.kt deleted file mode 100644 index 739d38f61bd165331f34212322ecec39b7c68e93..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileScreenViewModel.kt +++ /dev/null @@ -1,28 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.profile - -import band.effective.office.elevator.common.compose.screens.login.GoogleAuthorization -import cafe.adriel.voyager.core.model.StateScreenModel -import cafe.adriel.voyager.core.model.coroutineScope -import kotlinx.coroutines.launch - -internal class ProfileScreenViewModel : StateScreenModel(initialState = ProfileState()) { - - init { - loadUserData() - } - - private fun loadUserData() = coroutineScope.launch { - val googleUserData = GoogleAuthorization.getAccount() - mutableState.value = ProfileState( - imageUrl = googleUserData.imageUrl, - username = googleUserData.username, - email = googleUserData.email - ) - } - - fun sendEvent(viewEvent: ProfileEvent) { - when (viewEvent) { - ProfileEvent.SignOut -> GoogleAuthorization.signOut() - } - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileState.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileState.kt deleted file mode 100644 index 4840a60c810ec69352585e8a40337c5e585733e9..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/screens/profile/ProfileState.kt +++ /dev/null @@ -1,7 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.profile - -data class ProfileState( - val imageUrl: String? = null, - val username: String? = null, - val email: String? = null, -) \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/theme/OfficeElevatorTheme.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/theme/OfficeElevatorTheme.kt deleted file mode 100644 index ad1a047408d644b402608ef01a6d654310b8c5ec..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/theme/OfficeElevatorTheme.kt +++ /dev/null @@ -1,22 +0,0 @@ -package band.effective.office.elevator.common.compose.theme - -import androidx.compose.material.MaterialTheme -import androidx.compose.runtime.Composable -import band.effective.office.elevator.common.compose.DarkMode -import band.effective.office.elevator.common.compose.theme.colors.defaultPalette - -@Composable -internal fun OfficeElevatorTheme( - content: @Composable () -> Unit -) { - val colors = if (DarkMode.current.value) { - defaultPalette - } else { - defaultPalette - } - MaterialTheme( - colors = colors - ) { - content() - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/theme/colors/Colors.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/theme/colors/Colors.kt deleted file mode 100644 index 144b88e07b8713bdc687012e8939d0a6536cead0..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/theme/colors/Colors.kt +++ /dev/null @@ -1,5 +0,0 @@ -package band.effective.office.elevator.common.compose.theme.colors - -import androidx.compose.ui.graphics.Color - -val unselectedColor = Color(0xFF949494) \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/theme/colors/Palettes.kt b/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/theme/colors/Palettes.kt deleted file mode 100644 index 44c0db1f222c5f24d639be404d2feb2c09b778d2..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band.effective.office.elevator.common.compose/theme/colors/Palettes.kt +++ /dev/null @@ -1,22 +0,0 @@ -package band.effective.office.elevator.common.compose.theme.colors - -import androidx.compose.material.lightColors -import androidx.compose.ui.graphics.Color - -internal val defaultPalette = lightColors( - primary = Color(255, 255, 255, 255), - secondary = Color(149, 99, 255, 255), - background = Color(0xFFF7F7F7), - onPrimary = Color.Black, - onSecondary = Color.Black, - onBackground = Color.Black -) - -internal val darkPalette = lightColors( - primary = Color(0xFF0000), - secondary = Color(149, 99, 255, 255), - background = Color(0xFF434040), - onPrimary = Color.LightGray, - onSecondary = Color.LightGray, - onBackground = Color.LightGray -) \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band/effective/office/elevator/common/compose/screens/login/GoogleAccountUser.kt b/mobile/shared/src/commonMain/kotlin/band/effective/office/elevator/common/compose/screens/login/GoogleAccountUser.kt deleted file mode 100644 index fc5e367aa3a7a7944568d9b6600aacbb3efe3aa0..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band/effective/office/elevator/common/compose/screens/login/GoogleAccountUser.kt +++ /dev/null @@ -1,7 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.login - -data class GoogleAccountUser( - val imageUrl: String?, - val username: String?, - val email: String? -) \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band/effective/office/elevator/common/compose/screens/login/GoogleAuthorization.kt b/mobile/shared/src/commonMain/kotlin/band/effective/office/elevator/common/compose/screens/login/GoogleAuthorization.kt deleted file mode 100644 index 01fc6fafd4515d613d6a3245496be9c52981c426..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band/effective/office/elevator/common/compose/screens/login/GoogleAuthorization.kt +++ /dev/null @@ -1,17 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.login - -expect object GoogleAuthorization { - var token: String? - fun signIn( - onSignInSuccess: () -> Unit, - onSignInFailure: (e: Exception) -> Unit - ) - - fun signOut() - suspend fun performWithFreshToken( - action: (token: String) -> Unit, - failure: (message: String) -> Unit - ) - - fun getAccount(): GoogleAccountUser -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/band/effective/office/elevator/common/compose/screens/login/LoginScreen.kt b/mobile/shared/src/commonMain/kotlin/band/effective/office/elevator/common/compose/screens/login/LoginScreen.kt deleted file mode 100644 index 2ad973bfcab339d3259f8f36e1cd2a49dbcdd398..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band/effective/office/elevator/common/compose/screens/login/LoginScreen.kt +++ /dev/null @@ -1,71 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.login - -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.* -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Button -import androidx.compose.material.ButtonDefaults -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.unit.dp -import band.effective.office.elevator.common.compose.expects.generateVibration -import band.effective.office.elevator.common.compose.expects.showToast -import band.effective.office.elevator.common.compose.imageResource -import cafe.adriel.voyager.core.model.rememberScreenModel -import cafe.adriel.voyager.core.screen.Screen -import kotlinx.coroutines.flow.collectLatest - -internal class LoginScreen(private val onSignInSuccess: () -> Unit) : Screen { - @Composable - override fun Content() { - val loginViewModel: LoginViewModel = rememberScreenModel { LoginViewModel() } - LoginScreenContent( - onSignInSuccess = onSignInSuccess, viewModel = loginViewModel - ) - } -} - -@Composable -internal fun LoginScreenContent(onSignInSuccess: () -> Unit, viewModel: LoginViewModel) { - LaunchedEffect(viewModel.effectState) { - viewModel.effectState.collectLatest { effect -> - when (effect) { - is LoginViewModel.Effect.SignInFailure -> showToast(effect.message) - LoginViewModel.Effect.SignInSuccess -> { - showToast("Successfully authorization") - generateVibration(300) - onSignInSuccess() - } - } - } - } - - Box(modifier = Modifier.fillMaxSize().padding(16.dp)) { - GoogleSignInButton(modifier = Modifier.align(Alignment.Center), onClick = { - viewModel.sendAction( - LoginViewModel.Action.SignIn - ) - }) - } -} - -@Composable -internal fun GoogleSignInButton(modifier: Modifier, onClick: () -> Unit) { - Button( - onClick = onClick, - modifier = modifier.fillMaxWidth(), - shape = RoundedCornerShape(6.dp), - colors = ButtonDefaults.buttonColors( - backgroundColor = Color.Black, contentColor = Color.White - ) - ) { - Image( - imageResource("google"), contentDescription = null, modifier = Modifier.size(32.dp) - ) - Text(text = "Sign in with Google", modifier = Modifier.padding(6.dp)) - } -} diff --git a/mobile/shared/src/commonMain/kotlin/band/effective/office/elevator/common/compose/screens/login/LoginViewModel.kt b/mobile/shared/src/commonMain/kotlin/band/effective/office/elevator/common/compose/screens/login/LoginViewModel.kt deleted file mode 100644 index 74a5bb62854f9c5063e68f356e53316c98c931ae..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/band/effective/office/elevator/common/compose/screens/login/LoginViewModel.kt +++ /dev/null @@ -1,46 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.login - -import cafe.adriel.voyager.core.model.ScreenModel -import cafe.adriel.voyager.core.model.coroutineScope -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.flow.debounce -import kotlinx.coroutines.launch - -internal class LoginViewModel : ScreenModel { - - sealed class Effect { - data class SignInFailure(val message: String) : Effect() - object SignInSuccess : Effect() - } - - sealed class Action { - object SignIn : Action() - } - - private val mutableEffectState = MutableSharedFlow() - val effectState = mutableEffectState.asSharedFlow() - - fun sendAction(action: Action) { - when (action) { - Action.SignIn -> GoogleAuthorization.signIn(onSignInSuccess = { - coroutineScope.launch { - mutableEffectState.emit( - Effect.SignInSuccess - ) - } - }, - onSignInFailure = { exception -> - coroutineScope.launch { - mutableEffectState.emit( - Effect.SignInFailure( - exception.message ?: "Something went wrong. Please try again later" - ) - ) - } - }) - } - } -} \ No newline at end of file diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/concurrent/AtomicInt32.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/concurrent/AtomicInt32.kt deleted file mode 100644 index dd5bdbd8987215b3fe264ee4da93bdfea20bf73e..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/concurrent/AtomicInt32.kt +++ /dev/null @@ -1,5 +0,0 @@ -package cafe.adriel.voyager.core.concurrent - -expect class AtomicInt32(initialValue: Int) { - public fun getAndIncrement(): Int -} diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeList.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeList.kt deleted file mode 100644 index 72bb5330d9d1ef9b337b936cd094fed93ad3736b..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeList.kt +++ /dev/null @@ -1,3 +0,0 @@ -package cafe.adriel.voyager.core.concurrent - -internal expect class ThreadSafeList() : MutableList diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeMap.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeMap.kt deleted file mode 100644 index e9d7c5404824bf80e9c92bd8f4a4c7586cdb550b..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeMap.kt +++ /dev/null @@ -1,3 +0,0 @@ -package cafe.adriel.voyager.core.concurrent - -internal expect class ThreadSafeMap() : MutableMap diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeSet.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeSet.kt deleted file mode 100644 index c22c9867380bd8d2fc3630dac587e9f2435bcd64..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/concurrent/ThreadSafeSet.kt +++ /dev/null @@ -1,3 +0,0 @@ -package cafe.adriel.voyager.core.concurrent - -internal expect class ThreadSafeSet() : MutableSet diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/ConfigurationChecker.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/ConfigurationChecker.kt deleted file mode 100644 index 4a7b2d6663b2ab6319a38428b1d3a2b5202f1a74..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/ConfigurationChecker.kt +++ /dev/null @@ -1,14 +0,0 @@ -package cafe.adriel.voyager.core.lifecycle - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.NonRestartableComposable -import androidx.compose.runtime.Stable - -@Composable -@NonRestartableComposable -internal expect fun getConfigurationChecker(): ConfigurationChecker - -@Stable -internal expect class ConfigurationChecker { - fun isChangingConfigurations(): Boolean -} diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/DisposableEffect.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/DisposableEffect.kt deleted file mode 100644 index ecd397257642449101e50bfec61367674b3a28d6..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/DisposableEffect.kt +++ /dev/null @@ -1,78 +0,0 @@ -package cafe.adriel.voyager.core.lifecycle - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffectResult -import androidx.compose.runtime.DisposableEffectScope -import androidx.compose.runtime.NonRestartableComposable -import androidx.compose.runtime.RememberObserver -import androidx.compose.runtime.remember - -@Composable -@NonRestartableComposable -internal fun DisposableEffectIgnoringConfiguration( - key1: Any?, - effect: DisposableEffectScope.() -> DisposableEffectResult -) { - val configurationChecker = getConfigurationChecker() - remember(configurationChecker, key1) { DisposableEffectIgnoringConfigurationImpl(configurationChecker, effect) } -} - -@Composable -@NonRestartableComposable -internal fun DisposableEffectIgnoringConfiguration( - key1: Any?, - key2: Any?, - effect: DisposableEffectScope.() -> DisposableEffectResult -) { - val configurationChecker = getConfigurationChecker() - remember(configurationChecker, key1, key2) { - DisposableEffectIgnoringConfigurationImpl(configurationChecker, effect) - } -} - -@Composable -@NonRestartableComposable -internal fun DisposableEffectIgnoringConfiguration( - key1: Any?, - key2: Any?, - key3: Any?, - effect: DisposableEffectScope.() -> DisposableEffectResult -) { - val configurationChecker = getConfigurationChecker() - remember(configurationChecker, key1, key2, key3) { - DisposableEffectIgnoringConfigurationImpl(configurationChecker, effect) - } -} - -@Composable -@NonRestartableComposable -@Suppress("ArrayReturn") -internal fun DisposableEffectIgnoringConfiguration( - vararg keys: Any?, - effect: DisposableEffectScope.() -> DisposableEffectResult -) { - val configurationChecker = getConfigurationChecker() - remember(configurationChecker, *keys) { DisposableEffectIgnoringConfigurationImpl(configurationChecker, effect) } -} - -private val InternalDisposableEffectScope = DisposableEffectScope() - -private class DisposableEffectIgnoringConfigurationImpl( - private val configurationChecker: ConfigurationChecker, - private val effect: DisposableEffectScope.() -> DisposableEffectResult -) : RememberObserver { - private var onDispose: DisposableEffectResult? = null - - override fun onRemembered() { - onDispose = InternalDisposableEffectScope.effect() - } - - override fun onForgotten() { - onDispose?.takeUnless { configurationChecker.isChangingConfigurations() }?.dispose() - onDispose = null - } - - override fun onAbandoned() { - // Nothing to do as [onRemembered] was not called. - } -} diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/ScreenLifecycle.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/ScreenLifecycle.kt deleted file mode 100644 index b992664ef42fc469c55693f5690f3ccfa28fab6c..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/ScreenLifecycle.kt +++ /dev/null @@ -1,33 +0,0 @@ -package cafe.adriel.voyager.core.lifecycle - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.remember -import cafe.adriel.voyager.core.screen.Screen - -@Composable -internal fun Screen.LifecycleEffect( - onStarted: () -> Unit = {}, - onDisposed: () -> Unit = {} -) { - DisposableEffect(key) { - onStarted() - onDispose(onDisposed) - } -} - -@Composable -internal fun rememberScreenLifecycleOwner( - screen: Screen -): ScreenLifecycleOwner = - remember(screen.key) { - when (screen) { - is ScreenLifecycleProvider -> screen.getLifecycleOwner() - else -> DefaultScreenLifecycleOwner - } - } - -internal interface ScreenLifecycleProvider { - - fun getLifecycleOwner(): ScreenLifecycleOwner -} diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner.kt deleted file mode 100644 index ead7168af35fabe054eaac4c0602e03580bb8c2e..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/ScreenLifecycleOwner.kt +++ /dev/null @@ -1,16 +0,0 @@ -package cafe.adriel.voyager.core.lifecycle - -import androidx.compose.runtime.Composable -import cafe.adriel.voyager.core.screen.Screen - -internal interface ScreenLifecycleOwner { - @Composable - public fun ProvideBeforeScreenContent( - provideSaveableState: @Composable (suffixKey: String, content: @Composable () -> Unit) -> Unit, - content: @Composable () -> Unit - ): Unit = content() - - fun onDispose(screen: Screen) {} -} - -internal object DefaultScreenLifecycleOwner : ScreenLifecycleOwner diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore.kt deleted file mode 100644 index 12940f1fec30946ef2bc0a7b1d807bf80eed7e4d..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/ScreenLifecycleStore.kt +++ /dev/null @@ -1,20 +0,0 @@ -package cafe.adriel.voyager.core.lifecycle - -import cafe.adriel.voyager.core.concurrent.ThreadSafeMap -import cafe.adriel.voyager.core.screen.Screen -import cafe.adriel.voyager.core.screen.ScreenKey - -internal object ScreenLifecycleStore { - - private val owners = ThreadSafeMap() - - public fun get( - screen: Screen, - factory: (ScreenKey) -> ScreenLifecycleOwner - ): ScreenLifecycleOwner = - owners.getOrPut(screen.key) { factory(screen.key) } - - public fun remove(screen: Screen) { - owners.remove(screen.key)?.onDispose(screen) - } -} diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/Serializable.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/Serializable.kt deleted file mode 100644 index 5be73846fbed979595cba4e5f812c99cf367ad5d..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/lifecycle/Serializable.kt +++ /dev/null @@ -1,10 +0,0 @@ -package cafe.adriel.voyager.core.lifecycle - -/** - * Multiplatform reference to Java `Serializable` interface. - * - * Any object that will be pass to a Screen as parameter, on Android target, requires to be serializable in a - * Bundle, so if your project is multiplatform and targeting Android, to prevent State Restoration issues on Android - * the easiest way is to apply this interface to your Models. - */ -internal expect interface JavaSerializable diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/model/ScreenModel.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/model/ScreenModel.kt deleted file mode 100644 index 28cf3fe875e541ef3ae745d7486910681d0974e6..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/model/ScreenModel.kt +++ /dev/null @@ -1,42 +0,0 @@ -package cafe.adriel.voyager.core.model - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisallowComposableCalls -import androidx.compose.runtime.remember -import cafe.adriel.voyager.core.screen.Screen -import kotlinx.coroutines.CoroutineName -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.MainScope -import kotlinx.coroutines.cancel -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.plus - -internal val ScreenModel.coroutineScope: CoroutineScope - get() = ScreenModelStore.getOrPutDependency( - screenModel = this, - name = "ScreenModelCoroutineScope", - factory = { key -> MainScope() + CoroutineName(key) }, - onDispose = { scope -> scope.cancel() } - ) - -@Composable -internal inline fun Screen.rememberScreenModel( - tag: String? = null, - crossinline factory: @DisallowComposableCalls () -> T -): T = - remember(ScreenModelStore.getKey(this, tag)) { - ScreenModelStore.getOrPut(this, tag, factory) - } - -internal interface ScreenModel { - - public fun onDispose() {} -} - -internal abstract class StateScreenModel(initialState: S) : ScreenModel { - - protected val mutableState: MutableStateFlow = MutableStateFlow(initialState) - public val state: StateFlow = mutableState.asStateFlow() -} diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/model/ScreenModelStore.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/model/ScreenModelStore.kt deleted file mode 100644 index 41ae805b92cfd1ac915bdd234244bb2defe0224e..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/model/ScreenModelStore.kt +++ /dev/null @@ -1,84 +0,0 @@ -package cafe.adriel.voyager.core.model - -import androidx.compose.runtime.DisallowComposableCalls -import cafe.adriel.voyager.core.concurrent.ThreadSafeMap -import cafe.adriel.voyager.core.platform.multiplatformName -import cafe.adriel.voyager.core.screen.Screen -import kotlinx.coroutines.flow.MutableStateFlow - -private typealias ScreenModelKey = String - -private typealias DependencyKey = String -private typealias DependencyInstance = Any -private typealias DependencyOnDispose = (Any) -> Unit -private typealias Dependency = Pair - -internal object ScreenModelStore { - - @PublishedApi - internal val screenModels: MutableMap = ThreadSafeMap() - - @PublishedApi - internal val dependencies: MutableMap = ThreadSafeMap() - - @PublishedApi - internal val lastScreenModelKey: MutableStateFlow = MutableStateFlow(null) - - internal inline fun getKey( - screen: Screen, - tag: String? - ): ScreenModelKey = - "${screen.key}:${T::class.multiplatformName}:${tag ?: "default"}" - - @PublishedApi - internal fun getDependencyKey(screenModel: ScreenModel, name: String): DependencyKey = - screenModels - .firstNotNullOfOrNull { - if (it.value == screenModel) it.key - else null - } - ?: lastScreenModelKey.value - ?.let { "$it:$name" } - ?: "standalone:$name" - - internal inline fun getOrPut( - screen: Screen, - tag: String?, - factory: @DisallowComposableCalls () -> T - ): T { - val key = getKey(screen, tag) - lastScreenModelKey.value = key - return screenModels.getOrPut(key, factory) as T - } - - internal inline fun getOrPutDependency( - screenModel: ScreenModel, - name: String, - noinline onDispose: @DisallowComposableCalls (T) -> Unit = {}, - noinline factory: @DisallowComposableCalls (DependencyKey) -> T - ): T { - val key = getDependencyKey(screenModel, name) - - return dependencies - .getOrPut(key) { (factory(key) to onDispose) as Dependency } - .first as T - } - - internal fun remove(screen: Screen) { - screenModels.onEach(screen) { key -> - screenModels[key]?.onDispose() - screenModels -= key - } - - dependencies.onEach(screen) { key -> - dependencies[key]?.let { (instance, onDispose) -> onDispose(instance) } - dependencies -= key - } - } - - private fun Map.onEach(screen: Screen, block: (String) -> Unit) = - asSequence() - .filter { it.key.startsWith(screen.key) } - .map { it.key } - .forEach(block) -} diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/platform/KClassEx.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/platform/KClassEx.kt deleted file mode 100644 index beaac758c3e636357c996a440697eeeeba4c54ff..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/platform/KClassEx.kt +++ /dev/null @@ -1,5 +0,0 @@ -package cafe.adriel.voyager.core.platform - -import kotlin.reflect.KClass - -internal expect val KClass<*>.multiplatformName: String? diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/registry/ScreenModule.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/registry/ScreenModule.kt deleted file mode 100644 index 09d7cf913fdd74acac0c00d4faff68e2f5d8a94f..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/registry/ScreenModule.kt +++ /dev/null @@ -1,6 +0,0 @@ -package cafe.adriel.voyager.core.registry - -private typealias ScreenModule = ScreenRegistry.() -> Unit - -internal fun screenModule(block: ScreenModule): ScreenModule = - { block() } diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/registry/ScreenProvider.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/registry/ScreenProvider.kt deleted file mode 100644 index be1be5447206307be77e6cc7888f2aed9ef49cac..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/registry/ScreenProvider.kt +++ /dev/null @@ -1,13 +0,0 @@ -package cafe.adriel.voyager.core.registry - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import cafe.adriel.voyager.core.screen.Screen - -@Composable -internal inline fun rememberScreen(provider: T): Screen = - remember(provider) { - ScreenRegistry.get(provider) - } - -internal interface ScreenProvider diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/registry/ScreenRegistry.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/registry/ScreenRegistry.kt deleted file mode 100644 index f5f6038b7fc7d06418d515d7b5948a633834f815..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/registry/ScreenRegistry.kt +++ /dev/null @@ -1,30 +0,0 @@ -package cafe.adriel.voyager.core.registry - -import cafe.adriel.voyager.core.concurrent.ThreadSafeMap -import cafe.adriel.voyager.core.platform.multiplatformName -import cafe.adriel.voyager.core.screen.Screen -import kotlin.reflect.KClass - -private typealias ProviderKey = KClass - -private typealias ScreenFactory = (ScreenProvider) -> Screen - -internal object ScreenRegistry { - - @PublishedApi - internal val factories: ThreadSafeMap = ThreadSafeMap() - - public operator fun invoke(block: ScreenRegistry.() -> Unit) { - this.block() - } - - internal inline fun register(noinline factory: (T) -> Screen) { - factories[T::class] = factory as ScreenFactory - } - - internal fun get(provider: ScreenProvider): Screen { - val factory = factories[provider::class] - ?: error("ScreenProvider not registered: ${provider::class.multiplatformName}") - return factory(provider) - } -} diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/screen/Screen.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/screen/Screen.kt deleted file mode 100644 index 0b2554bb14e8e4d33bda7a7e58c00a6b0c9a553d..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/screen/Screen.kt +++ /dev/null @@ -1,17 +0,0 @@ -package cafe.adriel.voyager.core.screen - -import androidx.compose.runtime.Composable -import cafe.adriel.voyager.core.platform.multiplatformName - -internal expect interface Screen { - - open val key: ScreenKey - - @Composable - fun Content() -} - - -internal fun Screen.commonKeyGeneration() = - this::class.multiplatformName - ?: error("Default ScreenKey not found, please provide your own key") diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/screen/ScreenKey.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/screen/ScreenKey.kt deleted file mode 100644 index 263d170935f48efd98cbad2763d7a453ea52a34e..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/screen/ScreenKey.kt +++ /dev/null @@ -1,10 +0,0 @@ -package cafe.adriel.voyager.core.screen - -import cafe.adriel.voyager.core.concurrent.AtomicInt32 - -internal typealias ScreenKey = String - -private val nextScreenKey = AtomicInt32(0) - -internal val Screen.uniqueScreenKey: ScreenKey - get() = "Screen#${nextScreenKey.getAndIncrement()}" diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/stack/SnapshotStateStack.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/stack/SnapshotStateStack.kt deleted file mode 100644 index 5965bcb647fae7b505d23348f0552b8f58677518..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/stack/SnapshotStateStack.kt +++ /dev/null @@ -1,155 +0,0 @@ -package cafe.adriel.voyager.core.stack - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.derivedStateOf -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.neverEqualPolicy -import androidx.compose.runtime.saveable.Saver -import androidx.compose.runtime.saveable.listSaver -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.runtime.snapshots.SnapshotStateList -import androidx.compose.runtime.toMutableStateList - -internal fun List.toMutableStateStack( - minSize: Int = 0 -): SnapshotStateStack = - SnapshotStateStack(this, minSize) - -internal fun mutableStateStackOf( - vararg items: Item, - minSize: Int = 0 -): SnapshotStateStack = - SnapshotStateStack(*items, minSize = minSize) - - - -internal fun stackSaver( - minSize: Int -): Saver, Any> = - listSaver( - save = { stack -> stack.items }, - restore = { items -> SnapshotStateStack(items, minSize) } - ) - -internal class SnapshotStateStack( - items: List, - minSize: Int = 0 -) : Stack { - - public constructor( - vararg items: Item, - minSize: Int = 0 - ) : this( - items = items.toList(), - minSize = minSize - ) - - init { - require(minSize >= 0) { "Min size $minSize is less than zero" } - require(items.size >= minSize) { "Stack size ${items.size} is less than the min size $minSize" } - } - - @PublishedApi - internal val stateStack: SnapshotStateList = items.toMutableStateList() - - public override var lastEvent: StackEvent by mutableStateOf(StackEvent.Idle, neverEqualPolicy()) - private set - - public override val items: List by derivedStateOf { - stateStack.toList() - } - - public override val lastItemOrNull: Item? by derivedStateOf { - stateStack.lastOrNull() - } - - public override val lastOrNull: Item? by derivedStateOf { - lastItemOrNull - } - - public override val size: Int by derivedStateOf { - stateStack.size - } - - public override val isEmpty: Boolean by derivedStateOf { - stateStack.isEmpty() - } - - public override val canPop: Boolean by derivedStateOf { - stateStack.size > minSize - } - - public override infix fun push(item: Item) { - stateStack += item - lastEvent = StackEvent.Push - } - - public override infix fun push(items: List) { - stateStack += items - lastEvent = StackEvent.Push - } - - public override infix fun replace(item: Item) { - if (stateStack.isEmpty()) push(item) - else stateStack[stateStack.lastIndex] = item - lastEvent = StackEvent.Replace - } - - public override infix fun replaceAll(item: Item) { - stateStack.clear() - stateStack += item - lastEvent = StackEvent.Replace - } - - public override infix fun replaceAll(items: List) { - stateStack.clear() - stateStack += items - lastEvent = StackEvent.Replace - } - - public override fun pop(): Boolean = - if (canPop) { - stateStack.removeLast() - lastEvent = StackEvent.Pop - true - } else { - false - } - - public override fun popAll() { - popUntil { false } - } - - public override infix fun popUntil(predicate: (Item) -> Boolean): Boolean { - var success = false - val shouldPop = { - lastItemOrNull - ?.let(predicate) - ?.also { success = it } - ?.not() - ?: false - } - - while (canPop && shouldPop()) { - stateStack.removeLast() - } - - lastEvent = StackEvent.Pop - - return success - } - - public override operator fun plusAssign(item: Item) { - push(item) - } - - public override operator fun plusAssign(items: List) { - push(items) - } - - override fun clearEvent() { - lastEvent = StackEvent.Idle - } -} diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/stack/Stack.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/stack/Stack.kt deleted file mode 100644 index 5ae858be6e2a07f8e1da3c3f485d4ad9ac730c0a..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/core/stack/Stack.kt +++ /dev/null @@ -1,54 +0,0 @@ -package cafe.adriel.voyager.core.stack - -internal inline fun Stack.popUntil(): Boolean = - popUntil { item -> item is I } - -internal enum class StackEvent { - Push, - Replace, - Pop, - Idle -} - -internal interface Stack { - - public val items: List - - public val lastEvent: StackEvent - - public val lastItemOrNull: Item? - - @Deprecated( - message = "Use 'lastItemOrNull' instead. Will be removed in 1.0.0.", - replaceWith = ReplaceWith("lastItemOrNull") - ) - public val lastOrNull: Item? - - public val size: Int - - public val isEmpty: Boolean - - public val canPop: Boolean - - public infix fun push(item: Item) - - public infix fun push(items: List) - - public infix fun replace(item: Item) - - public infix fun replaceAll(item: Item) - - public infix fun replaceAll(items: List) - - public fun pop(): Boolean - - public fun popAll() - - public infix fun popUntil(predicate: (Item) -> Boolean): Boolean - - public operator fun plusAssign(item: Item) - - public operator fun plusAssign(items: List) - - public fun clearEvent() -} diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/navigator/Navigator.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/navigator/Navigator.kt deleted file mode 100644 index 2fa116fb3d31c0eeef6a2f81876da933caa194e7..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/navigator/Navigator.kt +++ /dev/null @@ -1,171 +0,0 @@ -package cafe.adriel.voyager.navigator - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.ProvidableCompositionLocal -import androidx.compose.runtime.derivedStateOf -import androidx.compose.runtime.getValue -import androidx.compose.runtime.saveable.SaveableStateHolder -import androidx.compose.runtime.saveable.rememberSaveableStateHolder -import androidx.compose.runtime.staticCompositionLocalOf -import cafe.adriel.voyager.core.concurrent.ThreadSafeSet -import cafe.adriel.voyager.core.lifecycle.ScreenLifecycleStore -import cafe.adriel.voyager.core.lifecycle.rememberScreenLifecycleOwner -import cafe.adriel.voyager.core.model.ScreenModelStore -import cafe.adriel.voyager.core.screen.Screen -import cafe.adriel.voyager.core.stack.Stack -import cafe.adriel.voyager.core.stack.toMutableStateStack -import cafe.adriel.voyager.navigator.internal.LocalNavigatorStateHolder -import cafe.adriel.voyager.navigator.internal.NavigatorBackHandler -import cafe.adriel.voyager.navigator.internal.NavigatorDisposableEffect -import cafe.adriel.voyager.navigator.internal.StepDisposableEffect -import cafe.adriel.voyager.navigator.internal.rememberNavigator - -internal typealias NavigatorContent = @Composable (navigator: Navigator) -> Unit - -internal typealias OnBackPressed = ((currentScreen: Screen) -> Boolean)? - -internal val LocalNavigator: ProvidableCompositionLocal = - staticCompositionLocalOf { null } - -internal val ProvidableCompositionLocal.currentOrThrow: T - @Composable - get() = current ?: error("CompositionLocal is null") - -@Composable -internal fun CurrentScreen() { - val navigator = LocalNavigator.currentOrThrow - val currentScreen = navigator.lastItem - - navigator.saveableState("currentScreen") { - currentScreen.Content() - } -} - -@Composable -internal fun Navigator( - screen: Screen, - disposeBehavior: NavigatorDisposeBehavior = NavigatorDisposeBehavior(), - onBackPressed: OnBackPressed = { true }, - content: NavigatorContent = { CurrentScreen() } -) { - Navigator( - screens = listOf(screen), - disposeBehavior = disposeBehavior, - onBackPressed = onBackPressed, - content = content - ) -} - -@Composable -internal fun Navigator( - screens: List, - disposeBehavior: NavigatorDisposeBehavior = NavigatorDisposeBehavior(), - onBackPressed: OnBackPressed = { true }, - content: NavigatorContent = { CurrentScreen() } -) { - require(screens.isNotEmpty()) { "Navigator must have at least one screen" } - - CompositionLocalProvider( - LocalNavigatorStateHolder providesDefault rememberSaveableStateHolder() - ) { - val navigator = rememberNavigator(screens, disposeBehavior, LocalNavigator.current) - - if (navigator.parent?.disposeBehavior?.disposeNestedNavigators != false) { - NavigatorDisposableEffect(navigator) - } - - CompositionLocalProvider( - LocalNavigator provides navigator, - ) { - if (disposeBehavior.disposeSteps) { - StepDisposableEffect(navigator) - } - - NavigatorBackHandler(navigator, onBackPressed) - - content(navigator) - } - } -} - -internal class Navigator internal constructor( - screens: List, - private val stateHolder: SaveableStateHolder, - public val disposeBehavior: NavigatorDisposeBehavior, - public val parent: Navigator? = null -) : Stack by screens.toMutableStateStack(minSize = 1) { - - public val level: Int = - parent?.level?.inc() ?: 0 - - internal val lastItem: Screen by derivedStateOf { - lastItemOrNull ?: error("Navigator has no screen") - } - - private val stateKeys = ThreadSafeSet() - - @Deprecated( - message = "Use 'lastItem' instead. Will be removed in 1.0.0.", - replaceWith = ReplaceWith("lastItem") - ) - internal val last: Screen by derivedStateOf { - lastItem - } - - @Composable - internal fun saveableState( - key: String, - screen: Screen = lastItem, - content: @Composable () -> Unit - ) { - val stateKey = "${screen.key}:$key" - stateKeys += stateKey - - @Composable - fun provideSaveableState(suffixKey: String, content: @Composable () -> Unit) { - val providedStateKey = "$stateKey:$suffixKey" - stateKeys += providedStateKey - stateHolder.SaveableStateProvider(providedStateKey, content) - } - - val lifecycleOwner = rememberScreenLifecycleOwner(screen) - lifecycleOwner.ProvideBeforeScreenContent( - provideSaveableState = { suffix, content -> provideSaveableState(suffix, content) }, - content = { - stateHolder.SaveableStateProvider(stateKey, content) - } - ) - } - - public fun popUntilRoot() { - popUntilRoot(this) - } - - private tailrec fun popUntilRoot(navigator: Navigator) { - navigator.popAll() - - if (navigator.parent != null) { - popUntilRoot(navigator.parent) - } - } - - internal fun dispose( - screen: Screen - ) { - ScreenModelStore.remove(screen) - ScreenLifecycleStore.remove(screen) - stateKeys - .asSequence() - .filter { it.startsWith(screen.key) } - .forEach { key -> - stateHolder.removeState(key) - stateKeys -= key - } - } -} - -internal data class NavigatorDisposeBehavior( - val disposeNestedNavigators: Boolean = true, - val disposeSteps: Boolean = true, -) diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/navigator/internal/NavigatorBackHandler.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/navigator/internal/NavigatorBackHandler.kt deleted file mode 100644 index 6eca94e99664ca670fb0fa4d2c395fd22fed52b3..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/navigator/internal/NavigatorBackHandler.kt +++ /dev/null @@ -1,27 +0,0 @@ -package cafe.adriel.voyager.navigator.internal - -import androidx.compose.runtime.Composable -import cafe.adriel.voyager.navigator.Navigator -import cafe.adriel.voyager.navigator.OnBackPressed - -@Composable -internal expect fun BackHandler(enabled: Boolean, onBack: () -> Unit) - -@Composable -internal fun NavigatorBackHandler( - navigator: Navigator, - onBackPressed: OnBackPressed -) { - if (onBackPressed != null) { - BackHandler( - enabled = navigator.canPop || navigator.parent?.canPop ?: false, - onBack = { - if (onBackPressed(navigator.lastItem)) { - if (navigator.pop().not()) { - navigator.parent?.pop() - } - } - } - ) - } -} diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/navigator/internal/NavigatorDisposable.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/navigator/internal/NavigatorDisposable.kt deleted file mode 100644 index 1d2ceb561a9d460869454f233fb0c55b1bcb8450..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/navigator/internal/NavigatorDisposable.kt +++ /dev/null @@ -1,43 +0,0 @@ -package cafe.adriel.voyager.navigator.internal - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect -import cafe.adriel.voyager.core.lifecycle.DisposableEffectIgnoringConfiguration -import cafe.adriel.voyager.core.stack.StackEvent -import cafe.adriel.voyager.navigator.Navigator - -private val disposableEvents: Set = - setOf(StackEvent.Pop, StackEvent.Replace) - -@Composable -internal fun NavigatorDisposableEffect( - navigator: Navigator -) { - DisposableEffectIgnoringConfiguration(navigator) { - onDispose { - for (screen in navigator.items) { - navigator.dispose(screen) - } - navigator.clearEvent() - } - } -} - -@Composable -internal fun StepDisposableEffect( - navigator: Navigator -) { - val currentScreens = navigator.items - - DisposableEffect(currentScreens) { - onDispose { - val newScreenKeys = navigator.items.map { it.key } - if (navigator.lastEvent in disposableEvents) { - currentScreens.filter { it.key !in newScreenKeys }.forEach { - navigator.dispose(it) - } - navigator.clearEvent() - } - } - } -} diff --git a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/navigator/internal/NavigatorSaver.kt b/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/navigator/internal/NavigatorSaver.kt deleted file mode 100644 index d5ca309e34b0ce6bb3fb638cf0dc01b505a783c9..0000000000000000000000000000000000000000 --- a/mobile/shared/src/commonMain/kotlin/cafe/adriel/voyager/navigator/internal/NavigatorSaver.kt +++ /dev/null @@ -1,38 +0,0 @@ -package cafe.adriel.voyager.navigator.internal - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.ProvidableCompositionLocal -import androidx.compose.runtime.saveable.SaveableStateHolder -import androidx.compose.runtime.saveable.Saver -import androidx.compose.runtime.saveable.listSaver -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.staticCompositionLocalOf -import cafe.adriel.voyager.core.screen.Screen -import cafe.adriel.voyager.navigator.Navigator -import cafe.adriel.voyager.navigator.NavigatorDisposeBehavior - -internal val LocalNavigatorStateHolder: ProvidableCompositionLocal = - staticCompositionLocalOf { error("LocalNavigatorStateHolder not initialized") } - -@Composable -internal fun rememberNavigator( - screens: List, - disposeBehavior: NavigatorDisposeBehavior, - parent: Navigator? -): Navigator { - val stateHolder = LocalNavigatorStateHolder.current - - return rememberSaveable(saver = navigatorSaver(stateHolder, disposeBehavior, parent)) { - Navigator(screens, stateHolder, disposeBehavior, parent) - } -} - -private fun navigatorSaver( - stateHolder: SaveableStateHolder, - disposeBehavior: NavigatorDisposeBehavior, - parent: Navigator? -): Saver = - listSaver( - save = { navigator -> navigator.items }, - restore = { items -> Navigator(items, stateHolder, disposeBehavior, parent) } - ) diff --git a/mobile/shared/src/iosMain/kotlin/band.effective.office.elevator.common.compose.helpers/BaseUrl.kt b/mobile/shared/src/iosMain/kotlin/band.effective.office.elevator.common.compose.helpers/BaseUrl.kt deleted file mode 100644 index e4641f2df26cc5582bfe8fc09cffefa1a7fcc361..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/band.effective.office.elevator.common.compose.helpers/BaseUrl.kt +++ /dev/null @@ -1,3 +0,0 @@ -package band.effective.office.elevator.common.compose.helpers - -actual val BaseUrl: String = "0.0.0.0" \ No newline at end of file diff --git a/mobile/shared/src/iosMain/kotlin/band.effective.office.elevator.common.compose/Resources.kt b/mobile/shared/src/iosMain/kotlin/band.effective.office.elevator.common.compose/Resources.kt deleted file mode 100644 index ff85637edc7d530cf9d25e58902900da69f2736b..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/band.effective.office.elevator.common.compose/Resources.kt +++ /dev/null @@ -1,24 +0,0 @@ -package band.effective.office.elevator.common.compose - -import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.ImageBitmap -import androidx.compose.ui.graphics.toComposeImageBitmap -import kotlinx.cinterop.addressOf -import kotlinx.cinterop.usePinned -import platform.UIKit.UIImage -import platform.UIKit.UIImagePNGRepresentation -import platform.posix.memcpy - -@Composable -internal actual fun imageResource(id: String): ImageBitmap { - // TODO: maybe use something more efficient - // TODO: maybe https://github.com/touchlab/DroidconKotlin/blob/main/shared-ui/src/iosMain/kotlin/co/touchlab/droidcon/ui/util/ToSkiaImage.kt - val image = UIImage.imageNamed(id)!! - val data = UIImagePNGRepresentation(image)!! - val byteArray = ByteArray(data.length.toInt()).apply { - usePinned { - memcpy(it.addressOf(0), data.bytes, data.length) - } - } - return org.jetbrains.skia.Image.makeFromEncoded(byteArray).toComposeImageBitmap() -} diff --git a/mobile/shared/src/iosMain/kotlin/band.effective.office.elevator.common.compose/RootViewControllers.kt b/mobile/shared/src/iosMain/kotlin/band.effective.office.elevator.common.compose/RootViewControllers.kt deleted file mode 100644 index ae07413af03ea9f9e0eef416aef783b5fe7fe95a..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/band.effective.office.elevator.common.compose/RootViewControllers.kt +++ /dev/null @@ -1,21 +0,0 @@ -package band.effective.office.elevator.common.compose - -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.ComposeUIViewController -import org.jetbrains.skiko.SystemTheme -import org.jetbrains.skiko.currentSystemTheme -import platform.CoreGraphics.CGFloat -import platform.UIKit.UIViewController - -fun RootViewController(): UIViewController { - return ComposeUIViewController { Content() } -} - -fun setSafeArea(start: CGFloat, top: CGFloat, end: CGFloat, bottom: CGFloat) { - safeAreaState.value = PaddingValues(start.dp, top.dp, end.dp, bottom.dp) -} - -fun setDarkMode() { - darkmodeState.value = currentSystemTheme == SystemTheme.DARK -} \ No newline at end of file diff --git a/mobile/shared/src/iosMain/kotlin/band/effective/office/elevator/common/compose/expects/ImageVector.kt b/mobile/shared/src/iosMain/kotlin/band/effective/office/elevator/common/compose/expects/ImageVector.kt deleted file mode 100644 index 1d349a7a2fc7e2b327990ed595efceacca39fbd8..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/band/effective/office/elevator/common/compose/expects/ImageVector.kt +++ /dev/null @@ -1,17 +0,0 @@ -package band.effective.office.elevator.common.compose.expects - -import androidx.compose.foundation.Image -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.ColorFilter -import band.effective.office.elevator.common.compose.imageResource - -@Composable -internal actual fun ImageVector(id: String, modifier: Modifier, tint: Color?) { - Image( - bitmap = imageResource(id), - contentDescription = null, - colorFilter = if (tint != null) ColorFilter.tint(tint) else null - ) -} \ No newline at end of file diff --git a/mobile/shared/src/iosMain/kotlin/band/effective/office/elevator/common/compose/expects/PlatformExpects.kt b/mobile/shared/src/iosMain/kotlin/band/effective/office/elevator/common/compose/expects/PlatformExpects.kt deleted file mode 100644 index f82189aeef024e7e9ccac96c4549354ca7ab50b1..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/band/effective/office/elevator/common/compose/expects/PlatformExpects.kt +++ /dev/null @@ -1,13 +0,0 @@ -package band.effective.office.elevator.common.compose.expects - -import platform.AudioToolbox.AudioServicesPlaySystemSound -import platform.AudioToolbox.kSystemSoundID_Vibrate -import platform.UIKit.UIAlertView - -actual fun showToast(message: String) { - UIAlertView(null, message, null, "OK", null).show() -} - -actual fun generateVibration(milliseconds: Long) { -// AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) -} \ No newline at end of file diff --git a/mobile/shared/src/iosMain/kotlin/band/effective/office/elevator/common/compose/screens/login/GoogleAuthorization.kt b/mobile/shared/src/iosMain/kotlin/band/effective/office/elevator/common/compose/screens/login/GoogleAuthorization.kt deleted file mode 100644 index c4af39d0168168379482a91b3ff8a6c3c46573bf..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/band/effective/office/elevator/common/compose/screens/login/GoogleAuthorization.kt +++ /dev/null @@ -1,72 +0,0 @@ -package band.effective.office.elevator.common.compose.screens.login - -import band.effective.office.elevator.BuildKonfig -import io.github.aakira.napier.Napier - -actual object GoogleAuthorization { - - private const val TAG = "GoogleAuthorization" - - private lateinit var signInCallback: () -> Unit - private lateinit var signOutCallback: () -> Unit - private lateinit var getLastSignedAccountCallback: () -> Unit - - lateinit var onSignInSuccess: () -> Unit - lateinit var onSignInFailure: (e: Exception) -> Unit - - lateinit var googleAccountUser: GoogleAccountUser - - actual var token: String? = null - set(value) { - field = if (value?.isNotBlank() == true) value else null - } - - actual fun signIn( - onSignInSuccess: () -> Unit, onSignInFailure: (e: Exception) -> Unit - ) { - this.onSignInSuccess = onSignInSuccess - this.onSignInFailure = onSignInFailure - signInCallback() - } - - actual fun signOut() { - this.token = null - this.signOutCallback() - } - - actual suspend fun performWithFreshToken( - action: (token: String) -> Unit, failure: (message: String) -> Unit - ) { - try { - getLastSignedAccountCallback() - token?.let { action(it) } ?: failure("Something went wrong. Please try again") - } catch (e: Exception) { - Napier.d( - tag = TAG, message = "PerformWithFreshToken cause error", throwable = e - ) - e.message?.let { failure(it) } - } - } - - fun setSignIn(callback: () -> Unit) { - this.signInCallback = callback - } - - fun signOut(callback: () -> Unit) { - this.signOutCallback = callback - } - - fun setLastSignedAccount(callback: () -> Unit) { - this.getLastSignedAccountCallback = callback - } - - fun getClientId(): String = "726357293621-hegk0410bsb1a5hvl3ihpc4d2bfkmlgb.apps.googleusercontent.com" - - fun getServerClientId(): String { - return BuildKonfig.webClient - } - - actual fun getAccount(): GoogleAccountUser { - return googleAccountUser - } -} \ No newline at end of file diff --git a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/concurrent/AtomicInt32.native.kt b/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/concurrent/AtomicInt32.native.kt deleted file mode 100644 index bc33f0da013803d03d1e08b1091eb1f758c7010e..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/concurrent/AtomicInt32.native.kt +++ /dev/null @@ -1,10 +0,0 @@ -package cafe.adriel.voyager.core.concurrent - -import kotlinx.atomicfu.atomic - -actual class AtomicInt32 actual constructor(initialValue: Int) { - private val delegate = atomic(initialValue) - public actual fun getAndIncrement(): Int { - return delegate.incrementAndGet() - } -} diff --git a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/concurrent/ThreadSafeList.native.kt b/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/concurrent/ThreadSafeList.native.kt deleted file mode 100644 index 41eec59f74b3fef2d3342dc4677146bd15308265..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/concurrent/ThreadSafeList.native.kt +++ /dev/null @@ -1,94 +0,0 @@ -package cafe.adriel.voyager.core.concurrent - -import kotlinx.atomicfu.locks.SynchronizedObject -import kotlinx.atomicfu.locks.synchronized - -internal actual class ThreadSafeList( - private val delegate: MutableList -) : MutableList { - public actual constructor() : this(delegate = mutableListOf()) - private val syncObject = SynchronizedObject() - - override val size: Int - get() = delegate.size - - override fun contains(element: T): Boolean { - return synchronized(syncObject) { delegate.contains(element) } - } - - override fun containsAll(elements: Collection): Boolean { - return synchronized(syncObject) { delegate.containsAll(elements) } - } - - override fun get(index: Int): T { - return synchronized(syncObject) { delegate.get(index) } - } - - override fun indexOf(element: T): Int { - return synchronized(syncObject) { delegate.indexOf(element) } - } - - override fun isEmpty(): Boolean { - return synchronized(syncObject) { delegate.isEmpty() } - } - - override fun iterator(): MutableIterator { - return synchronized(syncObject) { delegate.iterator() } - } - - override fun lastIndexOf(element: T): Int { - return synchronized(syncObject) { delegate.lastIndexOf(element) } - } - - override fun add(element: T): Boolean { - return synchronized(syncObject) { delegate.add(element) } - } - - override fun add(index: Int, element: T) { - return synchronized(syncObject) { delegate.add(index, element) } - } - - override fun addAll(index: Int, elements: Collection): Boolean { - return synchronized(syncObject) { delegate.addAll(index, elements) } - } - - override fun addAll(elements: Collection): Boolean { - return synchronized(syncObject) { delegate.addAll(elements) } - } - - override fun clear() { - return synchronized(syncObject) { delegate.clear() } - } - - override fun listIterator(): MutableListIterator { - return synchronized(syncObject) { delegate.listIterator() } - } - - override fun listIterator(index: Int): MutableListIterator { - return synchronized(syncObject) { delegate.listIterator(index) } - } - - override fun remove(element: T): Boolean { - return synchronized(syncObject) { delegate.remove(element) } - } - - override fun removeAll(elements: Collection): Boolean { - return synchronized(syncObject) { delegate.removeAll(elements) } - } - - override fun removeAt(index: Int): T { - return synchronized(syncObject) { delegate.removeAt(index) } - } - - override fun retainAll(elements: Collection): Boolean { - return synchronized(syncObject) { delegate.retainAll(elements) } - } - - override fun set(index: Int, element: T): T { - return synchronized(syncObject) { delegate.set(index, element) } - } - - override fun subList(fromIndex: Int, toIndex: Int): MutableList { - return synchronized(syncObject) { delegate.subList(fromIndex, toIndex) } - } -} diff --git a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/concurrent/ThreadSafeMap.native.kt b/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/concurrent/ThreadSafeMap.native.kt deleted file mode 100644 index d7a05317c524220afe703b9af48f90413799514b..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/concurrent/ThreadSafeMap.native.kt +++ /dev/null @@ -1,53 +0,0 @@ -package cafe.adriel.voyager.core.concurrent - -import kotlinx.atomicfu.locks.SynchronizedObject -import kotlinx.atomicfu.locks.synchronized - -internal actual class ThreadSafeMap( - private val delegate: MutableMap -) : MutableMap { - public actual constructor() : this(delegate = mutableMapOf()) - private val syncObject = SynchronizedObject() - - override val size: Int - get() = synchronized(syncObject) { delegate.size } - - override fun containsKey(key: K): Boolean { - return synchronized(syncObject) { delegate.containsKey(key) } - } - - override fun containsValue(value: V): Boolean { - return synchronized(syncObject) { delegate.containsValue(value) } - } - - override fun get(key: K): V? { - return synchronized(syncObject) { delegate[key] } - } - - override fun isEmpty(): Boolean { - return synchronized(syncObject) { delegate.isEmpty() } - } - - override val entries: MutableSet> - get() = delegate.entries - override val keys: MutableSet - get() = delegate.keys - override val values: MutableCollection - get() = delegate.values - - override fun clear() { - synchronized(syncObject) { delegate.clear() } - } - - override fun put(key: K, value: V): V? { - return synchronized(syncObject) { delegate.put(key, value) } - } - - override fun putAll(from: Map) { - synchronized(syncObject) { delegate.putAll(from) } - } - - override fun remove(key: K): V? { - return synchronized(syncObject) { delegate.remove(key) } - } -} diff --git a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/concurrent/ThreadSafeSet.native.kt b/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/concurrent/ThreadSafeSet.native.kt deleted file mode 100644 index 20e1e18efadcd2088afe19bc67e2a79d45d71665..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/concurrent/ThreadSafeSet.native.kt +++ /dev/null @@ -1,54 +0,0 @@ -package cafe.adriel.voyager.core.concurrent - -import kotlinx.atomicfu.locks.SynchronizedObject -import kotlinx.atomicfu.locks.synchronized - -internal actual class ThreadSafeSet( - private val delegate: MutableSet -) : MutableSet { - public actual constructor() : this(delegate = mutableSetOf()) - private val syncObject = SynchronizedObject() - - override val size: Int - get() = delegate.size - - override fun contains(element: T): Boolean { - return synchronized(syncObject) { delegate.contains(element) } - } - - override fun containsAll(elements: Collection): Boolean { - return synchronized(syncObject) { delegate.containsAll(elements) } - } - - override fun isEmpty(): Boolean { - return synchronized(syncObject) { delegate.isEmpty() } - } - - override fun iterator(): MutableIterator { - return synchronized(syncObject) { delegate.iterator() } - } - - override fun add(element: T): Boolean { - return synchronized(syncObject) { delegate.add(element) } - } - - override fun addAll(elements: Collection): Boolean { - return synchronized(syncObject) { delegate.addAll(elements) } - } - - override fun clear() { - return synchronized(syncObject) { delegate.clear() } - } - - override fun remove(element: T): Boolean { - return synchronized(syncObject) { delegate.remove(element) } - } - - override fun removeAll(elements: Collection): Boolean { - return synchronized(syncObject) { delegate.removeAll(elements) } - } - - override fun retainAll(elements: Collection): Boolean { - return synchronized(syncObject) { delegate.retainAll(elements) } - } -} diff --git a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/lifecycle/ConfigurationChecker.kt b/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/lifecycle/ConfigurationChecker.kt deleted file mode 100644 index 4dc661fe5c77030b3110155a27086bb1239b698c..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/lifecycle/ConfigurationChecker.kt +++ /dev/null @@ -1,17 +0,0 @@ -package cafe.adriel.voyager.core.lifecycle - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.Stable -import androidx.compose.runtime.remember - -private val configurationChecker = ConfigurationChecker() - -@Composable -internal actual fun getConfigurationChecker(): ConfigurationChecker { - return remember { configurationChecker } -} - -@Stable -internal actual class ConfigurationChecker { - actual fun isChangingConfigurations(): Boolean = false -} diff --git a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/lifecycle/Serializable.native.kt b/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/lifecycle/Serializable.native.kt deleted file mode 100644 index 9b8513e625d9fe5cc081e4a7da68b703a1f47213..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/lifecycle/Serializable.native.kt +++ /dev/null @@ -1,3 +0,0 @@ -package cafe.adriel.voyager.core.lifecycle - -internal actual interface JavaSerializable diff --git a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/platform/KClassEx.native.kt b/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/platform/KClassEx.native.kt deleted file mode 100644 index 737aa0051a093153d553ab2068fd9cdd4d417c00..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/platform/KClassEx.native.kt +++ /dev/null @@ -1,5 +0,0 @@ -package cafe.adriel.voyager.core.platform - -import kotlin.reflect.KClass - -internal actual val KClass<*>.multiplatformName: String? get() = qualifiedName diff --git a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/screen/Screen.native.kt b/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/screen/Screen.native.kt deleted file mode 100644 index d217548e89ada69774fe654a970c5e7b3bc833ed..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.core/screen/Screen.native.kt +++ /dev/null @@ -1,11 +0,0 @@ -package cafe.adriel.voyager.core.screen - -import androidx.compose.runtime.Composable - -internal actual interface Screen { - actual val key: ScreenKey - get() = commonKeyGeneration() - - @Composable - actual fun Content() -} diff --git a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.navigator.internal/Actuals.uikit.kt b/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.navigator.internal/Actuals.uikit.kt deleted file mode 100644 index 908fe0d395d97d180049fef80df191e15949a4eb..0000000000000000000000000000000000000000 --- a/mobile/shared/src/iosMain/kotlin/cafe.adriel.voyager.navigator.internal/Actuals.uikit.kt +++ /dev/null @@ -1,7 +0,0 @@ -package cafe.adriel.voyager.navigator.internal - -import androidx.compose.runtime.Composable - -// TODO: use ios backstack -@Composable -internal actual fun BackHandler(enabled: Boolean, onBack: () -> Unit) = Unit diff --git a/rpi-server/src/main/kotlin/band.effective.office.elevator/rpi/RaspberryApp.kt b/rpi-server/src/main/kotlin/band.effective.office.elevator/rpi/RaspberryApp.kt index 4d91f34c2d7dfc7138a2e7f11424493f14b46f08..c0654c0634ebeb3ed296c426612384adc6c0e0c2 100644 --- a/rpi-server/src/main/kotlin/band.effective.office.elevator/rpi/RaspberryApp.kt +++ b/rpi-server/src/main/kotlin/band.effective.office.elevator/rpi/RaspberryApp.kt @@ -1,8 +1,8 @@ package band.effective.office.elevator.rpi import band.effective.office.elevator.plugins.configureRouting -import io.ktor.server.engine.* -import io.ktor.server.netty.* +import io.ktor.server.engine.embeddedServer +import io.ktor.server.netty.Netty fun main() { embeddedServer(Netty, port = 2105, host = "0.0.0.0") { diff --git a/settings.gradle.kts b/settings.gradle.kts index f8cb8593ac4c427b59fd7ca2fea061d168ad1c84..a9a8dd76e91b5a8efcf49f47d4d080c52b0ed91c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,7 +2,4 @@ rootProject.name = "effective-office" include("cloud-server", "rpi-server", "gpio") include("common") -include("mobile") -include("mobile:shared") -include("mobile:android") -include("mobile:iosApp") +include("composeApp")