Adrian Witaszak
2 years ago
87 changed files with 6175 additions and 0 deletions
@ -0,0 +1,22 @@ |
|||||||
|
This is an example of a Kotlin Multiplatform project that targets Android, iOS, Web, and Desktop platforms. The project follows a modular approach, with each feature being represented as a Ballast component. The Compose UI code is located in the shared module. For the web UI, you can find it in the web module, which is built using [Kobweb](https://github.com/varabyte/kobweb). |
||||||
|
|
||||||
|
## Run projects: |
||||||
|
|
||||||
|
### Android |
||||||
|
- Run `androidsApp` from the _Run Configuration_ |
||||||
|
|
||||||
|
### iOS |
||||||
|
- Run `iosApp` from the _Run Configuration_ |
||||||
|
- or open `iosApp/iosApp.xcodeproj` in Xcode and Run |
||||||
|
|
||||||
|
### Web |
||||||
|
- Run `./gradlew :web:kobwebStart -t` |
||||||
|
|
||||||
|
### Desktop |
||||||
|
- Run `./gradlew :shared:run` |
||||||
|
|
||||||
|
## Screenshots |
||||||
|
![android](./screenshots/android.png) |
||||||
|
![ios](./screenshots/ios.png) |
||||||
|
![web](./screenshots/web.png) |
||||||
|
![desktop](./screenshots/desktop.png) |
@ -0,0 +1,7 @@ |
|||||||
|
plugins { |
||||||
|
id("com.android.application").version("8.0.1").apply(false) |
||||||
|
id("com.android.library").version("8.0.1").apply(false) |
||||||
|
kotlin("android").version("1.8.20").apply(false) |
||||||
|
kotlin("multiplatform").version("1.8.20").apply(false) |
||||||
|
id("org.jetbrains.compose") version "1.4.0" apply false |
||||||
|
} |
@ -0,0 +1,2 @@ |
|||||||
|
/build |
||||||
|
.gradle |
@ -0,0 +1,48 @@ |
|||||||
|
plugins { |
||||||
|
kotlin("multiplatform") |
||||||
|
id("com.android.library") |
||||||
|
} |
||||||
|
|
||||||
|
kotlin { |
||||||
|
android() |
||||||
|
ios() |
||||||
|
iosSimulatorArm64() |
||||||
|
jvm("desktop") { |
||||||
|
compilations.all { |
||||||
|
kotlinOptions.jvmTarget = "11" |
||||||
|
} |
||||||
|
} |
||||||
|
js(IR) { |
||||||
|
moduleName = project.name |
||||||
|
browser { |
||||||
|
commonWebpackConfig { |
||||||
|
outputFileName = "$moduleName.js" |
||||||
|
} |
||||||
|
} |
||||||
|
binaries.executable() |
||||||
|
} |
||||||
|
|
||||||
|
sourceSets { |
||||||
|
val commonMain by getting { |
||||||
|
dependencies { |
||||||
|
implementation(libs.ballast.core) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
android { |
||||||
|
namespace = "com.adrianwitaszak.ballastsharedui.${project.name}" |
||||||
|
compileSdk = 33 |
||||||
|
defaultConfig { |
||||||
|
minSdk = 24 |
||||||
|
} |
||||||
|
compileOptions { |
||||||
|
sourceCompatibility = JavaVersion.VERSION_11 |
||||||
|
targetCompatibility = JavaVersion.VERSION_11 |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
java { |
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(11)) |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.ballast.sharedui.root |
||||||
|
|
||||||
|
object CounterContract { |
||||||
|
data class State( |
||||||
|
val count: Int = 0, |
||||||
|
val timerCount: Int = 0 |
||||||
|
) |
||||||
|
|
||||||
|
sealed interface Inputs { |
||||||
|
data class Increment(val amount: Int = 1) : Inputs |
||||||
|
data class Decrement(val amount: Int = 1) : Inputs |
||||||
|
} |
||||||
|
|
||||||
|
sealed interface Events { |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package com.ballast.sharedui.root |
||||||
|
|
||||||
|
import com.copperleaf.ballast.EventHandler |
||||||
|
import com.copperleaf.ballast.EventHandlerScope |
||||||
|
|
||||||
|
class CounterEventHandler : |
||||||
|
EventHandler<CounterContract.Inputs, CounterContract.Events, CounterContract.State> { |
||||||
|
override suspend fun EventHandlerScope<CounterContract.Inputs, CounterContract.Events, CounterContract.State>.handleEvent( |
||||||
|
event: CounterContract.Events, |
||||||
|
) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.ballast.sharedui.root |
||||||
|
|
||||||
|
import com.copperleaf.ballast.InputHandler |
||||||
|
import com.copperleaf.ballast.InputHandlerScope |
||||||
|
|
||||||
|
class CounterInputHandler : |
||||||
|
InputHandler<CounterContract.Inputs, CounterContract.Events, CounterContract.State> { |
||||||
|
override suspend fun InputHandlerScope<CounterContract.Inputs, CounterContract.Events, CounterContract.State>.handleInput( |
||||||
|
input: CounterContract.Inputs, |
||||||
|
) = when (input) { |
||||||
|
is CounterContract.Inputs.Increment -> updateState { it.copy(count = it.count + input.amount) } |
||||||
|
is CounterContract.Inputs.Decrement -> updateState { it.copy(count = it.count - input.amount) } |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
package com.ballast.sharedui.root |
||||||
|
|
||||||
|
import com.copperleaf.ballast.BallastViewModelConfiguration |
||||||
|
import com.copperleaf.ballast.build |
||||||
|
import com.copperleaf.ballast.core.BasicViewModel |
||||||
|
import com.copperleaf.ballast.core.LoggingInterceptor |
||||||
|
import com.copperleaf.ballast.core.PrintlnLogger |
||||||
|
import com.copperleaf.ballast.plusAssign |
||||||
|
import com.copperleaf.ballast.withViewModel |
||||||
|
import kotlinx.coroutines.CoroutineScope |
||||||
|
|
||||||
|
class CounterViewModel( |
||||||
|
viewModelCoroutineScope: CoroutineScope, |
||||||
|
) : BasicViewModel< |
||||||
|
CounterContract.Inputs, |
||||||
|
CounterContract.Events, |
||||||
|
CounterContract.State>( |
||||||
|
config = BallastViewModelConfiguration.Builder() |
||||||
|
.apply { |
||||||
|
this += LoggingInterceptor() |
||||||
|
logger = { PrintlnLogger() } |
||||||
|
} |
||||||
|
.withViewModel( |
||||||
|
initialState = CounterContract.State(), |
||||||
|
inputHandler = CounterInputHandler(), |
||||||
|
name = "LoginScreen", |
||||||
|
) |
||||||
|
.build(), |
||||||
|
eventHandler = CounterEventHandler(), |
||||||
|
coroutineScope = viewModelCoroutineScope, |
||||||
|
) |
@ -0,0 +1,2 @@ |
|||||||
|
/build |
||||||
|
.gradle |
@ -0,0 +1,48 @@ |
|||||||
|
plugins { |
||||||
|
kotlin("multiplatform") |
||||||
|
id("com.android.library") |
||||||
|
} |
||||||
|
|
||||||
|
kotlin { |
||||||
|
android() |
||||||
|
ios() |
||||||
|
iosSimulatorArm64() |
||||||
|
jvm("desktop") { |
||||||
|
compilations.all { |
||||||
|
kotlinOptions.jvmTarget = "11" |
||||||
|
} |
||||||
|
} |
||||||
|
js(IR) { |
||||||
|
moduleName = project.name |
||||||
|
browser { |
||||||
|
commonWebpackConfig { |
||||||
|
outputFileName = "$moduleName.js" |
||||||
|
} |
||||||
|
} |
||||||
|
binaries.executable() |
||||||
|
} |
||||||
|
|
||||||
|
sourceSets { |
||||||
|
val commonMain by getting { |
||||||
|
dependencies { |
||||||
|
implementation(libs.ballast.core) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
android { |
||||||
|
namespace = "com.adrianwitaszak.ballastsharedui.${project.name}" |
||||||
|
compileSdk = 33 |
||||||
|
defaultConfig { |
||||||
|
minSdk = 24 |
||||||
|
} |
||||||
|
compileOptions { |
||||||
|
sourceCompatibility = JavaVersion.VERSION_11 |
||||||
|
targetCompatibility = JavaVersion.VERSION_11 |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
java { |
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(11)) |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.ballast.sharedui.root |
||||||
|
|
||||||
|
object HomeContract { |
||||||
|
data class State( |
||||||
|
val name: String = "", |
||||||
|
) |
||||||
|
|
||||||
|
sealed interface Inputs { |
||||||
|
data class OnNameChanged(val newName: String) : Inputs |
||||||
|
} |
||||||
|
|
||||||
|
sealed interface Events { |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package com.ballast.sharedui.root |
||||||
|
|
||||||
|
import com.copperleaf.ballast.InputHandler |
||||||
|
import com.copperleaf.ballast.InputHandlerScope |
||||||
|
|
||||||
|
class HomeInputHandler : |
||||||
|
InputHandler<HomeContract.Inputs, HomeContract.Events, HomeContract.State> { |
||||||
|
override suspend fun InputHandlerScope<HomeContract.Inputs, HomeContract.Events, HomeContract.State>.handleInput( |
||||||
|
input: HomeContract.Inputs, |
||||||
|
) = when (input) { |
||||||
|
is HomeContract.Inputs.OnNameChanged -> { |
||||||
|
updateState { it.copy(name = input.newName) } |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package com.ballast.sharedui.root |
||||||
|
|
||||||
|
import com.copperleaf.ballast.BallastViewModelConfiguration |
||||||
|
import com.copperleaf.ballast.build |
||||||
|
import com.copperleaf.ballast.core.BasicViewModel |
||||||
|
import com.copperleaf.ballast.core.LoggingInterceptor |
||||||
|
import com.copperleaf.ballast.core.PrintlnLogger |
||||||
|
import com.copperleaf.ballast.eventHandler |
||||||
|
import com.copperleaf.ballast.plusAssign |
||||||
|
import com.copperleaf.ballast.withViewModel |
||||||
|
import kotlinx.coroutines.CoroutineScope |
||||||
|
|
||||||
|
class HomeViewModel( |
||||||
|
viewModelCoroutineScope: CoroutineScope, |
||||||
|
) : BasicViewModel< |
||||||
|
HomeContract.Inputs, |
||||||
|
HomeContract.Events, |
||||||
|
HomeContract.State>( |
||||||
|
config = BallastViewModelConfiguration.Builder() |
||||||
|
.apply { |
||||||
|
this += LoggingInterceptor() |
||||||
|
logger = { PrintlnLogger() } |
||||||
|
} |
||||||
|
.withViewModel( |
||||||
|
initialState = HomeContract.State(), |
||||||
|
inputHandler = HomeInputHandler(), |
||||||
|
name = "LoginScreen", |
||||||
|
) |
||||||
|
.build(), |
||||||
|
eventHandler = eventHandler { }, |
||||||
|
coroutineScope = viewModelCoroutineScope, |
||||||
|
) |
@ -0,0 +1,2 @@ |
|||||||
|
/build |
||||||
|
.gradle |
@ -0,0 +1,49 @@ |
|||||||
|
plugins { |
||||||
|
kotlin("multiplatform") |
||||||
|
id("com.android.library") |
||||||
|
} |
||||||
|
|
||||||
|
kotlin { |
||||||
|
android() |
||||||
|
ios() |
||||||
|
iosSimulatorArm64() |
||||||
|
jvm("desktop") { |
||||||
|
compilations.all { |
||||||
|
kotlinOptions.jvmTarget = "11" |
||||||
|
} |
||||||
|
} |
||||||
|
js(IR) { |
||||||
|
moduleName = project.name |
||||||
|
browser { |
||||||
|
commonWebpackConfig { |
||||||
|
outputFileName = "$moduleName.js" |
||||||
|
} |
||||||
|
} |
||||||
|
binaries.executable() |
||||||
|
} |
||||||
|
|
||||||
|
sourceSets { |
||||||
|
val commonMain by getting { |
||||||
|
dependencies { |
||||||
|
implementation(libs.ballast.core) |
||||||
|
implementation(libs.ballast.navigation) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
android { |
||||||
|
namespace = "com.adrianwitaszak.ballastsharedui.${project.name}" |
||||||
|
compileSdk = 33 |
||||||
|
defaultConfig { |
||||||
|
minSdk = 24 |
||||||
|
} |
||||||
|
compileOptions { |
||||||
|
sourceCompatibility = JavaVersion.VERSION_11 |
||||||
|
targetCompatibility = JavaVersion.VERSION_11 |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
java { |
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(11)) |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
package com.ballast.shoppe.feature.router |
||||||
|
|
||||||
|
import com.copperleaf.ballast.EventHandler |
||||||
|
import com.copperleaf.ballast.EventHandlerScope |
||||||
|
import com.copperleaf.ballast.navigation.routing.RouterContract |
||||||
|
|
||||||
|
internal class RouterEventHandler : |
||||||
|
EventHandler<RouterContract.Inputs<RouterScreen>, RouterContract.Events<RouterScreen>, RouterContract.State<RouterScreen>> { |
||||||
|
override suspend fun EventHandlerScope<RouterContract.Inputs<RouterScreen>, RouterContract.Events<RouterScreen>, RouterContract.State<RouterScreen>>.handleEvent( |
||||||
|
event: RouterContract.Events<RouterScreen>, |
||||||
|
) { |
||||||
|
when { |
||||||
|
event is RouterContract.Events.BackstackEmptied -> |
||||||
|
postInput(RouterContract.Inputs.GoToDestination(RouterScreen.Home.matcher.routeFormat)) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package com.ballast.shoppe.feature.router |
||||||
|
|
||||||
|
import com.copperleaf.ballast.navigation.routing.Route |
||||||
|
import com.copperleaf.ballast.navigation.routing.RouteAnnotation |
||||||
|
import com.copperleaf.ballast.navigation.routing.RouteMatcher |
||||||
|
|
||||||
|
private const val HOME = "/home" |
||||||
|
private const val COUNTER = "/counter" |
||||||
|
|
||||||
|
enum class RouterScreen( |
||||||
|
routeFormat: String, |
||||||
|
override val annotations: Set<RouteAnnotation> = emptySet(), |
||||||
|
) : Route { |
||||||
|
Home(HOME), |
||||||
|
Counter(COUNTER) |
||||||
|
; |
||||||
|
|
||||||
|
override val matcher: RouteMatcher = RouteMatcher.create(routeFormat) |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package com.ballast.shoppe.feature.router |
||||||
|
|
||||||
|
import com.copperleaf.ballast.BallastViewModelConfiguration |
||||||
|
import com.copperleaf.ballast.ExperimentalBallastApi |
||||||
|
import com.copperleaf.ballast.build |
||||||
|
import com.copperleaf.ballast.core.LoggingInterceptor |
||||||
|
import com.copperleaf.ballast.core.PrintlnLogger |
||||||
|
import com.copperleaf.ballast.navigation.routing.RoutingTable |
||||||
|
import com.copperleaf.ballast.navigation.routing.fromEnum |
||||||
|
import com.copperleaf.ballast.navigation.vm.BasicRouter |
||||||
|
import com.copperleaf.ballast.navigation.vm.withRouter |
||||||
|
import com.copperleaf.ballast.plusAssign |
||||||
|
import kotlinx.coroutines.CoroutineScope |
||||||
|
|
||||||
|
@OptIn(ExperimentalBallastApi::class) |
||||||
|
class RouterViewModel( |
||||||
|
viewModelScope: CoroutineScope, |
||||||
|
initialRoute: RouterScreen, |
||||||
|
) : BasicRouter<RouterScreen>( |
||||||
|
config = BallastViewModelConfiguration.Builder() |
||||||
|
.apply { |
||||||
|
this += LoggingInterceptor() |
||||||
|
logger = ::PrintlnLogger |
||||||
|
} |
||||||
|
.withRouter( |
||||||
|
routingTable = RoutingTable.fromEnum(RouterScreen.values()), |
||||||
|
initialRoute = initialRoute |
||||||
|
) |
||||||
|
.build(), |
||||||
|
eventHandler = RouterEventHandler(), |
||||||
|
coroutineScope = viewModelScope |
||||||
|
) |
@ -0,0 +1,17 @@ |
|||||||
|
#Gradle |
||||||
|
org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx2048M" |
||||||
|
|
||||||
|
#Kotlin |
||||||
|
kotlin.code.style=official |
||||||
|
#Android |
||||||
|
android.useAndroidX=true |
||||||
|
android.nonTransitiveRClass=true |
||||||
|
#MPP |
||||||
|
kotlin.mpp.enableCInteropCommonization=true |
||||||
|
kotlin.native.cacheKind=none |
||||||
|
kotlin.native.useEmbeddableCompilerJar=true |
||||||
|
kotlin.mpp.androidSourceSetLayoutVersion=2 |
||||||
|
compose.desktop.verbose=true |
||||||
|
org.jetbrains.compose.experimental.jscanvas.enabled=true |
||||||
|
org.jetbrains.compose.experimental.macos.enabled=true |
||||||
|
org.jetbrains.compose.experimental.uikit.enabled=true |
@ -0,0 +1,26 @@ |
|||||||
|
[versions] |
||||||
|
activityCompose = "1.7.1" |
||||||
|
agp = "8.0.1" |
||||||
|
androidxCore = "1.10.1" |
||||||
|
androidxMaterial = "1.9.0" |
||||||
|
ballast = "3.0.1" |
||||||
|
composeMultiplatform = "1.4.0" |
||||||
|
jetpackCompose = "1.3.2" |
||||||
|
kobweb = "0.13.2" |
||||||
|
kotlin = "1.8.20" # Max Kotlin version supported by Compose-Multiplatform 1.4.0 is Kotlin 1.8.20 |
||||||
|
|
||||||
|
[libraries] |
||||||
|
androidx-core = { module = "androidx.core:core-ktx", version.ref = "androidxCore" } |
||||||
|
androidx-material = { module = "com.google.android.material:material", version.ref = "androidxMaterial" } |
||||||
|
|
||||||
|
ballast-core = { module = "io.github.copper-leaf:ballast-core", version.ref = "ballast" } |
||||||
|
ballast-navigation = { module = "io.github.copper-leaf:ballast-navigation", version.ref = "ballast" } |
||||||
|
ballast-savedState = { module = "io.github.copper-leaf:ballast-saved-state", version.ref = "ballast" } |
||||||
|
|
||||||
|
jetpackCompose-activity = { module = "androidx.activity:activity-compose", version.ref = "activityCompose" } |
||||||
|
|
||||||
|
kobweb-core = { module = "com.varabyte.kobweb:kobweb-core", version.ref = "kobweb" } |
||||||
|
kobweb-silk = { module = "com.varabyte.kobweb:kobweb-silk", version.ref = "kobweb" } |
||||||
|
|
||||||
|
[plugins] |
||||||
|
composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "composeMultiplatform" } |
Binary file not shown.
@ -0,0 +1,6 @@ |
|||||||
|
#Sun May 21 15:36:54 BST 2023 |
||||||
|
distributionBase=GRADLE_USER_HOME |
||||||
|
distributionPath=wrapper/dists |
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip |
||||||
|
zipStoreBase=GRADLE_USER_HOME |
||||||
|
zipStorePath=wrapper/dists |
@ -0,0 +1,185 @@ |
|||||||
|
#!/usr/bin/env sh |
||||||
|
|
||||||
|
# |
||||||
|
# Copyright 2015 the original author or authors. |
||||||
|
# |
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
# you may not use this file except in compliance with the License. |
||||||
|
# You may obtain a copy of the License at |
||||||
|
# |
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
# |
||||||
|
# Unless required by applicable law or agreed to in writing, software |
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
# See the License for the specific language governing permissions and |
||||||
|
# limitations under the License. |
||||||
|
# |
||||||
|
|
||||||
|
############################################################################## |
||||||
|
## |
||||||
|
## Gradle start up script for UN*X |
||||||
|
## |
||||||
|
############################################################################## |
||||||
|
|
||||||
|
# Attempt to set APP_HOME |
||||||
|
# Resolve links: $0 may be a link |
||||||
|
PRG="$0" |
||||||
|
# Need this for relative symlinks. |
||||||
|
while [ -h "$PRG" ] ; do |
||||||
|
ls=`ls -ld "$PRG"` |
||||||
|
link=`expr "$ls" : '.*-> \(.*\)$'` |
||||||
|
if expr "$link" : '/.*' > /dev/null; then |
||||||
|
PRG="$link" |
||||||
|
else |
||||||
|
PRG=`dirname "$PRG"`"/$link" |
||||||
|
fi |
||||||
|
done |
||||||
|
SAVED="`pwd`" |
||||||
|
cd "`dirname \"$PRG\"`/" >/dev/null |
||||||
|
APP_HOME="`pwd -P`" |
||||||
|
cd "$SAVED" >/dev/null |
||||||
|
|
||||||
|
APP_NAME="Gradle" |
||||||
|
APP_BASE_NAME=`basename "$0"` |
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |
||||||
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' |
||||||
|
|
||||||
|
# Use the maximum available, or set MAX_FD != -1 to use that value. |
||||||
|
MAX_FD="maximum" |
||||||
|
|
||||||
|
warn () { |
||||||
|
echo "$*" |
||||||
|
} |
||||||
|
|
||||||
|
die () { |
||||||
|
echo |
||||||
|
echo "$*" |
||||||
|
echo |
||||||
|
exit 1 |
||||||
|
} |
||||||
|
|
||||||
|
# OS specific support (must be 'true' or 'false'). |
||||||
|
cygwin=false |
||||||
|
msys=false |
||||||
|
darwin=false |
||||||
|
nonstop=false |
||||||
|
case "`uname`" in |
||||||
|
CYGWIN* ) |
||||||
|
cygwin=true |
||||||
|
;; |
||||||
|
Darwin* ) |
||||||
|
darwin=true |
||||||
|
;; |
||||||
|
MINGW* ) |
||||||
|
msys=true |
||||||
|
;; |
||||||
|
NONSTOP* ) |
||||||
|
nonstop=true |
||||||
|
;; |
||||||
|
esac |
||||||
|
|
||||||
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar |
||||||
|
|
||||||
|
|
||||||
|
# Determine the Java command to use to start the JVM. |
||||||
|
if [ -n "$JAVA_HOME" ] ; then |
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then |
||||||
|
# IBM's JDK on AIX uses strange locations for the executables |
||||||
|
JAVACMD="$JAVA_HOME/jre/sh/java" |
||||||
|
else |
||||||
|
JAVACMD="$JAVA_HOME/bin/java" |
||||||
|
fi |
||||||
|
if [ ! -x "$JAVACMD" ] ; then |
||||||
|
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME |
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the |
||||||
|
location of your Java installation." |
||||||
|
fi |
||||||
|
else |
||||||
|
JAVACMD="java" |
||||||
|
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the |
||||||
|
location of your Java installation." |
||||||
|
fi |
||||||
|
|
||||||
|
# Increase the maximum file descriptors if we can. |
||||||
|
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then |
||||||
|
MAX_FD_LIMIT=`ulimit -H -n` |
||||||
|
if [ $? -eq 0 ] ; then |
||||||
|
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then |
||||||
|
MAX_FD="$MAX_FD_LIMIT" |
||||||
|
fi |
||||||
|
ulimit -n $MAX_FD |
||||||
|
if [ $? -ne 0 ] ; then |
||||||
|
warn "Could not set maximum file descriptor limit: $MAX_FD" |
||||||
|
fi |
||||||
|
else |
||||||
|
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" |
||||||
|
fi |
||||||
|
fi |
||||||
|
|
||||||
|
# For Darwin, add options to specify how the application appears in the dock |
||||||
|
if $darwin; then |
||||||
|
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" |
||||||
|
fi |
||||||
|
|
||||||
|
# For Cygwin or MSYS, switch paths to Windows format before running java |
||||||
|
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then |
||||||
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"` |
||||||
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` |
||||||
|
|
||||||
|
JAVACMD=`cygpath --unix "$JAVACMD"` |
||||||
|
|
||||||
|
# We build the pattern for arguments to be converted via cygpath |
||||||
|
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` |
||||||
|
SEP="" |
||||||
|
for dir in $ROOTDIRSRAW ; do |
||||||
|
ROOTDIRS="$ROOTDIRS$SEP$dir" |
||||||
|
SEP="|" |
||||||
|
done |
||||||
|
OURCYGPATTERN="(^($ROOTDIRS))" |
||||||
|
# Add a user-defined pattern to the cygpath arguments |
||||||
|
if [ "$GRADLE_CYGPATTERN" != "" ] ; then |
||||||
|
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" |
||||||
|
fi |
||||||
|
# Now convert the arguments - kludge to limit ourselves to /bin/sh |
||||||
|
i=0 |
||||||
|
for arg in "$@" ; do |
||||||
|
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` |
||||||
|
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option |
||||||
|
|
||||||
|
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition |
||||||
|
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` |
||||||
|
else |
||||||
|
eval `echo args$i`="\"$arg\"" |
||||||
|
fi |
||||||
|
i=`expr $i + 1` |
||||||
|
done |
||||||
|
case $i in |
||||||
|
0) set -- ;; |
||||||
|
1) set -- "$args0" ;; |
||||||
|
2) set -- "$args0" "$args1" ;; |
||||||
|
3) set -- "$args0" "$args1" "$args2" ;; |
||||||
|
4) set -- "$args0" "$args1" "$args2" "$args3" ;; |
||||||
|
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; |
||||||
|
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; |
||||||
|
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; |
||||||
|
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; |
||||||
|
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; |
||||||
|
esac |
||||||
|
fi |
||||||
|
|
||||||
|
# Escape application args |
||||||
|
save () { |
||||||
|
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done |
||||||
|
echo " " |
||||||
|
} |
||||||
|
APP_ARGS=`save "$@"` |
||||||
|
|
||||||
|
# Collect all arguments for the java command, following the shell quoting and substitution rules |
||||||
|
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" |
||||||
|
|
||||||
|
exec "$JAVACMD" "$@" |
@ -0,0 +1,8 @@ |
|||||||
|
# Uncomment the next line to define a global platform for your project |
||||||
|
# platform :ios, '11.0' |
||||||
|
|
||||||
|
target 'iosApp' do |
||||||
|
# Comment the next line if you don't want to use dynamic frameworks |
||||||
|
use_frameworks! |
||||||
|
pod 'shared', :path => '../shared' |
||||||
|
end |
@ -0,0 +1,16 @@ |
|||||||
|
PODS: |
||||||
|
- shared (1.0.0) |
||||||
|
|
||||||
|
DEPENDENCIES: |
||||||
|
- shared (from `../shared`) |
||||||
|
|
||||||
|
EXTERNAL SOURCES: |
||||||
|
shared: |
||||||
|
:path: "../shared" |
||||||
|
|
||||||
|
SPEC CHECKSUMS: |
||||||
|
shared: c9483bd6363e51b30c0c29e0b11ed85cdaf2faf3 |
||||||
|
|
||||||
|
PODFILE CHECKSUM: 97c32ffa6c179d80a75e56c799153bdc084ea434 |
||||||
|
|
||||||
|
COCOAPODS: 1.11.3 |
@ -0,0 +1,28 @@ |
|||||||
|
{ |
||||||
|
"name": "shared", |
||||||
|
"version": "1.0.0", |
||||||
|
"homepage": "http://", |
||||||
|
"source": { |
||||||
|
"http": "" |
||||||
|
}, |
||||||
|
"authors": "", |
||||||
|
"license": "", |
||||||
|
"summary": "Shared code for Ballast app", |
||||||
|
"vendored_frameworks": "build/cocoapods/framework/shared.framework", |
||||||
|
"libraries": "c++", |
||||||
|
"platforms": { |
||||||
|
"ios": "11" |
||||||
|
}, |
||||||
|
"pod_target_xcconfig": { |
||||||
|
"KOTLIN_PROJECT_PATH": ":shared", |
||||||
|
"PRODUCT_MODULE_NAME": "shared" |
||||||
|
}, |
||||||
|
"script_phases": [ |
||||||
|
{ |
||||||
|
"name": "Build shared", |
||||||
|
"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/../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" |
||||||
|
} |
||||||
|
] |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
PODS: |
||||||
|
- shared (1.0.0) |
||||||
|
|
||||||
|
DEPENDENCIES: |
||||||
|
- shared (from `../shared`) |
||||||
|
|
||||||
|
EXTERNAL SOURCES: |
||||||
|
shared: |
||||||
|
:path: "../shared" |
||||||
|
|
||||||
|
SPEC CHECKSUMS: |
||||||
|
shared: c9483bd6363e51b30c0c29e0b11ed85cdaf2faf3 |
||||||
|
|
||||||
|
PODFILE CHECKSUM: 97c32ffa6c179d80a75e56c799153bdc084ea434 |
||||||
|
|
||||||
|
COCOAPODS: 1.11.3 |
@ -0,0 +1,548 @@ |
|||||||
|
// !$*UTF8*$! |
||||||
|
{ |
||||||
|
archiveVersion = 1; |
||||||
|
classes = { |
||||||
|
}; |
||||||
|
objectVersion = 50; |
||||||
|
objects = { |
||||||
|
|
||||||
|
/* Begin PBXAggregateTarget section */ |
||||||
|
8777C9F6889E59EFFD631D80AEE9048B /* shared */ = { |
||||||
|
isa = PBXAggregateTarget; |
||||||
|
buildConfigurationList = 8349D8E2EC974421A14EF8ABFF6AD6DC /* Build configuration list for PBXAggregateTarget "shared" */; |
||||||
|
buildPhases = ( |
||||||
|
BEA8885189D408D600647BDC228A6A20 /* [CP-User] Build shared */, |
||||||
|
); |
||||||
|
dependencies = ( |
||||||
|
); |
||||||
|
name = shared; |
||||||
|
}; |
||||||
|
/* End PBXAggregateTarget section */ |
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */ |
||||||
|
648F16425FEF89525AE0325F5A984B86 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; |
||||||
|
8749C8E8DC500B064FA0BC7A78C38A2A /* Pods-iosApp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A2475209BEE7612101900020629C625 /* Pods-iosApp-dummy.m */; }; |
||||||
|
8801CBFD38B946597BD07145B2EEFC9F /* Pods-iosApp-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 42DE4C0106600A5B6D599285368F3270 /* Pods-iosApp-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
||||||
|
/* End PBXBuildFile section */ |
||||||
|
|
||||||
|
/* Begin PBXContainerItemProxy section */ |
||||||
|
C1E4F2F8101E860063100BCC8448BC3B /* PBXContainerItemProxy */ = { |
||||||
|
isa = PBXContainerItemProxy; |
||||||
|
containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; |
||||||
|
proxyType = 1; |
||||||
|
remoteGlobalIDString = 8777C9F6889E59EFFD631D80AEE9048B; |
||||||
|
remoteInfo = shared; |
||||||
|
}; |
||||||
|
/* End PBXContainerItemProxy section */ |
||||||
|
|
||||||
|
/* Begin PBXFileReference section */ |
||||||
|
0011AEE22E8296B3D9E0B0B2CDCAB2EE /* Pods-iosApp-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iosApp-acknowledgements.plist"; sourceTree = "<group>"; }; |
||||||
|
1A2FB55B5C37861BC78ECD1420D818C3 /* Pods-iosApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iosApp.release.xcconfig"; sourceTree = "<group>"; }; |
||||||
|
35548E3BD8DA30925E8FE97E67B84868 /* shared.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = shared.release.xcconfig; sourceTree = "<group>"; }; |
||||||
|
3A2475209BEE7612101900020629C625 /* Pods-iosApp-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-iosApp-dummy.m"; sourceTree = "<group>"; }; |
||||||
|
42DE4C0106600A5B6D599285368F3270 /* Pods-iosApp-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-iosApp-umbrella.h"; sourceTree = "<group>"; }; |
||||||
|
482384ADFE4EF692B16FACB8C2021970 /* Pods-iosApp.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-iosApp.modulemap"; sourceTree = "<group>"; }; |
||||||
|
73010CC983E3809BECEE5348DA1BB8C6 /* 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; }; |
||||||
|
73D4D08B8C9FAD17B10E8E5C0EB49A76 /* shared.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = shared.framework; path = build/cocoapods/framework/shared.framework; sourceTree = "<group>"; }; |
||||||
|
95B09EA82E7AF9ACCCCAF3E55C859116 /* shared.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = shared.debug.xcconfig; sourceTree = "<group>"; }; |
||||||
|
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; }; |
||||||
|
A43877303056397968EC90C7AAFE17E8 /* Pods-iosApp-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-iosApp-acknowledgements.markdown"; sourceTree = "<group>"; }; |
||||||
|
A79C2AA5C063914B2D1BD80187FDF6DE /* Pods-iosApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iosApp.debug.xcconfig"; sourceTree = "<group>"; }; |
||||||
|
B097DD7534E741D5C41838011D755842 /* Pods-iosApp */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-iosApp"; path = Pods_iosApp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||||
|
BCAED803D074E2E9C3B1327F049C8C2A /* Pods-iosApp-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iosApp-Info.plist"; sourceTree = "<group>"; }; |
||||||
|
FB1BF8BE937671FB0F330C2D28634477 /* shared.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = shared.podspec; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; |
||||||
|
/* End PBXFileReference section */ |
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */ |
||||||
|
CC3CD5459C4A5476C5A93268587E63E7 /* Frameworks */ = { |
||||||
|
isa = PBXFrameworksBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
648F16425FEF89525AE0325F5A984B86 /* Foundation.framework in Frameworks */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXFrameworksBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXGroup section */ |
||||||
|
1F86AA6785DF34AFD5A71790761717DE /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
B097DD7534E741D5C41838011D755842 /* Pods-iosApp */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
310087C345B86EEF25A054485E0BB5CB /* Pods-iosApp */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
482384ADFE4EF692B16FACB8C2021970 /* Pods-iosApp.modulemap */, |
||||||
|
A43877303056397968EC90C7AAFE17E8 /* Pods-iosApp-acknowledgements.markdown */, |
||||||
|
0011AEE22E8296B3D9E0B0B2CDCAB2EE /* Pods-iosApp-acknowledgements.plist */, |
||||||
|
3A2475209BEE7612101900020629C625 /* Pods-iosApp-dummy.m */, |
||||||
|
BCAED803D074E2E9C3B1327F049C8C2A /* Pods-iosApp-Info.plist */, |
||||||
|
42DE4C0106600A5B6D599285368F3270 /* Pods-iosApp-umbrella.h */, |
||||||
|
A79C2AA5C063914B2D1BD80187FDF6DE /* Pods-iosApp.debug.xcconfig */, |
||||||
|
1A2FB55B5C37861BC78ECD1420D818C3 /* Pods-iosApp.release.xcconfig */, |
||||||
|
); |
||||||
|
name = "Pods-iosApp"; |
||||||
|
path = "Target Support Files/Pods-iosApp"; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
313FE5FE915A4A924C55AAC02A910D61 /* Development Pods */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
EEF3277DCE2E4B31CF76A57AB68C2BA1 /* shared */, |
||||||
|
); |
||||||
|
name = "Development Pods"; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
569B56E5B05425CAE32676C6049DC8CB /* Pod */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
FB1BF8BE937671FB0F330C2D28634477 /* shared.podspec */, |
||||||
|
); |
||||||
|
name = Pod; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
578452D2E740E91742655AC8F1636D1F /* iOS */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */, |
||||||
|
); |
||||||
|
name = iOS; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
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 = "<group>"; |
||||||
|
}; |
||||||
|
7DBF81461E18ACE1B4BD971BAC841CF7 /* Frameworks */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
73D4D08B8C9FAD17B10E8E5C0EB49A76 /* shared.framework */, |
||||||
|
); |
||||||
|
name = Frameworks; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
C9F6DDEE5D76F65BB478A349731F54F4 /* Targets Support Files */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
310087C345B86EEF25A054485E0BB5CB /* Pods-iosApp */, |
||||||
|
); |
||||||
|
name = "Targets Support Files"; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
CF1408CF629C7361332E53B88F7BD30C = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, |
||||||
|
313FE5FE915A4A924C55AAC02A910D61 /* Development Pods */, |
||||||
|
D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, |
||||||
|
1F86AA6785DF34AFD5A71790761717DE /* Products */, |
||||||
|
C9F6DDEE5D76F65BB478A349731F54F4 /* Targets Support Files */, |
||||||
|
); |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
578452D2E740E91742655AC8F1636D1F /* iOS */, |
||||||
|
); |
||||||
|
name = Frameworks; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
EEF3277DCE2E4B31CF76A57AB68C2BA1 /* shared */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
7DBF81461E18ACE1B4BD971BAC841CF7 /* Frameworks */, |
||||||
|
569B56E5B05425CAE32676C6049DC8CB /* Pod */, |
||||||
|
5CB66AAACA3977B45E9869C360E9F289 /* Support Files */, |
||||||
|
); |
||||||
|
name = shared; |
||||||
|
path = ../../shared; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
/* End PBXGroup section */ |
||||||
|
|
||||||
|
/* Begin PBXHeadersBuildPhase section */ |
||||||
|
DA71CB665A4F7860DB550FAA48FB6AD2 /* Headers */ = { |
||||||
|
isa = PBXHeadersBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
8801CBFD38B946597BD07145B2EEFC9F /* Pods-iosApp-umbrella.h in Headers */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXHeadersBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */ |
||||||
|
ED39C638569286489CD697A6C8964146 /* Pods-iosApp */ = { |
||||||
|
isa = PBXNativeTarget; |
||||||
|
buildConfigurationList = 9F1E85ECB672A0CC96333A6C6DF60EE6 /* Build configuration list for PBXNativeTarget "Pods-iosApp" */; |
||||||
|
buildPhases = ( |
||||||
|
DA71CB665A4F7860DB550FAA48FB6AD2 /* Headers */, |
||||||
|
EB28A529759E3D2117E28CE3CB8387D3 /* Sources */, |
||||||
|
CC3CD5459C4A5476C5A93268587E63E7 /* Frameworks */, |
||||||
|
0EC1C62FF9B25EAB2D236D122EAF4C98 /* Resources */, |
||||||
|
); |
||||||
|
buildRules = ( |
||||||
|
); |
||||||
|
dependencies = ( |
||||||
|
4A9525469F8E46F3883CC6599FCCFEDB /* PBXTargetDependency */, |
||||||
|
); |
||||||
|
name = "Pods-iosApp"; |
||||||
|
productName = Pods_iosApp; |
||||||
|
productReference = B097DD7534E741D5C41838011D755842 /* Pods-iosApp */; |
||||||
|
productType = "com.apple.product-type.framework"; |
||||||
|
}; |
||||||
|
/* End PBXNativeTarget section */ |
||||||
|
|
||||||
|
/* Begin PBXProject section */ |
||||||
|
BFDFE7DC352907FC980B868725387E98 /* Project object */ = { |
||||||
|
isa = PBXProject; |
||||||
|
attributes = { |
||||||
|
LastSwiftUpdateCheck = 1300; |
||||||
|
LastUpgradeCheck = 1300; |
||||||
|
}; |
||||||
|
buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; |
||||||
|
compatibilityVersion = "Xcode 9.3"; |
||||||
|
developmentRegion = en; |
||||||
|
hasScannedForEncodings = 0; |
||||||
|
knownRegions = ( |
||||||
|
Base, |
||||||
|
en, |
||||||
|
); |
||||||
|
mainGroup = CF1408CF629C7361332E53B88F7BD30C; |
||||||
|
productRefGroup = 1F86AA6785DF34AFD5A71790761717DE /* Products */; |
||||||
|
projectDirPath = ""; |
||||||
|
projectRoot = ""; |
||||||
|
targets = ( |
||||||
|
ED39C638569286489CD697A6C8964146 /* Pods-iosApp */, |
||||||
|
8777C9F6889E59EFFD631D80AEE9048B /* shared */, |
||||||
|
); |
||||||
|
}; |
||||||
|
/* End PBXProject section */ |
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */ |
||||||
|
0EC1C62FF9B25EAB2D236D122EAF4C98 /* Resources */ = { |
||||||
|
isa = PBXResourcesBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXResourcesBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXShellScriptBuildPhase section */ |
||||||
|
BEA8885189D408D600647BDC228A6A20 /* [CP-User] Build shared */ = { |
||||||
|
isa = PBXShellScriptBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
); |
||||||
|
name = "[CP-User] Build shared"; |
||||||
|
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/../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 */ |
||||||
|
EB28A529759E3D2117E28CE3CB8387D3 /* Sources */ = { |
||||||
|
isa = PBXSourcesBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
8749C8E8DC500B064FA0BC7A78C38A2A /* Pods-iosApp-dummy.m in Sources */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXSourcesBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXTargetDependency section */ |
||||||
|
4A9525469F8E46F3883CC6599FCCFEDB /* PBXTargetDependency */ = { |
||||||
|
isa = PBXTargetDependency; |
||||||
|
name = shared; |
||||||
|
target = 8777C9F6889E59EFFD631D80AEE9048B /* shared */; |
||||||
|
targetProxy = C1E4F2F8101E860063100BCC8448BC3B /* PBXContainerItemProxy */; |
||||||
|
}; |
||||||
|
/* End PBXTargetDependency section */ |
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */ |
||||||
|
02DDCCED053337F381DEBAFDEC6F354F /* Release */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
baseConfigurationReference = 1A2FB55B5C37861BC78ECD1420D818C3 /* 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 = 14.1; |
||||||
|
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; |
||||||
|
}; |
||||||
|
593F10BFFA94DAC7D6E17FB8A7F32D72 /* Release */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
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-with-dsym"; |
||||||
|
ENABLE_NS_ASSERTIONS = NO; |
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES; |
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11; |
||||||
|
GCC_NO_COMMON_BLOCKS = YES; |
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = ( |
||||||
|
"POD_CONFIGURATION_RELEASE=1", |
||||||
|
"$(inherited)", |
||||||
|
); |
||||||
|
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 = 14.1; |
||||||
|
MTL_ENABLE_DEBUG_INFO = NO; |
||||||
|
MTL_FAST_MATH = YES; |
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||||
|
STRIP_INSTALLED_PRODUCT = NO; |
||||||
|
SWIFT_COMPILATION_MODE = wholemodule; |
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O"; |
||||||
|
SWIFT_VERSION = 5.0; |
||||||
|
SYMROOT = "${SRCROOT}/../build"; |
||||||
|
}; |
||||||
|
name = Release; |
||||||
|
}; |
||||||
|
5C79EBBEF4D856E116AE03C8C2DFFEB9 /* Release */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
baseConfigurationReference = 35548E3BD8DA30925E8FE97E67B84868 /* shared.release.xcconfig */; |
||||||
|
buildSettings = { |
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; |
||||||
|
CLANG_ENABLE_OBJC_WEAK = NO; |
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 11; |
||||||
|
LD_RUNPATH_SEARCH_PATHS = ( |
||||||
|
"$(inherited)", |
||||||
|
"@executable_path/Frameworks", |
||||||
|
); |
||||||
|
SDKROOT = iphoneos; |
||||||
|
TARGETED_DEVICE_FAMILY = "1,2"; |
||||||
|
VALIDATE_PRODUCT = YES; |
||||||
|
}; |
||||||
|
name = Release; |
||||||
|
}; |
||||||
|
97719A16ED118586687DA782DCA53747 /* Debug */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
baseConfigurationReference = 95B09EA82E7AF9ACCCCAF3E55C859116 /* shared.debug.xcconfig */; |
||||||
|
buildSettings = { |
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; |
||||||
|
CLANG_ENABLE_OBJC_WEAK = NO; |
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 11; |
||||||
|
LD_RUNPATH_SEARCH_PATHS = ( |
||||||
|
"$(inherited)", |
||||||
|
"@executable_path/Frameworks", |
||||||
|
); |
||||||
|
SDKROOT = iphoneos; |
||||||
|
TARGETED_DEVICE_FAMILY = "1,2"; |
||||||
|
}; |
||||||
|
name = Debug; |
||||||
|
}; |
||||||
|
A0374B8CF9A7D6A45F6D116D698D1C19 /* Debug */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
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", |
||||||
|
"$(inherited)", |
||||||
|
); |
||||||
|
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 = 14.1; |
||||||
|
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 = Debug; |
||||||
|
}; |
||||||
|
AF088B6CD92A52AC4DCB62DEEC871231 /* Debug */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
baseConfigurationReference = A79C2AA5C063914B2D1BD80187FDF6DE /* Pods-iosApp.debug.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 = 14.1; |
||||||
|
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"; |
||||||
|
VERSIONING_SYSTEM = "apple-generic"; |
||||||
|
VERSION_INFO_PREFIX = ""; |
||||||
|
}; |
||||||
|
name = Debug; |
||||||
|
}; |
||||||
|
/* End XCBuildConfiguration section */ |
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */ |
||||||
|
4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { |
||||||
|
isa = XCConfigurationList; |
||||||
|
buildConfigurations = ( |
||||||
|
A0374B8CF9A7D6A45F6D116D698D1C19 /* Debug */, |
||||||
|
593F10BFFA94DAC7D6E17FB8A7F32D72 /* Release */, |
||||||
|
); |
||||||
|
defaultConfigurationIsVisible = 0; |
||||||
|
defaultConfigurationName = Release; |
||||||
|
}; |
||||||
|
8349D8E2EC974421A14EF8ABFF6AD6DC /* Build configuration list for PBXAggregateTarget "shared" */ = { |
||||||
|
isa = XCConfigurationList; |
||||||
|
buildConfigurations = ( |
||||||
|
97719A16ED118586687DA782DCA53747 /* Debug */, |
||||||
|
5C79EBBEF4D856E116AE03C8C2DFFEB9 /* Release */, |
||||||
|
); |
||||||
|
defaultConfigurationIsVisible = 0; |
||||||
|
defaultConfigurationName = Release; |
||||||
|
}; |
||||||
|
9F1E85ECB672A0CC96333A6C6DF60EE6 /* Build configuration list for PBXNativeTarget "Pods-iosApp" */ = { |
||||||
|
isa = XCConfigurationList; |
||||||
|
buildConfigurations = ( |
||||||
|
AF088B6CD92A52AC4DCB62DEEC871231 /* Debug */, |
||||||
|
02DDCCED053337F381DEBAFDEC6F354F /* Release */, |
||||||
|
); |
||||||
|
defaultConfigurationIsVisible = 0; |
||||||
|
defaultConfigurationName = Release; |
||||||
|
}; |
||||||
|
/* End XCConfigurationList section */ |
||||||
|
}; |
||||||
|
rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; |
||||||
|
} |
@ -0,0 +1,58 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<Scheme |
||||||
|
LastUpgradeVersion = "1300" |
||||||
|
version = "1.3"> |
||||||
|
<BuildAction |
||||||
|
parallelizeBuildables = "YES" |
||||||
|
buildImplicitDependencies = "YES"> |
||||||
|
<BuildActionEntries> |
||||||
|
<BuildActionEntry |
||||||
|
buildForTesting = "YES" |
||||||
|
buildForRunning = "YES" |
||||||
|
buildForProfiling = "YES" |
||||||
|
buildForArchiving = "YES" |
||||||
|
buildForAnalyzing = "YES"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "ED39C638569286489CD697A6C8964146" |
||||||
|
BuildableName = "Pods_iosApp.framework" |
||||||
|
BlueprintName = "Pods-iosApp" |
||||||
|
ReferencedContainer = "container:Pods.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildActionEntry> |
||||||
|
</BuildActionEntries> |
||||||
|
</BuildAction> |
||||||
|
<TestAction |
||||||
|
buildConfiguration = "Debug" |
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"> |
||||||
|
<Testables> |
||||||
|
</Testables> |
||||||
|
</TestAction> |
||||||
|
<LaunchAction |
||||||
|
buildConfiguration = "Debug" |
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
||||||
|
launchStyle = "0" |
||||||
|
useCustomWorkingDirectory = "NO" |
||||||
|
ignoresPersistentStateOnLaunch = "NO" |
||||||
|
debugDocumentVersioning = "YES" |
||||||
|
debugServiceExtension = "internal" |
||||||
|
allowLocationSimulation = "YES"> |
||||||
|
</LaunchAction> |
||||||
|
<ProfileAction |
||||||
|
buildConfiguration = "Release" |
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES" |
||||||
|
savedToolIdentifier = "" |
||||||
|
useCustomWorkingDirectory = "NO" |
||||||
|
debugDocumentVersioning = "YES"> |
||||||
|
</ProfileAction> |
||||||
|
<AnalyzeAction |
||||||
|
buildConfiguration = "Debug"> |
||||||
|
</AnalyzeAction> |
||||||
|
<ArchiveAction |
||||||
|
buildConfiguration = "Release" |
||||||
|
revealArchiveInOrganizer = "YES"> |
||||||
|
</ArchiveAction> |
||||||
|
</Scheme> |
@ -0,0 +1,58 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<Scheme |
||||||
|
LastUpgradeVersion = "1300" |
||||||
|
version = "1.3"> |
||||||
|
<BuildAction |
||||||
|
parallelizeBuildables = "YES" |
||||||
|
buildImplicitDependencies = "YES"> |
||||||
|
<BuildActionEntries> |
||||||
|
<BuildActionEntry |
||||||
|
buildForTesting = "YES" |
||||||
|
buildForRunning = "YES" |
||||||
|
buildForProfiling = "YES" |
||||||
|
buildForArchiving = "YES" |
||||||
|
buildForAnalyzing = "YES"> |
||||||
|
<BuildableReference |
||||||
|
BuildableIdentifier = "primary" |
||||||
|
BlueprintIdentifier = "8777C9F6889E59EFFD631D80AEE9048B" |
||||||
|
BuildableName = "shared" |
||||||
|
BlueprintName = "shared" |
||||||
|
ReferencedContainer = "container:Pods.xcodeproj"> |
||||||
|
</BuildableReference> |
||||||
|
</BuildActionEntry> |
||||||
|
</BuildActionEntries> |
||||||
|
</BuildAction> |
||||||
|
<TestAction |
||||||
|
buildConfiguration = "Debug" |
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"> |
||||||
|
<Testables> |
||||||
|
</Testables> |
||||||
|
</TestAction> |
||||||
|
<LaunchAction |
||||||
|
buildConfiguration = "Debug" |
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
||||||
|
launchStyle = "0" |
||||||
|
useCustomWorkingDirectory = "NO" |
||||||
|
ignoresPersistentStateOnLaunch = "NO" |
||||||
|
debugDocumentVersioning = "YES" |
||||||
|
debugServiceExtension = "internal" |
||||||
|
allowLocationSimulation = "YES"> |
||||||
|
</LaunchAction> |
||||||
|
<ProfileAction |
||||||
|
buildConfiguration = "Release" |
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES" |
||||||
|
savedToolIdentifier = "" |
||||||
|
useCustomWorkingDirectory = "NO" |
||||||
|
debugDocumentVersioning = "YES"> |
||||||
|
</ProfileAction> |
||||||
|
<AnalyzeAction |
||||||
|
buildConfiguration = "Debug"> |
||||||
|
</AnalyzeAction> |
||||||
|
<ArchiveAction |
||||||
|
buildConfiguration = "Release" |
||||||
|
revealArchiveInOrganizer = "YES"> |
||||||
|
</ArchiveAction> |
||||||
|
</Scheme> |
@ -0,0 +1,25 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||||
|
<plist version="1.0"> |
||||||
|
<dict> |
||||||
|
<key>SchemeUserState</key> |
||||||
|
<dict> |
||||||
|
<key>Pods-iosApp.xcscheme</key> |
||||||
|
<dict> |
||||||
|
<key>isShown</key> |
||||||
|
<false/> |
||||||
|
<key>orderHint</key> |
||||||
|
<integer>0</integer> |
||||||
|
</dict> |
||||||
|
<key>shared.xcscheme</key> |
||||||
|
<dict> |
||||||
|
<key>isShown</key> |
||||||
|
<false/> |
||||||
|
<key>orderHint</key> |
||||||
|
<integer>1</integer> |
||||||
|
</dict> |
||||||
|
</dict> |
||||||
|
<key>SuppressBuildableAutocreation</key> |
||||||
|
<dict/> |
||||||
|
</dict> |
||||||
|
</plist> |
@ -0,0 +1,26 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||||
|
<plist version="1.0"> |
||||||
|
<dict> |
||||||
|
<key>CFBundleDevelopmentRegion</key> |
||||||
|
<string>en</string> |
||||||
|
<key>CFBundleExecutable</key> |
||||||
|
<string>${EXECUTABLE_NAME}</string> |
||||||
|
<key>CFBundleIdentifier</key> |
||||||
|
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string> |
||||||
|
<key>CFBundleInfoDictionaryVersion</key> |
||||||
|
<string>6.0</string> |
||||||
|
<key>CFBundleName</key> |
||||||
|
<string>${PRODUCT_NAME}</string> |
||||||
|
<key>CFBundlePackageType</key> |
||||||
|
<string>FMWK</string> |
||||||
|
<key>CFBundleShortVersionString</key> |
||||||
|
<string>1.0.0</string> |
||||||
|
<key>CFBundleSignature</key> |
||||||
|
<string>????</string> |
||||||
|
<key>CFBundleVersion</key> |
||||||
|
<string>${CURRENT_PROJECT_VERSION}</string> |
||||||
|
<key>NSPrincipalClass</key> |
||||||
|
<string></string> |
||||||
|
</dict> |
||||||
|
</plist> |
@ -0,0 +1,3 @@ |
|||||||
|
# Acknowledgements |
||||||
|
This application makes use of the following third party libraries: |
||||||
|
Generated by CocoaPods - https://cocoapods.org |
@ -0,0 +1,29 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||||
|
<plist version="1.0"> |
||||||
|
<dict> |
||||||
|
<key>PreferenceSpecifiers</key> |
||||||
|
<array> |
||||||
|
<dict> |
||||||
|
<key>FooterText</key> |
||||||
|
<string>This application makes use of the following third party libraries:</string> |
||||||
|
<key>Title</key> |
||||||
|
<string>Acknowledgements</string> |
||||||
|
<key>Type</key> |
||||||
|
<string>PSGroupSpecifier</string> |
||||||
|
</dict> |
||||||
|
<dict> |
||||||
|
<key>FooterText</key> |
||||||
|
<string>Generated by CocoaPods - https://cocoapods.org</string> |
||||||
|
<key>Title</key> |
||||||
|
<string></string> |
||||||
|
<key>Type</key> |
||||||
|
<string>PSGroupSpecifier</string> |
||||||
|
</dict> |
||||||
|
</array> |
||||||
|
<key>StringsTable</key> |
||||||
|
<string>Acknowledgements</string> |
||||||
|
<key>Title</key> |
||||||
|
<string>Acknowledgements</string> |
||||||
|
</dict> |
||||||
|
</plist> |
@ -0,0 +1,5 @@ |
|||||||
|
#import <Foundation/Foundation.h> |
||||||
|
@interface PodsDummy_Pods_iosApp : NSObject |
||||||
|
@end |
||||||
|
@implementation PodsDummy_Pods_iosApp |
||||||
|
@end |
@ -0,0 +1,16 @@ |
|||||||
|
#ifdef __OBJC__ |
||||||
|
#import <UIKit/UIKit.h> |
||||||
|
#else |
||||||
|
#ifndef FOUNDATION_EXPORT |
||||||
|
#if defined(__cplusplus) |
||||||
|
#define FOUNDATION_EXPORT extern "C" |
||||||
|
#else |
||||||
|
#define FOUNDATION_EXPORT extern |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
FOUNDATION_EXPORT double Pods_iosAppVersionNumber; |
||||||
|
FOUNDATION_EXPORT const unsigned char Pods_iosAppVersionString[]; |
||||||
|
|
@ -0,0 +1,11 @@ |
|||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO |
||||||
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../shared/build/cocoapods/framework" |
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 |
||||||
|
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' |
||||||
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -framework "shared" |
||||||
|
PODS_BUILD_DIR = ${BUILD_DIR} |
||||||
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) |
||||||
|
PODS_PODFILE_DIR_PATH = ${SRCROOT}/. |
||||||
|
PODS_ROOT = ${SRCROOT}/Pods |
||||||
|
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates |
||||||
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES |
@ -0,0 +1,6 @@ |
|||||||
|
framework module Pods_iosApp { |
||||||
|
umbrella header "Pods-iosApp-umbrella.h" |
||||||
|
|
||||||
|
export * |
||||||
|
module * { export * } |
||||||
|
} |
@ -0,0 +1,11 @@ |
|||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO |
||||||
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../shared/build/cocoapods/framework" |
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 |
||||||
|
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' |
||||||
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -framework "shared" |
||||||
|
PODS_BUILD_DIR = ${BUILD_DIR} |
||||||
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) |
||||||
|
PODS_PODFILE_DIR_PATH = ${SRCROOT}/. |
||||||
|
PODS_ROOT = ${SRCROOT}/Pods |
||||||
|
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates |
||||||
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES |
@ -0,0 +1,15 @@ |
|||||||
|
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 = :shared |
||||||
|
OTHER_LDFLAGS = $(inherited) -l"c++" |
||||||
|
PODS_BUILD_DIR = ${BUILD_DIR} |
||||||
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) |
||||||
|
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 |
@ -0,0 +1,15 @@ |
|||||||
|
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 = :shared |
||||||
|
OTHER_LDFLAGS = $(inherited) -l"c++" |
||||||
|
PODS_BUILD_DIR = ${BUILD_DIR} |
||||||
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) |
||||||
|
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 |
@ -0,0 +1,423 @@ |
|||||||
|
// !$*UTF8*$! |
||||||
|
{ |
||||||
|
archiveVersion = 1; |
||||||
|
classes = { |
||||||
|
}; |
||||||
|
objectVersion = 50; |
||||||
|
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 */; }; |
||||||
|
EF1AC847DCACB91B1B481C0E /* Pods_iosApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 399097587D30CABFAD7C5EBF /* Pods_iosApp.framework */; }; |
||||||
|
/* End PBXBuildFile section */ |
||||||
|
|
||||||
|
/* Begin PBXCopyFilesBuildPhase section */ |
||||||
|
7555FFB4242A642300829871 /* Embed Frameworks */ = { |
||||||
|
isa = PBXCopyFilesBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
dstPath = ""; |
||||||
|
dstSubfolderSpec = 10; |
||||||
|
files = ( |
||||||
|
); |
||||||
|
name = "Embed Frameworks"; |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXCopyFilesBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXFileReference section */ |
||||||
|
058557BA273AAA24004C7B11 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; |
||||||
|
058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; }; |
||||||
|
1244B5DBD38780121D5F0462 /* 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 = "<group>"; }; |
||||||
|
2152FB032600AC8F00CF470E /* iOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSApp.swift; sourceTree = "<group>"; }; |
||||||
|
399097587D30CABFAD7C5EBF /* Pods_iosApp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iosApp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
||||||
|
4B3445C2912F5920A32F4449 /* 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 = "<group>"; }; |
||||||
|
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 = "<group>"; }; |
||||||
|
/* End PBXFileReference section */ |
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */ |
||||||
|
7555FF78242A565900829871 /* Frameworks */ = { |
||||||
|
isa = PBXFrameworksBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
EF1AC847DCACB91B1B481C0E /* Pods_iosApp.framework in Frameworks */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXFrameworksBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXGroup section */ |
||||||
|
058557D7273AAEEB004C7B11 /* Preview Content */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */, |
||||||
|
); |
||||||
|
path = "Preview Content"; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
7555FF72242A565900829871 = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
7555FF7D242A565900829871 /* iosApp */, |
||||||
|
7555FF7C242A565900829871 /* Products */, |
||||||
|
7555FFB0242A642200829871 /* Frameworks */, |
||||||
|
EF190E904E5CABBC301E3B27 /* Pods */, |
||||||
|
); |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
7555FF7C242A565900829871 /* Products */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
7555FF7B242A565900829871 /* iosApp.app */, |
||||||
|
); |
||||||
|
name = Products; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
7555FF7D242A565900829871 /* iosApp */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
058557BA273AAA24004C7B11 /* Assets.xcassets */, |
||||||
|
7555FF8C242A565B00829871 /* Info.plist */, |
||||||
|
2152FB032600AC8F00CF470E /* iOSApp.swift */, |
||||||
|
058557D7273AAEEB004C7B11 /* Preview Content */, |
||||||
|
); |
||||||
|
path = iosApp; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
7555FFB0242A642200829871 /* Frameworks */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
399097587D30CABFAD7C5EBF /* Pods_iosApp.framework */, |
||||||
|
); |
||||||
|
name = Frameworks; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
EF190E904E5CABBC301E3B27 /* Pods */ = { |
||||||
|
isa = PBXGroup; |
||||||
|
children = ( |
||||||
|
1244B5DBD38780121D5F0462 /* Pods-iosApp.debug.xcconfig */, |
||||||
|
4B3445C2912F5920A32F4449 /* Pods-iosApp.release.xcconfig */, |
||||||
|
); |
||||||
|
name = Pods; |
||||||
|
path = Pods; |
||||||
|
sourceTree = "<group>"; |
||||||
|
}; |
||||||
|
/* End PBXGroup section */ |
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */ |
||||||
|
7555FF7A242A565900829871 /* iosApp */ = { |
||||||
|
isa = PBXNativeTarget; |
||||||
|
buildConfigurationList = 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "iosApp" */; |
||||||
|
buildPhases = ( |
||||||
|
A7D945ECBD212FA7DF7B846F /* [CP] Check Pods Manifest.lock */, |
||||||
|
7555FFB5242A651A00829871 /* ShellScript */, |
||||||
|
7555FF77242A565900829871 /* Sources */, |
||||||
|
7555FF78242A565900829871 /* Frameworks */, |
||||||
|
7555FF79242A565900829871 /* Resources */, |
||||||
|
7555FFB4242A642300829871 /* Embed Frameworks */, |
||||||
|
); |
||||||
|
buildRules = ( |
||||||
|
); |
||||||
|
dependencies = ( |
||||||
|
); |
||||||
|
name = iosApp; |
||||||
|
productName = iosApp; |
||||||
|
productReference = 7555FF7B242A565900829871 /* iosApp.app */; |
||||||
|
productType = "com.apple.product-type.application"; |
||||||
|
}; |
||||||
|
/* End PBXNativeTarget section */ |
||||||
|
|
||||||
|
/* Begin PBXProject section */ |
||||||
|
7555FF73242A565900829871 /* Project object */ = { |
||||||
|
isa = PBXProject; |
||||||
|
attributes = { |
||||||
|
LastSwiftUpdateCheck = 1130; |
||||||
|
LastUpgradeCheck = 1130; |
||||||
|
ORGANIZATIONNAME = orgName; |
||||||
|
TargetAttributes = { |
||||||
|
7555FF7A242A565900829871 = { |
||||||
|
CreatedOnToolsVersion = 11.3.1; |
||||||
|
}; |
||||||
|
}; |
||||||
|
}; |
||||||
|
buildConfigurationList = 7555FF76242A565900829871 /* Build configuration list for PBXProject "iosApp" */; |
||||||
|
compatibilityVersion = "Xcode 9.3"; |
||||||
|
developmentRegion = en; |
||||||
|
hasScannedForEncodings = 0; |
||||||
|
knownRegions = ( |
||||||
|
en, |
||||||
|
Base, |
||||||
|
); |
||||||
|
mainGroup = 7555FF72242A565900829871; |
||||||
|
productRefGroup = 7555FF7C242A565900829871 /* Products */; |
||||||
|
projectDirPath = ""; |
||||||
|
projectRoot = ""; |
||||||
|
targets = ( |
||||||
|
7555FF7A242A565900829871 /* iosApp */, |
||||||
|
); |
||||||
|
}; |
||||||
|
/* End PBXProject section */ |
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */ |
||||||
|
7555FF79242A565900829871 /* Resources */ = { |
||||||
|
isa = PBXResourcesBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */, |
||||||
|
058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXResourcesBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXShellScriptBuildPhase section */ |
||||||
|
7555FFB5242A651A00829871 /* ShellScript */ = { |
||||||
|
isa = PBXShellScriptBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
); |
||||||
|
inputFileListPaths = ( |
||||||
|
); |
||||||
|
inputPaths = ( |
||||||
|
); |
||||||
|
outputFileListPaths = ( |
||||||
|
); |
||||||
|
outputPaths = ( |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
shellPath = /bin/sh; |
||||||
|
shellScript = "cd \"$SRCROOT/..\"\n./gradlew :shared:embedAndSignAppleFrameworkForXcode\n"; |
||||||
|
}; |
||||||
|
A7D945ECBD212FA7DF7B846F /* [CP] Check Pods Manifest.lock */ = { |
||||||
|
isa = PBXShellScriptBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
); |
||||||
|
inputFileListPaths = ( |
||||||
|
); |
||||||
|
inputPaths = ( |
||||||
|
"${PODS_PODFILE_DIR_PATH}/Podfile.lock", |
||||||
|
"${PODS_ROOT}/Manifest.lock", |
||||||
|
); |
||||||
|
name = "[CP] Check Pods Manifest.lock"; |
||||||
|
outputFileListPaths = ( |
||||||
|
); |
||||||
|
outputPaths = ( |
||||||
|
"$(DERIVED_FILE_DIR)/Pods-iosApp-checkManifestLockResult.txt", |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
shellPath = /bin/sh; |
||||||
|
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; |
||||||
|
showEnvVarsInLog = 0; |
||||||
|
}; |
||||||
|
/* End PBXShellScriptBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */ |
||||||
|
7555FF77242A565900829871 /* Sources */ = { |
||||||
|
isa = PBXSourcesBuildPhase; |
||||||
|
buildActionMask = 2147483647; |
||||||
|
files = ( |
||||||
|
2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */, |
||||||
|
); |
||||||
|
runOnlyForDeploymentPostprocessing = 0; |
||||||
|
}; |
||||||
|
/* End PBXSourcesBuildPhase section */ |
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */ |
||||||
|
7555FFA3242A565B00829871 /* Debug */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
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_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-with-dsym"; |
||||||
|
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 = ( |
||||||
|
"DEBUG=1", |
||||||
|
"$(inherited)", |
||||||
|
); |
||||||
|
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 = 14.1; |
||||||
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; |
||||||
|
MTL_FAST_MATH = YES; |
||||||
|
ONLY_ACTIVE_ARCH = YES; |
||||||
|
SDKROOT = iphoneos; |
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; |
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; |
||||||
|
}; |
||||||
|
name = Debug; |
||||||
|
}; |
||||||
|
7555FFA4242A565B00829871 /* Release */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
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_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-with-dsym"; |
||||||
|
ENABLE_NS_ASSERTIONS = NO; |
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES; |
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11; |
||||||
|
GCC_NO_COMMON_BLOCKS = YES; |
||||||
|
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 = 14.1; |
||||||
|
MTL_ENABLE_DEBUG_INFO = NO; |
||||||
|
MTL_FAST_MATH = YES; |
||||||
|
SDKROOT = iphoneos; |
||||||
|
SWIFT_COMPILATION_MODE = wholemodule; |
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O"; |
||||||
|
VALIDATE_PRODUCT = YES; |
||||||
|
}; |
||||||
|
name = Release; |
||||||
|
}; |
||||||
|
7555FFA6242A565B00829871 /* Debug */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
baseConfigurationReference = 1244B5DBD38780121D5F0462 /* Pods-iosApp.debug.xcconfig */; |
||||||
|
buildSettings = { |
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
||||||
|
CODE_SIGN_STYLE = Automatic; |
||||||
|
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\""; |
||||||
|
DEVELOPMENT_TEAM = 35M6G2GGQB; |
||||||
|
ENABLE_PREVIEWS = YES; |
||||||
|
FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)"; |
||||||
|
INFOPLIST_FILE = iosApp/Info.plist; |
||||||
|
LD_RUNPATH_SEARCH_PATHS = ( |
||||||
|
"$(inherited)", |
||||||
|
"@executable_path/Frameworks", |
||||||
|
); |
||||||
|
OTHER_LDFLAGS = ( |
||||||
|
"$(inherited)", |
||||||
|
"-framework", |
||||||
|
shared, |
||||||
|
); |
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = orgIdentifier.iosApp; |
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||||
|
SWIFT_VERSION = 5.0; |
||||||
|
TARGETED_DEVICE_FAMILY = "1,2"; |
||||||
|
}; |
||||||
|
name = Debug; |
||||||
|
}; |
||||||
|
7555FFA7242A565B00829871 /* Release */ = { |
||||||
|
isa = XCBuildConfiguration; |
||||||
|
baseConfigurationReference = 4B3445C2912F5920A32F4449 /* Pods-iosApp.release.xcconfig */; |
||||||
|
buildSettings = { |
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
||||||
|
CODE_SIGN_STYLE = Automatic; |
||||||
|
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\""; |
||||||
|
DEVELOPMENT_TEAM = 35M6G2GGQB; |
||||||
|
ENABLE_PREVIEWS = YES; |
||||||
|
FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)"; |
||||||
|
INFOPLIST_FILE = iosApp/Info.plist; |
||||||
|
LD_RUNPATH_SEARCH_PATHS = ( |
||||||
|
"$(inherited)", |
||||||
|
"@executable_path/Frameworks", |
||||||
|
); |
||||||
|
OTHER_LDFLAGS = ( |
||||||
|
"$(inherited)", |
||||||
|
"-framework", |
||||||
|
shared, |
||||||
|
); |
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = orgIdentifier.iosApp; |
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)"; |
||||||
|
SWIFT_VERSION = 5.0; |
||||||
|
TARGETED_DEVICE_FAMILY = "1,2"; |
||||||
|
}; |
||||||
|
name = Release; |
||||||
|
}; |
||||||
|
/* End XCBuildConfiguration section */ |
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */ |
||||||
|
7555FF76242A565900829871 /* Build configuration list for PBXProject "iosApp" */ = { |
||||||
|
isa = XCConfigurationList; |
||||||
|
buildConfigurations = ( |
||||||
|
7555FFA3242A565B00829871 /* Debug */, |
||||||
|
7555FFA4242A565B00829871 /* Release */, |
||||||
|
); |
||||||
|
defaultConfigurationIsVisible = 0; |
||||||
|
defaultConfigurationName = Release; |
||||||
|
}; |
||||||
|
7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "iosApp" */ = { |
||||||
|
isa = XCConfigurationList; |
||||||
|
buildConfigurations = ( |
||||||
|
7555FFA6242A565B00829871 /* Debug */, |
||||||
|
7555FFA7242A565B00829871 /* Release */, |
||||||
|
); |
||||||
|
defaultConfigurationIsVisible = 0; |
||||||
|
defaultConfigurationName = Release; |
||||||
|
}; |
||||||
|
/* End XCConfigurationList section */ |
||||||
|
}; |
||||||
|
rootObject = 7555FF73242A565900829871 /* Project object */; |
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||||
|
<plist version="1.0"> |
||||||
|
<dict> |
||||||
|
<key>IDEDidComputeMac32BitWarning</key> |
||||||
|
<true/> |
||||||
|
</dict> |
||||||
|
</plist> |
Binary file not shown.
@ -0,0 +1,14 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||||
|
<plist version="1.0"> |
||||||
|
<dict> |
||||||
|
<key>SchemeUserState</key> |
||||||
|
<dict> |
||||||
|
<key>iosApp.xcscheme_^#shared#^_</key> |
||||||
|
<dict> |
||||||
|
<key>orderHint</key> |
||||||
|
<integer>2</integer> |
||||||
|
</dict> |
||||||
|
</dict> |
||||||
|
</dict> |
||||||
|
</plist> |
@ -0,0 +1,10 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<Workspace |
||||||
|
version = "1.0"> |
||||||
|
<FileRef |
||||||
|
location = "group:iosApp.xcodeproj"> |
||||||
|
</FileRef> |
||||||
|
<FileRef |
||||||
|
location = "group:Pods/Pods.xcodeproj"> |
||||||
|
</FileRef> |
||||||
|
</Workspace> |
@ -0,0 +1,8 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||||
|
<plist version="1.0"> |
||||||
|
<dict> |
||||||
|
<key>IDEDidComputeMac32BitWarning</key> |
||||||
|
<true/> |
||||||
|
</dict> |
||||||
|
</plist> |
Binary file not shown.
@ -0,0 +1,11 @@ |
|||||||
|
{ |
||||||
|
"colors" : [ |
||||||
|
{ |
||||||
|
"idiom" : "universal" |
||||||
|
} |
||||||
|
], |
||||||
|
"info" : { |
||||||
|
"author" : "xcode", |
||||||
|
"version" : 1 |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,98 @@ |
|||||||
|
{ |
||||||
|
"images" : [ |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"scale" : "2x", |
||||||
|
"size" : "20x20" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"scale" : "3x", |
||||||
|
"size" : "20x20" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"scale" : "2x", |
||||||
|
"size" : "29x29" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"scale" : "3x", |
||||||
|
"size" : "29x29" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"scale" : "2x", |
||||||
|
"size" : "40x40" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"scale" : "3x", |
||||||
|
"size" : "40x40" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"scale" : "2x", |
||||||
|
"size" : "60x60" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "iphone", |
||||||
|
"scale" : "3x", |
||||||
|
"size" : "60x60" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"scale" : "1x", |
||||||
|
"size" : "20x20" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"scale" : "2x", |
||||||
|
"size" : "20x20" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"scale" : "1x", |
||||||
|
"size" : "29x29" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"scale" : "2x", |
||||||
|
"size" : "29x29" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"scale" : "1x", |
||||||
|
"size" : "40x40" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"scale" : "2x", |
||||||
|
"size" : "40x40" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"scale" : "1x", |
||||||
|
"size" : "76x76" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"scale" : "2x", |
||||||
|
"size" : "76x76" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ipad", |
||||||
|
"scale" : "2x", |
||||||
|
"size" : "83.5x83.5" |
||||||
|
}, |
||||||
|
{ |
||||||
|
"idiom" : "ios-marketing", |
||||||
|
"scale" : "1x", |
||||||
|
"size" : "1024x1024" |
||||||
|
} |
||||||
|
], |
||||||
|
"info" : { |
||||||
|
"author" : "xcode", |
||||||
|
"version" : 1 |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,6 @@ |
|||||||
|
{ |
||||||
|
"info" : { |
||||||
|
"author" : "xcode", |
||||||
|
"version" : 1 |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
import SwiftUI |
||||||
|
import shared |
||||||
|
|
||||||
|
struct ContentView: View { |
||||||
|
let greet = Greeting().greet() |
||||||
|
|
||||||
|
var body: some View { |
||||||
|
Text(greet) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
struct ContentView_Previews: PreviewProvider { |
||||||
|
static var previews: some View { |
||||||
|
ContentView() |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||||
|
<plist version="1.0"> |
||||||
|
<dict> |
||||||
|
<key>CFBundleDevelopmentRegion</key> |
||||||
|
<string>$(DEVELOPMENT_LANGUAGE)</string> |
||||||
|
<key>CFBundleExecutable</key> |
||||||
|
<string>$(EXECUTABLE_NAME)</string> |
||||||
|
<key>CFBundleIdentifier</key> |
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> |
||||||
|
<key>CFBundleInfoDictionaryVersion</key> |
||||||
|
<string>6.0</string> |
||||||
|
<key>CFBundleName</key> |
||||||
|
<string>$(PRODUCT_NAME)</string> |
||||||
|
<key>CFBundlePackageType</key> |
||||||
|
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string> |
||||||
|
<key>CFBundleShortVersionString</key> |
||||||
|
<string>1.0</string> |
||||||
|
<key>CFBundleVersion</key> |
||||||
|
<string>1</string> |
||||||
|
<key>LSRequiresIPhoneOS</key> |
||||||
|
<true/> |
||||||
|
<key>UIApplicationSceneManifest</key> |
||||||
|
<dict> |
||||||
|
<key>UIApplicationSupportsMultipleScenes</key> |
||||||
|
<false/> |
||||||
|
</dict> |
||||||
|
<key>UIRequiredDeviceCapabilities</key> |
||||||
|
<array> |
||||||
|
<string>armv7</string> |
||||||
|
</array> |
||||||
|
<key>UISupportedInterfaceOrientations</key> |
||||||
|
<array> |
||||||
|
<string>UIInterfaceOrientationPortrait</string> |
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string> |
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string> |
||||||
|
</array> |
||||||
|
<key>UISupportedInterfaceOrientations~ipad</key> |
||||||
|
<array> |
||||||
|
<string>UIInterfaceOrientationPortrait</string> |
||||||
|
<string>UIInterfaceOrientationPortraitUpsideDown</string> |
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string> |
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string> |
||||||
|
</array> |
||||||
|
<key>UILaunchScreen</key> |
||||||
|
<dict/> |
||||||
|
</dict> |
||||||
|
</plist> |
@ -0,0 +1,6 @@ |
|||||||
|
{ |
||||||
|
"info" : { |
||||||
|
"author" : "xcode", |
||||||
|
"version" : 1 |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
import SwiftUI |
||||||
|
import shared |
||||||
|
|
||||||
|
@UIApplicationMain |
||||||
|
class AppDelegate: UIResponder, UIApplicationDelegate { |
||||||
|
var myWindow: UIWindow? |
||||||
|
|
||||||
|
func application( |
||||||
|
_ application: UIApplication, |
||||||
|
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? |
||||||
|
) -> Bool { |
||||||
|
myWindow = UIWindow(frame: UIScreen.main.bounds) |
||||||
|
let mainViewController = IOSRootContentKt.RootViewController() |
||||||
|
myWindow?.rootViewController = mainViewController |
||||||
|
myWindow?.makeKeyAndVisible() |
||||||
|
return true |
||||||
|
} |
||||||
|
|
||||||
|
func application( |
||||||
|
_ application: UIApplication, |
||||||
|
supportedInterfaceOrientationsFor supportedInterfaceOrientationsForWindow: UIWindow? |
||||||
|
) -> UIInterfaceOrientationMask { |
||||||
|
return UIInterfaceOrientationMask.all |
||||||
|
} |
||||||
|
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,8 @@ |
|||||||
|
## 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. |
||||||
|
#Sun May 21 10:03:36 BST 2023 |
||||||
|
sdk.dir=/Users/adrianwitaszak/Library/Android/sdk |
After Width: | Height: | Size: 128 KiB |
After Width: | Height: | Size: 605 KiB |
After Width: | Height: | Size: 664 KiB |
After Width: | Height: | Size: 94 KiB |
@ -0,0 +1,28 @@ |
|||||||
|
pluginManagement { |
||||||
|
repositories { |
||||||
|
google() |
||||||
|
gradlePluginPortal() |
||||||
|
mavenCentral() |
||||||
|
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") |
||||||
|
maven("https://us-central1-maven.pkg.dev/varabyte-repos/public") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
dependencyResolutionManagement { |
||||||
|
repositories { |
||||||
|
google() |
||||||
|
mavenCentral() |
||||||
|
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") |
||||||
|
maven("https://us-central1-maven.pkg.dev/varabyte-repos/public") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
rootProject.name = "BallastSharedUI" |
||||||
|
include( |
||||||
|
":androidApp", |
||||||
|
":web", |
||||||
|
":shared", |
||||||
|
":feature:router", |
||||||
|
":feature:home", |
||||||
|
":feature:counter", |
||||||
|
) |
@ -0,0 +1,2 @@ |
|||||||
|
/build |
||||||
|
.gradle |
@ -0,0 +1,101 @@ |
|||||||
|
plugins { |
||||||
|
kotlin("multiplatform") |
||||||
|
kotlin("native.cocoapods") |
||||||
|
id("com.android.library") |
||||||
|
id("org.jetbrains.compose") |
||||||
|
} |
||||||
|
|
||||||
|
kotlin { |
||||||
|
android() |
||||||
|
ios() |
||||||
|
iosSimulatorArm64() |
||||||
|
jvm("desktop") { |
||||||
|
compilations.all { |
||||||
|
kotlinOptions.jvmTarget = "11" |
||||||
|
} |
||||||
|
} |
||||||
|
js(IR) { |
||||||
|
moduleName = project.name |
||||||
|
browser { |
||||||
|
commonWebpackConfig { |
||||||
|
outputFileName = "$moduleName.js" |
||||||
|
} |
||||||
|
} |
||||||
|
binaries.executable() |
||||||
|
} |
||||||
|
|
||||||
|
cocoapods { |
||||||
|
framework { |
||||||
|
summary = "Shared code for Ballast app" |
||||||
|
homepage = "http://" |
||||||
|
baseName = project.name |
||||||
|
isStatic = true |
||||||
|
} |
||||||
|
ios.deploymentTarget = "11" |
||||||
|
version = "1.11.3" |
||||||
|
} |
||||||
|
|
||||||
|
sourceSets { |
||||||
|
val commonMain by getting { |
||||||
|
dependencies { |
||||||
|
implementation(project(":feature:router")) |
||||||
|
implementation(project(":feature:counter")) |
||||||
|
implementation(project(":feature:home")) |
||||||
|
implementation(compose.animation) |
||||||
|
implementation(compose.animationGraphics) |
||||||
|
implementation(compose.foundation) |
||||||
|
implementation(compose.material) |
||||||
|
implementation(compose.materialIconsExtended) |
||||||
|
implementation(compose.runtime) |
||||||
|
implementation(compose.ui) |
||||||
|
implementation(libs.ballast.core) |
||||||
|
implementation(libs.ballast.navigation) |
||||||
|
} |
||||||
|
} |
||||||
|
val androidMain by getting |
||||||
|
val iosMain by getting { |
||||||
|
dependsOn(commonMain) |
||||||
|
} |
||||||
|
val iosSimulatorArm64Main by getting { |
||||||
|
dependsOn(iosMain) |
||||||
|
} |
||||||
|
val desktopMain by getting { |
||||||
|
dependencies { |
||||||
|
implementation(compose.desktop.currentOs) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
android { |
||||||
|
namespace = "com.adrianwitaszak.ballastsharedui.${project.name}" |
||||||
|
compileSdk = 33 |
||||||
|
defaultConfig { |
||||||
|
minSdk = 24 |
||||||
|
} |
||||||
|
compileOptions { |
||||||
|
sourceCompatibility = JavaVersion.VERSION_11 |
||||||
|
targetCompatibility = JavaVersion.VERSION_11 |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
compose { |
||||||
|
desktop { |
||||||
|
application { |
||||||
|
mainClass = "MainKt" |
||||||
|
nativeDistributions { |
||||||
|
targetFormats( |
||||||
|
org.jetbrains.compose.desktop.application.dsl.TargetFormat.Dmg, |
||||||
|
org.jetbrains.compose.desktop.application.dsl.TargetFormat.Msi, |
||||||
|
org.jetbrains.compose.desktop.application.dsl.TargetFormat.Deb |
||||||
|
) |
||||||
|
packageName = "Ballast" |
||||||
|
packageVersion = "1.0.0" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
java { |
||||||
|
toolchain.languageVersion.set(JavaLanguageVersion.of(11)) |
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
Pod::Spec.new do |spec| |
||||||
|
spec.name = 'shared' |
||||||
|
spec.version = '1.11.3' |
||||||
|
spec.homepage = 'http://' |
||||||
|
spec.source = { :http=> ''} |
||||||
|
spec.authors = '' |
||||||
|
spec.license = '' |
||||||
|
spec.summary = 'Shared code for Ballast app' |
||||||
|
spec.vendored_frameworks = 'build/cocoapods/framework/shared.framework' |
||||||
|
spec.libraries = 'c++' |
||||||
|
spec.ios.deployment_target = '11' |
||||||
|
|
||||||
|
|
||||||
|
spec.pod_target_xcconfig = { |
||||||
|
'KOTLIN_PROJECT_PATH' => ':shared', |
||||||
|
'PRODUCT_MODULE_NAME' => 'shared', |
||||||
|
} |
||||||
|
|
||||||
|
spec.script_phases = [ |
||||||
|
{ |
||||||
|
:name => 'Build shared', |
||||||
|
: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/../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 |
||||||
|
} |
||||||
|
] |
||||||
|
|
||||||
|
end |
@ -0,0 +1,9 @@ |
|||||||
|
package com.ballast.sharedui |
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import com.ballast.sharedui.content.RootContent |
||||||
|
|
||||||
|
@Composable |
||||||
|
fun AndroidRootContent() { |
||||||
|
RootContent() |
||||||
|
} |
@ -0,0 +1,70 @@ |
|||||||
|
package com.ballast.sharedui.content |
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Box |
||||||
|
import androidx.compose.foundation.layout.Column |
||||||
|
import androidx.compose.foundation.layout.Row |
||||||
|
import androidx.compose.foundation.layout.fillMaxSize |
||||||
|
import androidx.compose.foundation.layout.padding |
||||||
|
import androidx.compose.material.Button |
||||||
|
import androidx.compose.material.MaterialTheme |
||||||
|
import androidx.compose.material.Surface |
||||||
|
import androidx.compose.material.Text |
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import androidx.compose.runtime.collectAsState |
||||||
|
import androidx.compose.runtime.getValue |
||||||
|
import androidx.compose.runtime.remember |
||||||
|
import androidx.compose.runtime.rememberCoroutineScope |
||||||
|
import androidx.compose.ui.Alignment |
||||||
|
import androidx.compose.ui.Modifier |
||||||
|
import androidx.compose.ui.unit.dp |
||||||
|
import com.ballast.sharedui.root.CounterContract |
||||||
|
import com.ballast.sharedui.root.CounterViewModel |
||||||
|
|
||||||
|
@Composable |
||||||
|
internal fun CounterContent( |
||||||
|
onGoBack: () -> Unit, |
||||||
|
) { |
||||||
|
val coroutineScope = rememberCoroutineScope() |
||||||
|
val vm = remember(coroutineScope) { CounterViewModel(coroutineScope) } |
||||||
|
val state by vm.observeStates().collectAsState() |
||||||
|
|
||||||
|
Surface( |
||||||
|
modifier = Modifier.fillMaxSize(), |
||||||
|
color = MaterialTheme.colors.background |
||||||
|
) { |
||||||
|
Box( |
||||||
|
contentAlignment = Alignment.Center, |
||||||
|
modifier = Modifier.fillMaxSize() |
||||||
|
) { |
||||||
|
Column(horizontalAlignment = Alignment.CenterHorizontally) { |
||||||
|
Text( |
||||||
|
text = "Counter", |
||||||
|
style = MaterialTheme.typography.h2, |
||||||
|
modifier = Modifier.padding(16.dp) |
||||||
|
) |
||||||
|
Row(verticalAlignment = Alignment.CenterVertically) { |
||||||
|
Button( |
||||||
|
onClick = { vm.trySend(CounterContract.Inputs.Decrement()) } |
||||||
|
) { |
||||||
|
Text("-") |
||||||
|
} |
||||||
|
Text( |
||||||
|
text = state.count.toString(), |
||||||
|
modifier = Modifier.padding(horizontal = 16.dp) |
||||||
|
) |
||||||
|
Button( |
||||||
|
onClick = { vm.trySend(CounterContract.Inputs.Increment()) } |
||||||
|
) { |
||||||
|
Text("+") |
||||||
|
} |
||||||
|
} |
||||||
|
Button( |
||||||
|
onClick = onGoBack, |
||||||
|
modifier = Modifier.padding(16.dp) |
||||||
|
) { |
||||||
|
Text("Go Back") |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,77 @@ |
|||||||
|
package com.ballast.sharedui.content |
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Box |
||||||
|
import androidx.compose.foundation.layout.Column |
||||||
|
import androidx.compose.foundation.layout.fillMaxSize |
||||||
|
import androidx.compose.foundation.layout.padding |
||||||
|
import androidx.compose.material.Button |
||||||
|
import androidx.compose.material.MaterialTheme |
||||||
|
import androidx.compose.material.Surface |
||||||
|
import androidx.compose.material.Text |
||||||
|
import androidx.compose.material.TextField |
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import androidx.compose.runtime.collectAsState |
||||||
|
import androidx.compose.runtime.getValue |
||||||
|
import androidx.compose.runtime.remember |
||||||
|
import androidx.compose.runtime.rememberCoroutineScope |
||||||
|
import androidx.compose.ui.Alignment |
||||||
|
import androidx.compose.ui.Modifier |
||||||
|
import androidx.compose.ui.unit.dp |
||||||
|
import com.ballast.sharedui.root.HomeContract |
||||||
|
import com.ballast.sharedui.root.HomeViewModel |
||||||
|
|
||||||
|
@Composable |
||||||
|
internal fun HomeContent( |
||||||
|
onGoToCounter: () -> Unit, |
||||||
|
) { |
||||||
|
val coroutineScope = rememberCoroutineScope() |
||||||
|
val vm = remember(coroutineScope) { HomeViewModel(coroutineScope) } |
||||||
|
val state by vm.observeStates().collectAsState() |
||||||
|
|
||||||
|
Surface( |
||||||
|
modifier = Modifier.fillMaxSize(), |
||||||
|
color = MaterialTheme.colors.background |
||||||
|
) { |
||||||
|
Box( |
||||||
|
contentAlignment = Alignment.Center, |
||||||
|
modifier = Modifier.fillMaxSize() |
||||||
|
) { |
||||||
|
Column(horizontalAlignment = Alignment.CenterHorizontally) { |
||||||
|
Text( |
||||||
|
text = "Welcome to Ballast", |
||||||
|
style = MaterialTheme.typography.h2, |
||||||
|
modifier = Modifier.padding(16.dp) |
||||||
|
) |
||||||
|
Text( |
||||||
|
text = "What's you name?", |
||||||
|
style = MaterialTheme.typography.h4, |
||||||
|
modifier = Modifier.padding(16.dp) |
||||||
|
) |
||||||
|
TextField( |
||||||
|
value = state.name, |
||||||
|
onValueChange = { vm.trySend(HomeContract.Inputs.OnNameChanged(it)) }, |
||||||
|
label = { Text("Name") }, |
||||||
|
modifier = Modifier.padding(16.dp) |
||||||
|
) |
||||||
|
if (state.name.isNotEmpty()) { |
||||||
|
Text( |
||||||
|
text = "Hello ${state.name}!", |
||||||
|
style = MaterialTheme.typography.h4, |
||||||
|
modifier = Modifier.padding(16.dp) |
||||||
|
) |
||||||
|
} else { |
||||||
|
Text( |
||||||
|
text = "Please enter your name", |
||||||
|
style = MaterialTheme.typography.h4, |
||||||
|
modifier = Modifier.padding(16.dp) |
||||||
|
) |
||||||
|
} |
||||||
|
Button( |
||||||
|
onClick = onGoToCounter |
||||||
|
) { |
||||||
|
Text("Go to Counter") |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
package com.ballast.sharedui.content |
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Box |
||||||
|
import androidx.compose.foundation.layout.Column |
||||||
|
import androidx.compose.foundation.layout.Row |
||||||
|
import androidx.compose.foundation.layout.fillMaxSize |
||||||
|
import androidx.compose.foundation.layout.padding |
||||||
|
import androidx.compose.material.Button |
||||||
|
import androidx.compose.material.MaterialTheme |
||||||
|
import androidx.compose.material.Surface |
||||||
|
import androidx.compose.material.Text |
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import androidx.compose.runtime.collectAsState |
||||||
|
import androidx.compose.runtime.getValue |
||||||
|
import androidx.compose.runtime.remember |
||||||
|
import androidx.compose.runtime.rememberCoroutineScope |
||||||
|
import androidx.compose.ui.Alignment |
||||||
|
import androidx.compose.ui.Modifier |
||||||
|
import androidx.compose.ui.unit.dp |
||||||
|
import com.ballast.sharedui.root.CounterContract |
||||||
|
import com.ballast.sharedui.root.CounterViewModel |
||||||
|
import com.ballast.sharedui.theme.MyApplicationTheme |
||||||
|
|
||||||
|
@Composable |
||||||
|
internal fun RootContent() { |
||||||
|
MyApplicationTheme { |
||||||
|
RouterContent() |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,43 @@ |
|||||||
|
package com.ballast.sharedui.content |
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import androidx.compose.runtime.collectAsState |
||||||
|
import androidx.compose.runtime.getValue |
||||||
|
import androidx.compose.runtime.remember |
||||||
|
import androidx.compose.runtime.rememberCoroutineScope |
||||||
|
import com.ballast.shoppe.feature.router.RouterScreen |
||||||
|
import com.ballast.shoppe.feature.router.RouterViewModel |
||||||
|
import com.copperleaf.ballast.navigation.routing.Backstack |
||||||
|
import com.copperleaf.ballast.navigation.routing.RouterContract |
||||||
|
import com.copperleaf.ballast.navigation.routing.renderCurrentDestination |
||||||
|
import com.copperleaf.ballast.navigation.vm.Router |
||||||
|
|
||||||
|
@Composable |
||||||
|
internal fun RouterContent() { |
||||||
|
val coroutineScope = rememberCoroutineScope() |
||||||
|
val router: Router<RouterScreen> = |
||||||
|
remember(coroutineScope) { |
||||||
|
RouterViewModel( |
||||||
|
viewModelScope = coroutineScope, |
||||||
|
initialRoute = RouterScreen.Home, |
||||||
|
) |
||||||
|
} |
||||||
|
val routerState: Backstack<RouterScreen> by router.observeStates().collectAsState() |
||||||
|
|
||||||
|
routerState.renderCurrentDestination( |
||||||
|
route = { routerScreen: RouterScreen -> |
||||||
|
when (routerScreen) { |
||||||
|
RouterScreen.Home -> HomeContent( |
||||||
|
onGoToCounter = { |
||||||
|
router.trySend(RouterContract.Inputs.GoToDestination(RouterScreen.Counter.matcher.routeFormat)) |
||||||
|
} |
||||||
|
) |
||||||
|
|
||||||
|
RouterScreen.Counter -> CounterContent( |
||||||
|
onGoBack = { router.trySend(RouterContract.Inputs.GoBack()) }, |
||||||
|
) |
||||||
|
} |
||||||
|
}, |
||||||
|
notFound = { }, |
||||||
|
) |
||||||
|
} |
@ -0,0 +1,55 @@ |
|||||||
|
package com.ballast.sharedui.theme |
||||||
|
|
||||||
|
import androidx.compose.foundation.isSystemInDarkTheme |
||||||
|
import androidx.compose.foundation.shape.RoundedCornerShape |
||||||
|
import androidx.compose.material.MaterialTheme |
||||||
|
import androidx.compose.material.Shapes |
||||||
|
import androidx.compose.material.Typography |
||||||
|
import androidx.compose.material.darkColors |
||||||
|
import androidx.compose.material.lightColors |
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import androidx.compose.ui.graphics.Color |
||||||
|
import androidx.compose.ui.text.TextStyle |
||||||
|
import androidx.compose.ui.text.font.FontFamily |
||||||
|
import androidx.compose.ui.text.font.FontWeight |
||||||
|
import androidx.compose.ui.unit.dp |
||||||
|
import androidx.compose.ui.unit.sp |
||||||
|
|
||||||
|
@Composable |
||||||
|
internal fun MyApplicationTheme( |
||||||
|
darkTheme: Boolean = isSystemInDarkTheme(), |
||||||
|
content: @Composable () -> Unit |
||||||
|
) { |
||||||
|
val colors = if (darkTheme) { |
||||||
|
darkColors( |
||||||
|
primary = Color(0xFFBB86FC), |
||||||
|
primaryVariant = Color(0xFF3700B3), |
||||||
|
secondary = Color(0xFF03DAC5) |
||||||
|
) |
||||||
|
} else { |
||||||
|
lightColors( |
||||||
|
primary = Color(0xFF6200EE), |
||||||
|
primaryVariant = Color(0xFF3700B3), |
||||||
|
secondary = Color(0xFF03DAC5) |
||||||
|
) |
||||||
|
} |
||||||
|
val typography = Typography( |
||||||
|
body1 = TextStyle( |
||||||
|
fontFamily = FontFamily.Default, |
||||||
|
fontWeight = FontWeight.Normal, |
||||||
|
fontSize = 16.sp |
||||||
|
) |
||||||
|
) |
||||||
|
val shapes = Shapes( |
||||||
|
small = RoundedCornerShape(4.dp), |
||||||
|
medium = RoundedCornerShape(4.dp), |
||||||
|
large = RoundedCornerShape(0.dp) |
||||||
|
) |
||||||
|
|
||||||
|
MaterialTheme( |
||||||
|
colors = colors, |
||||||
|
typography = typography, |
||||||
|
shapes = shapes, |
||||||
|
content = content |
||||||
|
) |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
import androidx.compose.ui.window.Window |
||||||
|
import androidx.compose.ui.window.application |
||||||
|
import androidx.compose.ui.window.rememberWindowState |
||||||
|
import com.ballast.sharedui.DesktopRootContent |
||||||
|
|
||||||
|
fun main() { |
||||||
|
application { |
||||||
|
val windowState = rememberWindowState() |
||||||
|
|
||||||
|
Window( |
||||||
|
onCloseRequest = ::exitApplication, |
||||||
|
state = windowState, |
||||||
|
title = "Shoppe", |
||||||
|
) { |
||||||
|
DesktopRootContent() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
package com.ballast.sharedui |
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import com.ballast.sharedui.content.RootContent |
||||||
|
|
||||||
|
@Composable |
||||||
|
fun DesktopRootContent() { |
||||||
|
RootContent() |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package com.ballast.sharedui |
||||||
|
|
||||||
|
import androidx.compose.ui.window.ComposeUIViewController |
||||||
|
import com.ballast.sharedui.content.RootContent |
||||||
|
import platform.UIKit.UIViewController |
||||||
|
|
||||||
|
@Suppress("FunctionName", "unused") // Used in iOS |
||||||
|
fun RootViewController(): UIViewController = ComposeUIViewController { |
||||||
|
RootContent() |
||||||
|
} |
@ -0,0 +1,4 @@ |
|||||||
|
/build |
||||||
|
# Kobweb ignores |
||||||
|
.kobweb/* |
||||||
|
!.kobweb/conf.yaml |
@ -0,0 +1,13 @@ |
|||||||
|
site: |
||||||
|
title: "Ballast" |
||||||
|
|
||||||
|
server: |
||||||
|
files: |
||||||
|
dev: |
||||||
|
contentRoot: "build/processedResources/js/main/public" |
||||||
|
script: "build/developmentExecutable/web.js" |
||||||
|
prod: |
||||||
|
script: "build/distributions/web.js" |
||||||
|
siteRoot: ".kobweb/site" |
||||||
|
|
||||||
|
port: 8080 |
@ -0,0 +1,53 @@ |
|||||||
|
This is a [Kobweb](https://github.com/varabyte/kobweb) project bootstrapped with the `app/empty` template. |
||||||
|
|
||||||
|
This template is useful if you already know what you're doing and just want a clean slate. By default, it |
||||||
|
just creates a blank home page (which prints to the console so you can confirm it's working) |
||||||
|
|
||||||
|
If you are still learning, consider instantiating the `app` template (or one of the examples) to see actual, |
||||||
|
working projects. |
||||||
|
|
||||||
|
## Getting Started |
||||||
|
|
||||||
|
First, run the development server by typing the following command in a terminal under the `site` folder: |
||||||
|
|
||||||
|
```bash |
||||||
|
$ cd site |
||||||
|
$ kobweb run |
||||||
|
``` |
||||||
|
|
||||||
|
Open [http://localhost:8080](http://localhost:8080) with your browser to see the result. |
||||||
|
|
||||||
|
You can use any editor you want for the project, but we recommend using **IntelliJ IDEA Community Edition** downloaded |
||||||
|
using the [Toolbox App](https://www.jetbrains.com/toolbox-app/). |
||||||
|
|
||||||
|
Press `Q` in the terminal to gracefully stop the server. |
||||||
|
|
||||||
|
### Live Reload |
||||||
|
|
||||||
|
Feel free to edit / add / delete new components, pages, and API endpoints! When you make any changes, the site will |
||||||
|
indicate the status of the build and automatically reload when ready. |
||||||
|
|
||||||
|
## Exporting the Project |
||||||
|
|
||||||
|
When you are ready to ship, you should shutdown the development server and then export the project using: |
||||||
|
|
||||||
|
```bash |
||||||
|
kobweb export |
||||||
|
``` |
||||||
|
|
||||||
|
When finished, you can run a Kobweb server in production mode: |
||||||
|
|
||||||
|
```bash |
||||||
|
kobweb run --env prod |
||||||
|
``` |
||||||
|
|
||||||
|
If you want to run this command in the Cloud provider of your choice, consider disabling interactive mode since nobody |
||||||
|
is sitting around watching the console in that case anyway. To do that, use: |
||||||
|
|
||||||
|
```bash |
||||||
|
kobweb run --env prod --notty |
||||||
|
``` |
||||||
|
|
||||||
|
Kobweb also supports exporting to a static layout which is compatible with static hosting providers, such as GitHub |
||||||
|
Pages, Netlify, Firebase, any presumably all the others. You can read more about that approach here: |
||||||
|
https://bitspittle.dev/blog/2022/staticdeploy |
@ -0,0 +1,42 @@ |
|||||||
|
import kotlinx.html.link |
||||||
|
|
||||||
|
plugins { |
||||||
|
kotlin("multiplatform") |
||||||
|
id("org.jetbrains.compose") |
||||||
|
id("com.varabyte.kobweb.application") version libs.versions.kobweb.get() |
||||||
|
} |
||||||
|
|
||||||
|
group = "com.adrianwitaszak.ballast.web" |
||||||
|
|
||||||
|
kotlin { |
||||||
|
js(IR) { |
||||||
|
moduleName = project.name |
||||||
|
browser { |
||||||
|
commonWebpackConfig { |
||||||
|
outputFileName = "$moduleName.js" |
||||||
|
} |
||||||
|
} |
||||||
|
binaries.executable() |
||||||
|
} |
||||||
|
sourceSets { |
||||||
|
named("jsMain") { |
||||||
|
dependencies { |
||||||
|
implementation(project(":feature:router")) |
||||||
|
implementation(project(":feature:counter")) |
||||||
|
implementation(project(":feature:home")) |
||||||
|
implementation(libs.kobweb.core) |
||||||
|
implementation(libs.kobweb.silk) |
||||||
|
implementation(libs.ballast.core) |
||||||
|
implementation(libs.ballast.navigation) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
kobweb { |
||||||
|
app { |
||||||
|
index { |
||||||
|
description.set("Ballast Web UI") |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
package com.adrianwitaszak.ballast.web |
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import com.varabyte.kobweb.compose.ui.Modifier |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.fontFamily |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.minHeight |
||||||
|
import com.varabyte.kobweb.core.App |
||||||
|
import com.varabyte.kobweb.silk.SilkApp |
||||||
|
import com.varabyte.kobweb.silk.components.layout.Surface |
||||||
|
import com.varabyte.kobweb.silk.components.style.common.SmoothColorStyle |
||||||
|
import com.varabyte.kobweb.silk.components.style.toModifier |
||||||
|
import com.varabyte.kobweb.silk.init.InitSilk |
||||||
|
import com.varabyte.kobweb.silk.init.InitSilkContext |
||||||
|
import com.varabyte.kobweb.silk.init.registerBaseStyle |
||||||
|
import com.varabyte.kobweb.silk.theme.colors.ColorMode |
||||||
|
import kotlinx.browser.localStorage |
||||||
|
import org.jetbrains.compose.web.css.vh |
||||||
|
|
||||||
|
private const val COLOR_MODE_KEY = "admin:colorMode" |
||||||
|
|
||||||
|
@InitSilk |
||||||
|
fun updateTheme(ctx: InitSilkContext) = ctx.config.apply { |
||||||
|
initialColorMode = localStorage.getItem(COLOR_MODE_KEY)?.let { ColorMode.valueOf(it) } ?: ColorMode.LIGHT |
||||||
|
} |
||||||
|
|
||||||
|
@InitSilk |
||||||
|
fun registerGlobalStyles(ctx: InitSilkContext) = ctx.config.apply { |
||||||
|
ctx.stylesheet.registerBaseStyle("body") { |
||||||
|
Modifier.fontFamily( |
||||||
|
"-apple-system", "BlinkMacSystemFont", "Segoe UI", "Roboto", "Oxygen", "Ubuntu", |
||||||
|
"Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "sans-serif" |
||||||
|
) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@App |
||||||
|
@Composable |
||||||
|
fun BallastApp(content: @Composable () -> Unit) { |
||||||
|
SilkApp { |
||||||
|
Surface(SmoothColorStyle.toModifier().minHeight(100.vh)) { |
||||||
|
content() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
Define layouts, sections, and widgest in here. |
||||||
|
|
||||||
|
See also: https://github.com/varabyte/kobweb#components-layouts-sections-and-widgets |
@ -0,0 +1,38 @@ |
|||||||
|
package com.adrianwitaszak.ballast.web.components.widgets |
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import com.varabyte.kobweb.compose.foundation.layout.Box |
||||||
|
import com.varabyte.kobweb.compose.foundation.layout.BoxScope |
||||||
|
import com.varabyte.kobweb.compose.ui.Alignment |
||||||
|
import com.varabyte.kobweb.compose.ui.Modifier |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.backgroundColor |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.borderRadius |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.padding |
||||||
|
import com.varabyte.kobweb.silk.components.style.ComponentStyle |
||||||
|
import com.varabyte.kobweb.silk.theme.SilkTheme |
||||||
|
import com.varabyte.kobweb.silk.theme.colors.getColorMode |
||||||
|
import org.jetbrains.compose.web.css.px |
||||||
|
|
||||||
|
@Composable |
||||||
|
fun Card( |
||||||
|
modifier: Modifier = Modifier, |
||||||
|
content: @Composable BoxScope.() -> Unit, |
||||||
|
) { |
||||||
|
Box( |
||||||
|
contentAlignment = Alignment.Center, |
||||||
|
modifier = modifier |
||||||
|
.backgroundColor(SilkTheme.palettes[getColorMode()].background) |
||||||
|
.borderRadius(14.px) |
||||||
|
.padding(16.px), |
||||||
|
content = content |
||||||
|
) |
||||||
|
} |
||||||
|
|
||||||
|
val CardStyle = ComponentStyle("cardstyle") { |
||||||
|
base { |
||||||
|
Modifier |
||||||
|
.backgroundColor(SilkTheme.palettes[colorMode].background) |
||||||
|
.borderRadius(14.px) |
||||||
|
.padding(16.px) |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,75 @@ |
|||||||
|
package com.adrianwitaszak.ballast.web.components.widgets |
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import com.varabyte.kobweb.compose.css.BoxSizing |
||||||
|
import com.varabyte.kobweb.compose.css.CSSTransition |
||||||
|
import com.varabyte.kobweb.compose.foundation.layout.Box |
||||||
|
import com.varabyte.kobweb.compose.foundation.layout.Column |
||||||
|
import com.varabyte.kobweb.compose.ui.Alignment |
||||||
|
import com.varabyte.kobweb.compose.ui.Modifier |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.backgroundColor |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.border |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.borderRadius |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.boxSizing |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.fillMaxSize |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.fillMaxWidth |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.height |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.maxWidth |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.minWidth |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.outline |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.padding |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.transition |
||||||
|
import com.varabyte.kobweb.compose.ui.toAttrs |
||||||
|
import com.varabyte.kobweb.silk.theme.colors.getColorMode |
||||||
|
import com.varabyte.kobweb.silk.theme.toSilkPalette |
||||||
|
import org.jetbrains.compose.web.attributes.InputType |
||||||
|
import org.jetbrains.compose.web.attributes.type |
||||||
|
import org.jetbrains.compose.web.css.LineStyle |
||||||
|
import org.jetbrains.compose.web.css.px |
||||||
|
import org.jetbrains.compose.web.css.s |
||||||
|
import org.jetbrains.compose.web.dom.TextInput |
||||||
|
|
||||||
|
|
||||||
|
@Composable |
||||||
|
fun EditableTextView( |
||||||
|
modifier: Modifier = Modifier, |
||||||
|
value: String, |
||||||
|
onValueChange: (String) -> Unit, |
||||||
|
inputType: InputType.InputTypeWithStringValue = InputType.Text, |
||||||
|
) { |
||||||
|
Column( |
||||||
|
modifier = modifier |
||||||
|
.minWidth(250.px) |
||||||
|
.maxWidth(500.px) |
||||||
|
.transition(CSSTransition("scale", 0.2.s)) |
||||||
|
) { |
||||||
|
Box( |
||||||
|
contentAlignment = Alignment.CenterEnd, |
||||||
|
modifier = modifier.fillMaxSize() |
||||||
|
) { |
||||||
|
TextInput( |
||||||
|
value = value, |
||||||
|
attrs = Modifier |
||||||
|
.fillMaxWidth() |
||||||
|
.padding(20.px) |
||||||
|
.height(60.px) |
||||||
|
.backgroundColor(getColorMode().toSilkPalette().background) |
||||||
|
.borderRadius(14.px) |
||||||
|
.boxSizing(BoxSizing.BorderBox) |
||||||
|
.outline(style = LineStyle.None) |
||||||
|
.border( |
||||||
|
width = 3.px, |
||||||
|
style = LineStyle.Solid, |
||||||
|
color = getColorMode().toSilkPalette().border |
||||||
|
) |
||||||
|
.padding(16.px) |
||||||
|
.toAttrs { |
||||||
|
onInput { |
||||||
|
onValueChange(it.value) |
||||||
|
} |
||||||
|
type(inputType) |
||||||
|
} |
||||||
|
) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,67 @@ |
|||||||
|
package com.adrianwitaszak.ballast.web.pages |
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import androidx.compose.runtime.collectAsState |
||||||
|
import androidx.compose.runtime.getValue |
||||||
|
import androidx.compose.runtime.remember |
||||||
|
import androidx.compose.runtime.rememberCoroutineScope |
||||||
|
import com.adrianwitaszak.ballast.web.components.widgets.Card |
||||||
|
import com.ballast.sharedui.root.CounterContract |
||||||
|
import com.ballast.sharedui.root.CounterViewModel |
||||||
|
import com.varabyte.kobweb.compose.foundation.layout.Box |
||||||
|
import com.varabyte.kobweb.compose.foundation.layout.Column |
||||||
|
import com.varabyte.kobweb.compose.foundation.layout.Row |
||||||
|
import com.varabyte.kobweb.compose.ui.Alignment |
||||||
|
import com.varabyte.kobweb.compose.ui.Modifier |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.fillMaxSize |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.gap |
||||||
|
import com.varabyte.kobweb.silk.components.forms.Button |
||||||
|
import com.varabyte.kobweb.silk.components.text.SpanText |
||||||
|
import org.jetbrains.compose.web.css.px |
||||||
|
|
||||||
|
@Composable |
||||||
|
fun Counter( |
||||||
|
goBack: () -> Unit, |
||||||
|
) { |
||||||
|
val coroutineScope = rememberCoroutineScope() |
||||||
|
val vm = remember(coroutineScope) { |
||||||
|
CounterViewModel(viewModelCoroutineScope = coroutineScope) |
||||||
|
} |
||||||
|
val state by vm.observeStates().collectAsState() |
||||||
|
|
||||||
|
Box( |
||||||
|
contentAlignment = Alignment.Center, |
||||||
|
modifier = Modifier.fillMaxSize() |
||||||
|
) { |
||||||
|
Card { |
||||||
|
Column( |
||||||
|
horizontalAlignment = Alignment.CenterHorizontally, |
||||||
|
modifier = Modifier.gap(24.px) |
||||||
|
) { |
||||||
|
SpanText("Counter") |
||||||
|
Row( |
||||||
|
verticalAlignment = Alignment.CenterVertically, |
||||||
|
modifier = Modifier.gap(24.px) |
||||||
|
) { |
||||||
|
Button( |
||||||
|
onClick = { vm.trySend(CounterContract.Inputs.Decrement()) }, |
||||||
|
) { |
||||||
|
SpanText(text = "-") |
||||||
|
} |
||||||
|
SpanText("Current count: ${state.count}") |
||||||
|
Button( |
||||||
|
onClick = { vm.trySend(CounterContract.Inputs.Increment()) }, |
||||||
|
) { |
||||||
|
SpanText(text = "+") |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Button( |
||||||
|
onClick = { goBack() }, |
||||||
|
) { |
||||||
|
SpanText(text = "Go back") |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,61 @@ |
|||||||
|
package com.adrianwitaszak.ballast.web.pages |
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import androidx.compose.runtime.collectAsState |
||||||
|
import androidx.compose.runtime.getValue |
||||||
|
import androidx.compose.runtime.remember |
||||||
|
import androidx.compose.runtime.rememberCoroutineScope |
||||||
|
import com.adrianwitaszak.ballast.web.components.widgets.Card |
||||||
|
import com.adrianwitaszak.ballast.web.components.widgets.EditableTextView |
||||||
|
import com.ballast.sharedui.root.HomeContract |
||||||
|
import com.ballast.sharedui.root.HomeViewModel |
||||||
|
import com.varabyte.kobweb.compose.foundation.layout.Box |
||||||
|
import com.varabyte.kobweb.compose.foundation.layout.Column |
||||||
|
import com.varabyte.kobweb.compose.ui.Alignment |
||||||
|
import com.varabyte.kobweb.compose.ui.Modifier |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.fillMaxSize |
||||||
|
import com.varabyte.kobweb.compose.ui.modifiers.gap |
||||||
|
import com.varabyte.kobweb.silk.components.forms.Button |
||||||
|
import com.varabyte.kobweb.silk.components.text.SpanText |
||||||
|
import org.jetbrains.compose.web.css.px |
||||||
|
|
||||||
|
@Composable |
||||||
|
fun Home( |
||||||
|
goToCounter: () -> Unit, |
||||||
|
) { |
||||||
|
val coroutineScope = rememberCoroutineScope() |
||||||
|
val vm = remember(coroutineScope) { |
||||||
|
HomeViewModel(viewModelCoroutineScope = coroutineScope) |
||||||
|
} |
||||||
|
val state by vm.observeStates().collectAsState() |
||||||
|
|
||||||
|
Box( |
||||||
|
contentAlignment = Alignment.Center, |
||||||
|
modifier = Modifier.fillMaxSize() |
||||||
|
) { |
||||||
|
Card { |
||||||
|
Column( |
||||||
|
horizontalAlignment = Alignment.CenterHorizontally, |
||||||
|
modifier = Modifier.gap(24.px) |
||||||
|
) { |
||||||
|
SpanText("Welcome to Kobweb!") |
||||||
|
SpanText("What is your name?") |
||||||
|
EditableTextView( |
||||||
|
value = state.name, |
||||||
|
onValueChange = { vm.trySend(HomeContract.Inputs.OnNameChanged(it)) } |
||||||
|
) |
||||||
|
if (state.name.isNotBlank()) { |
||||||
|
SpanText("Hello, ${state.name}!") |
||||||
|
} else { |
||||||
|
SpanText("") |
||||||
|
} |
||||||
|
|
||||||
|
Button( |
||||||
|
onClick = { goToCounter() }, |
||||||
|
) { |
||||||
|
SpanText(text = "Go to Counter") |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package com.adrianwitaszak.ballast.web.pages |
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import androidx.compose.runtime.collectAsState |
||||||
|
import androidx.compose.runtime.getValue |
||||||
|
import androidx.compose.runtime.remember |
||||||
|
import androidx.compose.runtime.rememberCoroutineScope |
||||||
|
import com.ballast.shoppe.feature.router.RouterScreen |
||||||
|
import com.ballast.shoppe.feature.router.RouterViewModel |
||||||
|
import com.copperleaf.ballast.navigation.routing.Backstack |
||||||
|
import com.copperleaf.ballast.navigation.routing.RouterContract |
||||||
|
import com.copperleaf.ballast.navigation.routing.renderCurrentDestination |
||||||
|
import com.copperleaf.ballast.navigation.vm.Router |
||||||
|
import com.varabyte.kobweb.core.Page |
||||||
|
|
||||||
|
@Page("/") |
||||||
|
@Composable |
||||||
|
fun HomePage() { |
||||||
|
val coroutineScope = rememberCoroutineScope() |
||||||
|
val router: Router<RouterScreen> = |
||||||
|
remember(coroutineScope) { |
||||||
|
RouterViewModel( |
||||||
|
viewModelScope = coroutineScope, |
||||||
|
initialRoute = RouterScreen.Home, |
||||||
|
) |
||||||
|
} |
||||||
|
val routerState: Backstack<RouterScreen> by router.observeStates().collectAsState() |
||||||
|
|
||||||
|
routerState.renderCurrentDestination( |
||||||
|
route = { routerScreen: RouterScreen -> |
||||||
|
when (routerScreen) { |
||||||
|
RouterScreen.Home -> Home( |
||||||
|
goToCounter = { |
||||||
|
router.trySend(RouterContract.Inputs.GoToDestination(RouterScreen.Counter.matcher.routeFormat)) |
||||||
|
} |
||||||
|
) |
||||||
|
|
||||||
|
RouterScreen.Counter -> Counter( |
||||||
|
goBack = { router.trySend(RouterContract.Inputs.GoBack()) }, |
||||||
|
) |
||||||
|
} |
||||||
|
}, |
||||||
|
notFound = { }, |
||||||
|
) |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
Define pages in here. |
||||||
|
|
||||||
|
See also: https://github.com/varabyte/kobweb#create-a-page |
After Width: | Height: | Size: 15 KiB |
Loading…
Reference in new issue