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