diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index e50ab87c..0611c77e 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -91,6 +91,30 @@ abstract class GenerateRuntimeConfigsTask : DefaultTask() { } } +abstract class RenameReleaseDmgTask : DefaultTask() { + @get:Input + abstract val versionName: Property + + @get:OutputDirectory + abstract val dmgDirectory: DirectoryProperty + + @TaskAction + fun renameArtifact() { + val dmgDir = dmgDirectory.get().asFile + val targetFile = dmgDir.resolve("Nuvio-${versionName.get()}.dmg") + val sourceFile = dmgDir.listFiles() + ?.filter { it.extension == "dmg" && it.name.startsWith("Nuvio-") } + ?.maxByOrNull { it.lastModified() } + ?: error("No DMG output found in ${dmgDir.path}") + + if (sourceFile.absolutePath != targetFile.absolutePath) { + targetFile.delete() + sourceFile.copyTo(targetFile, overwrite = true) + sourceFile.delete() + } + } +} + fun readXcconfigValue(file: File, key: String): String? { if (!file.exists()) return null return file.readLines() @@ -281,8 +305,16 @@ dependencies { compose.desktop { application { mainClass = "com.nuvio.app.DesktopAppKt" + buildTypes.release.proguard { + configurationFiles.from(project.file("desktop-proguard-rules.pro")) + } nativeDistributions { + packageName = "Nuvio" + modules("java.net.http") + targetFormats(org.jetbrains.compose.desktop.application.dsl.TargetFormat.Dmg) macOS { + dockName = "Nuvio" + iconFile.set(project.file("desktop-icons/nuvio.icns")) infoPlist { extraKeysRawXml = """ NSRequiresAquaSystemAppearance @@ -294,6 +326,15 @@ compose.desktop { } } +val renameReleaseDmgArtifact = tasks.register("renameReleaseDmgArtifact") { + versionName.set(releaseAppVersionName) + dmgDirectory.set(layout.buildDirectory.dir("compose/binaries/main-release/dmg")) +} + +tasks.matching { it.name == "packageReleaseDistributionForCurrentOS" || it.name == "packageReleaseDmg" }.configureEach { + finalizedBy(renameReleaseDmgArtifact) +} + configurations.all { exclude(group = "androidx.media3", module = "media3-exoplayer") exclude(group = "androidx.media3", module = "media3-ui") diff --git a/composeApp/desktop-icons/Nuvio.iconset/icon_128x128.png b/composeApp/desktop-icons/Nuvio.iconset/icon_128x128.png new file mode 100644 index 00000000..6d7893a9 Binary files /dev/null and b/composeApp/desktop-icons/Nuvio.iconset/icon_128x128.png differ diff --git a/composeApp/desktop-icons/Nuvio.iconset/icon_128x128@2x.png b/composeApp/desktop-icons/Nuvio.iconset/icon_128x128@2x.png new file mode 100644 index 00000000..488d3410 Binary files /dev/null and b/composeApp/desktop-icons/Nuvio.iconset/icon_128x128@2x.png differ diff --git a/composeApp/desktop-icons/Nuvio.iconset/icon_16x16.png b/composeApp/desktop-icons/Nuvio.iconset/icon_16x16.png new file mode 100644 index 00000000..29b79907 Binary files /dev/null and b/composeApp/desktop-icons/Nuvio.iconset/icon_16x16.png differ diff --git a/composeApp/desktop-icons/Nuvio.iconset/icon_16x16@2x.png b/composeApp/desktop-icons/Nuvio.iconset/icon_16x16@2x.png new file mode 100644 index 00000000..32a6b66a Binary files /dev/null and b/composeApp/desktop-icons/Nuvio.iconset/icon_16x16@2x.png differ diff --git a/composeApp/desktop-icons/Nuvio.iconset/icon_256x256.png b/composeApp/desktop-icons/Nuvio.iconset/icon_256x256.png new file mode 100644 index 00000000..488d3410 Binary files /dev/null and b/composeApp/desktop-icons/Nuvio.iconset/icon_256x256.png differ diff --git a/composeApp/desktop-icons/Nuvio.iconset/icon_256x256@2x.png b/composeApp/desktop-icons/Nuvio.iconset/icon_256x256@2x.png new file mode 100644 index 00000000..130efa79 Binary files /dev/null and b/composeApp/desktop-icons/Nuvio.iconset/icon_256x256@2x.png differ diff --git a/composeApp/desktop-icons/Nuvio.iconset/icon_32x32.png b/composeApp/desktop-icons/Nuvio.iconset/icon_32x32.png new file mode 100644 index 00000000..32a6b66a Binary files /dev/null and b/composeApp/desktop-icons/Nuvio.iconset/icon_32x32.png differ diff --git a/composeApp/desktop-icons/Nuvio.iconset/icon_32x32@2x.png b/composeApp/desktop-icons/Nuvio.iconset/icon_32x32@2x.png new file mode 100644 index 00000000..3b845b72 Binary files /dev/null and b/composeApp/desktop-icons/Nuvio.iconset/icon_32x32@2x.png differ diff --git a/composeApp/desktop-icons/Nuvio.iconset/icon_512x512.png b/composeApp/desktop-icons/Nuvio.iconset/icon_512x512.png new file mode 100644 index 00000000..130efa79 Binary files /dev/null and b/composeApp/desktop-icons/Nuvio.iconset/icon_512x512.png differ diff --git a/composeApp/desktop-icons/Nuvio.iconset/icon_512x512@2x.png b/composeApp/desktop-icons/Nuvio.iconset/icon_512x512@2x.png new file mode 100644 index 00000000..9fc0d4ad Binary files /dev/null and b/composeApp/desktop-icons/Nuvio.iconset/icon_512x512@2x.png differ diff --git a/composeApp/desktop-icons/nuvio.icns b/composeApp/desktop-icons/nuvio.icns new file mode 100644 index 00000000..d3a4b988 Binary files /dev/null and b/composeApp/desktop-icons/nuvio.icns differ diff --git a/composeApp/desktop-proguard-rules.pro b/composeApp/desktop-proguard-rules.pro new file mode 100644 index 00000000..a09a4c9b --- /dev/null +++ b/composeApp/desktop-proguard-rules.pro @@ -0,0 +1,34 @@ +-dontshrink +-dontoptimize +-dontobfuscate +-keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod + +-keep class com.nuvio.app.** { *; } +-keep interface com.nuvio.app.** { *; } +-keep enum com.nuvio.app.** { *; } + +-keep class coil3.** { *; } +-keep interface coil3.** { *; } +-keep enum coil3.** { *; } + +-keep class io.ktor.** { *; } +-keep interface io.ktor.** { *; } +-keep enum io.ktor.** { *; } + +-keep class kotlinx.serialization.** { *; } +-keep interface kotlinx.serialization.** { *; } +-keep enum kotlinx.serialization.** { *; } + +-keep class dev.whyoleg.** { *; } +-keep interface dev.whyoleg.** { *; } +-keep enum dev.whyoleg.** { *; } + +-keep class com.typesafe.config.** { *; } +-keep interface com.typesafe.config.** { *; } +-keep enum com.typesafe.config.** { *; } + +-keep class io.ktor.client.engine.java.** { *; } +-keep class io.ktor.serialization.kotlinx.json.** { *; } +-keep class coil3.network.ktor3.internal.** { *; } +-keep class dev.whyoleg.cryptography.providers.jdk.** { *; } +-keep class io.ktor.server.config.** { *; } \ No newline at end of file diff --git a/iosApp/Configuration/Version.xcconfig b/iosApp/Configuration/Version.xcconfig index e961c555..efca595a 100644 --- a/iosApp/Configuration/Version.xcconfig +++ b/iosApp/Configuration/Version.xcconfig @@ -1,3 +1,3 @@ -CURRENT_PROJECT_VERSION=26 +CURRENT_PROJECT_VERSION=27 MARKETING_VERSION=0.1.0