From a12fce11f3240f413684fae9e638ca81d6482770 Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Mon, 8 Jun 2026 11:15:25 +0200 Subject: [PATCH 1/7] chore: Added iOS support --- .github/workflows/ci.yml | 19 ++++++++++++++++++- .github/workflows/release.yml | 2 +- gradle/libs.versions.toml | 1 + jecnaapi-canteen/build.gradle.kts | 11 ++++++++++- jecnaapi-core/build.gradle.kts | 11 ++++++++++- jecnaapi-jecna/build.gradle.kts | 11 ++++++++++- 6 files changed, 50 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f1cd5d4..b851575 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ concurrency: jobs: gradle_check: - name: Gradle check + name: Gradle check (JVM, Linux, JS) runs-on: ubuntu-latest steps: - name: Checkout @@ -27,3 +27,20 @@ jobs: - name: Run checks run: ./gradlew -Dorg.gradle.jvmargs=-Xmx4096m check + + macos_check: + name: Gradle check (iOS) + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Set up JDK 21 + uses: actions/setup-java@v5 + with: + distribution: 'temurin' + java-version: 21 + cache: 'gradle' + + - name: Run checks + run: ./gradlew -Dorg.gradle.jvmargs=-Xmx4096m check diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 01783c9..2abe4ca 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,7 +8,7 @@ on: jobs: maven_publish: name: Release build and publish - runs-on: ubuntu-latest + runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v6 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5026729..dfe19f4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,6 +21,7 @@ ktor-client-encoding = { module = "io.ktor:ktor-client-encoding", version.ref = ktor-client-engine-java = { module = "io.ktor:ktor-client-java", version.ref = "ktor" } ktor-client-engine-curl = { module = "io.ktor:ktor-client-curl", version.ref = "ktor" } ktor-client-engine-js = { module = "io.ktor:ktor-client-js", version.ref = "ktor" } +ktor-client-engine-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor" } ktor-client-engine-android = { module = "io.ktor:ktor-client-android", version.ref = "ktor" } [plugins] diff --git a/jecnaapi-canteen/build.gradle.kts b/jecnaapi-canteen/build.gradle.kts index 432e028..4bd6aef 100644 --- a/jecnaapi-canteen/build.gradle.kts +++ b/jecnaapi-canteen/build.gradle.kts @@ -11,6 +11,9 @@ plugins { kotlin { jvm() linuxX64() + iosX64() + iosArm64() + iosSimulatorArm64() js { browser { testTask { enabled = false } @@ -21,6 +24,7 @@ kotlin { testTask { enabled = false } } } + applyDefaultHierarchyTemplate() androidLibrary { namespace = "io.github.tomhula.jecnaapi.canteen" compileSdk = 36 @@ -35,9 +39,14 @@ kotlin { jvmMain.dependencies { runtimeOnly(libs.ktor.client.engine.java) } - nativeMain.dependencies { + val linuxX64Main by getting + linuxX64Main.dependencies { runtimeOnly(libs.ktor.client.engine.curl) } + val iosMain by getting + iosMain.dependencies { + runtimeOnly(libs.ktor.client.engine.darwin) + } jsMain.dependencies { runtimeOnly(libs.ktor.client.engine.js) } diff --git a/jecnaapi-core/build.gradle.kts b/jecnaapi-core/build.gradle.kts index c8bbb7f..68c60f6 100644 --- a/jecnaapi-core/build.gradle.kts +++ b/jecnaapi-core/build.gradle.kts @@ -13,6 +13,9 @@ plugins { kotlin { jvm() linuxX64() + iosX64() + iosArm64() + iosSimulatorArm64() js { browser { testTask { enabled = false } @@ -23,6 +26,7 @@ kotlin { testTask { enabled = false } } } + applyDefaultHierarchyTemplate() androidLibrary { namespace = "io.github.tomhula.jecnaapi.core" compileSdk = 36 @@ -38,9 +42,14 @@ kotlin { jvmMain.dependencies { runtimeOnly(libs.ktor.client.engine.java) } - nativeMain.dependencies { + val linuxX64Main by getting + linuxX64Main.dependencies { runtimeOnly(libs.ktor.client.engine.curl) } + val iosMain by getting + iosMain.dependencies { + runtimeOnly(libs.ktor.client.engine.darwin) + } jsMain.dependencies { runtimeOnly(libs.ktor.client.engine.js) } diff --git a/jecnaapi-jecna/build.gradle.kts b/jecnaapi-jecna/build.gradle.kts index f870ab6..931f2f6 100644 --- a/jecnaapi-jecna/build.gradle.kts +++ b/jecnaapi-jecna/build.gradle.kts @@ -13,6 +13,9 @@ plugins { kotlin { jvm() linuxX64() + iosX64() + iosArm64() + iosSimulatorArm64() js { browser { testTask { enabled = false } @@ -23,6 +26,7 @@ kotlin { testTask { enabled = false } } } + applyDefaultHierarchyTemplate() androidLibrary { namespace = "io.github.tomhula.jecnaapi.jecna" compileSdk = 36 @@ -40,9 +44,14 @@ kotlin { jvmMain.dependencies { runtimeOnly(libs.ktor.client.engine.java) } - nativeMain.dependencies { + val linuxX64Main by getting + linuxX64Main.dependencies { runtimeOnly(libs.ktor.client.engine.curl) } + val iosMain by getting + iosMain.dependencies { + runtimeOnly(libs.ktor.client.engine.darwin) + } jsMain.dependencies { runtimeOnly(libs.ktor.client.engine.js) } From 368b81199c4c87bfe96ac3a249f4c2db3b1db662 Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Fri, 19 Jun 2026 21:09:44 +0200 Subject: [PATCH 2/7] chore: No longer needed As of Kotlin 1.9.20 the applyDefaultHierarchyTemplate is on by default. --- jecnaapi-canteen/build.gradle.kts | 1 - jecnaapi-core/build.gradle.kts | 1 - jecnaapi-jecna/build.gradle.kts | 1 - 3 files changed, 3 deletions(-) diff --git a/jecnaapi-canteen/build.gradle.kts b/jecnaapi-canteen/build.gradle.kts index 4bd6aef..cc3d57e 100644 --- a/jecnaapi-canteen/build.gradle.kts +++ b/jecnaapi-canteen/build.gradle.kts @@ -24,7 +24,6 @@ kotlin { testTask { enabled = false } } } - applyDefaultHierarchyTemplate() androidLibrary { namespace = "io.github.tomhula.jecnaapi.canteen" compileSdk = 36 diff --git a/jecnaapi-core/build.gradle.kts b/jecnaapi-core/build.gradle.kts index 68c60f6..87f1a8a 100644 --- a/jecnaapi-core/build.gradle.kts +++ b/jecnaapi-core/build.gradle.kts @@ -26,7 +26,6 @@ kotlin { testTask { enabled = false } } } - applyDefaultHierarchyTemplate() androidLibrary { namespace = "io.github.tomhula.jecnaapi.core" compileSdk = 36 diff --git a/jecnaapi-jecna/build.gradle.kts b/jecnaapi-jecna/build.gradle.kts index 931f2f6..dbf6203 100644 --- a/jecnaapi-jecna/build.gradle.kts +++ b/jecnaapi-jecna/build.gradle.kts @@ -26,7 +26,6 @@ kotlin { testTask { enabled = false } } } - applyDefaultHierarchyTemplate() androidLibrary { namespace = "io.github.tomhula.jecnaapi.jecna" compileSdk = 36 From 672cd5260fec1368ec32122beb57654c14769a1b Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Fri, 19 Jun 2026 21:19:19 +0200 Subject: [PATCH 3/7] Revert "chore: No longer needed" This reverts commit 368b81199c4c87bfe96ac3a249f4c2db3b1db662. ... It was probably needed. --- jecnaapi-canteen/build.gradle.kts | 1 + jecnaapi-core/build.gradle.kts | 1 + jecnaapi-jecna/build.gradle.kts | 1 + 3 files changed, 3 insertions(+) diff --git a/jecnaapi-canteen/build.gradle.kts b/jecnaapi-canteen/build.gradle.kts index cc3d57e..4bd6aef 100644 --- a/jecnaapi-canteen/build.gradle.kts +++ b/jecnaapi-canteen/build.gradle.kts @@ -24,6 +24,7 @@ kotlin { testTask { enabled = false } } } + applyDefaultHierarchyTemplate() androidLibrary { namespace = "io.github.tomhula.jecnaapi.canteen" compileSdk = 36 diff --git a/jecnaapi-core/build.gradle.kts b/jecnaapi-core/build.gradle.kts index 87f1a8a..68c60f6 100644 --- a/jecnaapi-core/build.gradle.kts +++ b/jecnaapi-core/build.gradle.kts @@ -26,6 +26,7 @@ kotlin { testTask { enabled = false } } } + applyDefaultHierarchyTemplate() androidLibrary { namespace = "io.github.tomhula.jecnaapi.core" compileSdk = 36 diff --git a/jecnaapi-jecna/build.gradle.kts b/jecnaapi-jecna/build.gradle.kts index dbf6203..931f2f6 100644 --- a/jecnaapi-jecna/build.gradle.kts +++ b/jecnaapi-jecna/build.gradle.kts @@ -26,6 +26,7 @@ kotlin { testTask { enabled = false } } } + applyDefaultHierarchyTemplate() androidLibrary { namespace = "io.github.tomhula.jecnaapi.jecna" compileSdk = 36 From 3eb4b1f14987c2b028b42fb9b09edc316fec2977 Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Sat, 20 Jun 2026 18:18:29 +0200 Subject: [PATCH 4/7] chore: JecnaAPI release for pod --- .github/workflows/release.yml | 21 +++++++++- jecnaapi-canteen/JecnaapiCanteenKMP.podspec | 44 +++++++++++++++++++++ jecnaapi-core/build.gradle.kts | 1 - jecnaapi-ios/build.gradle.kts | 32 +++++++++++++++ jecnaapi-jecna/JecnaapiKMP.podspec | 44 +++++++++++++++++++++ jecnaapi-jecna/build.gradle.kts | 1 - settings.gradle.kts | 2 +- 7 files changed, 141 insertions(+), 4 deletions(-) create mode 100644 jecnaapi-canteen/JecnaapiCanteenKMP.podspec create mode 100644 jecnaapi-ios/build.gradle.kts create mode 100644 jecnaapi-jecna/JecnaapiKMP.podspec diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2abe4ca..b433428 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -35,6 +35,15 @@ jobs: ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }} ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_KEY_CONTENTS }} + - name: Build iOS XCFramework + run: ./gradlew -Dorg.gradle.jvmargs=-Xmx4096m -Pversion=${{ env.VERSION }} --no-configuration-cache :jecnaapi-ios:podPublishReleaseXCFramework + + - name: Upload iOS XCFramework + uses: actions/upload-artifact@v4 + with: + name: JecnaapiIOS-xcframework + path: jecnaapi-ios/build/cocoapods/xcframework/release/JecnaapiIOS.xcframework + gh_release: name: Create GitHub Release needs: maven_publish @@ -44,13 +53,23 @@ jobs: steps: - name: Checkout uses: actions/checkout@v6 + + - name: Download iOS XCFramework + uses: actions/download-artifact@v4 + with: + name: JecnaapiIOS-xcframework + path: JecnaapiIOS.xcframework + + - name: Create XCFramework zip + run: zip -r JecnaapiIOS-${{ github.ref_name }}-xcframework.zip JecnaapiIOS.xcframework/ + - name: Create Release uses: softprops/action-gh-release@v2 with: - # github.ref_name is the tag (e.g., 'v1.0.0') name: ${{ github.ref_name }} tag_name: ${{ github.ref_name }} generate_release_notes: true + files: JecnaapiIOS-${{ github.ref_name }}-xcframework.zip update_readme: name: Update project version in README diff --git a/jecnaapi-canteen/JecnaapiCanteenKMP.podspec b/jecnaapi-canteen/JecnaapiCanteenKMP.podspec new file mode 100644 index 0000000..da6cacf --- /dev/null +++ b/jecnaapi-canteen/JecnaapiCanteenKMP.podspec @@ -0,0 +1,44 @@ +Pod::Spec.new do |spec| + spec.name = 'JecnaapiCanteenKMP' + spec.version = 'SNAPSHOT' + spec.homepage = 'https://github.com/tomhula/JecnaAPI' + spec.source = { :http=> ''} + spec.authors = '' + spec.license = 'GNU GPLv3' + spec.summary = 'Canteen module of JecnaAPI' + spec.vendored_frameworks = 'build/cocoapods/framework/JecnaapiCanteenKMP.framework' + spec.libraries = 'c++' + if !Dir.exist?('build/cocoapods/framework/JecnaapiCanteenKMP.framework') || Dir.empty?('build/cocoapods/framework/JecnaapiCanteenKMP.framework') + raise " + Kotlin framework 'JecnaapiCanteenKMP' doesn't exist yet, so a proper Xcode project can't be generated. + 'pod install' should be executed after running ':generateDummyFramework' Gradle task: + ./gradlew :jecnaapi-canteen:generateDummyFramework + Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)" + end + spec.xcconfig = { + 'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO', + } + spec.pod_target_xcconfig = { + 'KOTLIN_PROJECT_PATH' => ':jecnaapi-canteen', + 'PRODUCT_MODULE_NAME' => 'JecnaapiCanteenKMP', + } + spec.script_phases = [ + { + :name => 'Build JecnaapiCanteenKMP', + :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 diff --git a/jecnaapi-core/build.gradle.kts b/jecnaapi-core/build.gradle.kts index 68c60f6..fbbe3fb 100644 --- a/jecnaapi-core/build.gradle.kts +++ b/jecnaapi-core/build.gradle.kts @@ -1,6 +1,5 @@ @file:OptIn(ExperimentalWasmDsl::class) -import org.gradle.internal.execution.caching.CachingState.enabled import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl plugins { diff --git a/jecnaapi-ios/build.gradle.kts b/jecnaapi-ios/build.gradle.kts new file mode 100644 index 0000000..171815a --- /dev/null +++ b/jecnaapi-ios/build.gradle.kts @@ -0,0 +1,32 @@ +plugins { + kotlin("multiplatform") + kotlin("native.cocoapods") +} + +kotlin { + iosX64() + iosArm64() + iosSimulatorArm64() + + sourceSets { + commonMain.dependencies { + api(project(":jecnaapi-jecna")) + api(project(":jecnaapi-canteen")) + } + } + + cocoapods { + name = "JecnaapiIOS" + version = project.version.toString() + summary = "JecnaAPI umbrella framework for iOS" + homepage = "https://github.com/tomhula/JecnaAPI" + license = "GNU GPLv3" + framework { + baseName = "JecnaapiIOS" + isStatic = true + export(project(":jecnaapi-jecna")) + export(project(":jecnaapi-canteen")) + transitiveExport = true + } + } +} diff --git a/jecnaapi-jecna/JecnaapiKMP.podspec b/jecnaapi-jecna/JecnaapiKMP.podspec new file mode 100644 index 0000000..1d45cdf --- /dev/null +++ b/jecnaapi-jecna/JecnaapiKMP.podspec @@ -0,0 +1,44 @@ +Pod::Spec.new do |spec| + spec.name = 'JecnaapiKMP' + spec.version = 'SNAPSHOT' + spec.homepage = 'https://github.com/tomhula/JecnaAPI' + spec.source = { :http=> ''} + spec.authors = '' + spec.license = 'GNU GPLv3' + spec.summary = 'A library to access data from the SPSE Jecna web.' + spec.vendored_frameworks = 'build/cocoapods/framework/JecnaapiKMP.framework' + spec.libraries = 'c++' + if !Dir.exist?('build/cocoapods/framework/JecnaapiKMP.framework') || Dir.empty?('build/cocoapods/framework/JecnaapiKMP.framework') + raise " + Kotlin framework 'JecnaapiKMP' doesn't exist yet, so a proper Xcode project can't be generated. + 'pod install' should be executed after running ':generateDummyFramework' Gradle task: + ./gradlew :jecnaapi-jecna:generateDummyFramework + Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)" + end + spec.xcconfig = { + 'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO', + } + spec.pod_target_xcconfig = { + 'KOTLIN_PROJECT_PATH' => ':jecnaapi-jecna', + 'PRODUCT_MODULE_NAME' => 'JecnaapiKMP', + } + spec.script_phases = [ + { + :name => 'Build JecnaapiKMP', + :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 diff --git a/jecnaapi-jecna/build.gradle.kts b/jecnaapi-jecna/build.gradle.kts index 931f2f6..3f44380 100644 --- a/jecnaapi-jecna/build.gradle.kts +++ b/jecnaapi-jecna/build.gradle.kts @@ -1,6 +1,5 @@ @file:OptIn(ExperimentalWasmDsl::class) -import org.gradle.internal.execution.caching.CachingState.enabled import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl plugins { diff --git a/settings.gradle.kts b/settings.gradle.kts index 947d216..18606c3 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,5 @@ rootProject.name = "jecnaapi" -include("jecnaapi-core", "jecnaapi-jecna", "jecnaapi-canteen", "jecnaapi-jecna-java") +include("jecnaapi-core", "jecnaapi-jecna", "jecnaapi-canteen", "jecnaapi-jecna-java", "jecnaapi-ios") pluginManagement { repositories { From 3102c0434ee7ba2f76a59a96f45396ffddca5101 Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Sat, 20 Jun 2026 18:31:25 +0200 Subject: [PATCH 5/7] chore: Remove unused podspecs --- jecnaapi-canteen/JecnaapiCanteenKMP.podspec | 44 --------------------- jecnaapi-jecna/JecnaapiKMP.podspec | 44 --------------------- 2 files changed, 88 deletions(-) delete mode 100644 jecnaapi-canteen/JecnaapiCanteenKMP.podspec delete mode 100644 jecnaapi-jecna/JecnaapiKMP.podspec diff --git a/jecnaapi-canteen/JecnaapiCanteenKMP.podspec b/jecnaapi-canteen/JecnaapiCanteenKMP.podspec deleted file mode 100644 index da6cacf..0000000 --- a/jecnaapi-canteen/JecnaapiCanteenKMP.podspec +++ /dev/null @@ -1,44 +0,0 @@ -Pod::Spec.new do |spec| - spec.name = 'JecnaapiCanteenKMP' - spec.version = 'SNAPSHOT' - spec.homepage = 'https://github.com/tomhula/JecnaAPI' - spec.source = { :http=> ''} - spec.authors = '' - spec.license = 'GNU GPLv3' - spec.summary = 'Canteen module of JecnaAPI' - spec.vendored_frameworks = 'build/cocoapods/framework/JecnaapiCanteenKMP.framework' - spec.libraries = 'c++' - if !Dir.exist?('build/cocoapods/framework/JecnaapiCanteenKMP.framework') || Dir.empty?('build/cocoapods/framework/JecnaapiCanteenKMP.framework') - raise " - Kotlin framework 'JecnaapiCanteenKMP' doesn't exist yet, so a proper Xcode project can't be generated. - 'pod install' should be executed after running ':generateDummyFramework' Gradle task: - ./gradlew :jecnaapi-canteen:generateDummyFramework - Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)" - end - spec.xcconfig = { - 'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO', - } - spec.pod_target_xcconfig = { - 'KOTLIN_PROJECT_PATH' => ':jecnaapi-canteen', - 'PRODUCT_MODULE_NAME' => 'JecnaapiCanteenKMP', - } - spec.script_phases = [ - { - :name => 'Build JecnaapiCanteenKMP', - :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 diff --git a/jecnaapi-jecna/JecnaapiKMP.podspec b/jecnaapi-jecna/JecnaapiKMP.podspec deleted file mode 100644 index 1d45cdf..0000000 --- a/jecnaapi-jecna/JecnaapiKMP.podspec +++ /dev/null @@ -1,44 +0,0 @@ -Pod::Spec.new do |spec| - spec.name = 'JecnaapiKMP' - spec.version = 'SNAPSHOT' - spec.homepage = 'https://github.com/tomhula/JecnaAPI' - spec.source = { :http=> ''} - spec.authors = '' - spec.license = 'GNU GPLv3' - spec.summary = 'A library to access data from the SPSE Jecna web.' - spec.vendored_frameworks = 'build/cocoapods/framework/JecnaapiKMP.framework' - spec.libraries = 'c++' - if !Dir.exist?('build/cocoapods/framework/JecnaapiKMP.framework') || Dir.empty?('build/cocoapods/framework/JecnaapiKMP.framework') - raise " - Kotlin framework 'JecnaapiKMP' doesn't exist yet, so a proper Xcode project can't be generated. - 'pod install' should be executed after running ':generateDummyFramework' Gradle task: - ./gradlew :jecnaapi-jecna:generateDummyFramework - Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)" - end - spec.xcconfig = { - 'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO', - } - spec.pod_target_xcconfig = { - 'KOTLIN_PROJECT_PATH' => ':jecnaapi-jecna', - 'PRODUCT_MODULE_NAME' => 'JecnaapiKMP', - } - spec.script_phases = [ - { - :name => 'Build JecnaapiKMP', - :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 From f297a5d4a0c3299cae45c95a1cf96c8d71332af1 Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Sat, 20 Jun 2026 18:39:45 +0200 Subject: [PATCH 6/7] chore: Added iOS version target --- jecnaapi-ios/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/jecnaapi-ios/build.gradle.kts b/jecnaapi-ios/build.gradle.kts index 171815a..7fcba18 100644 --- a/jecnaapi-ios/build.gradle.kts +++ b/jecnaapi-ios/build.gradle.kts @@ -21,6 +21,7 @@ kotlin { summary = "JecnaAPI umbrella framework for iOS" homepage = "https://github.com/tomhula/JecnaAPI" license = "GNU GPLv3" + ios.deploymentTarget = "15.0" framework { baseName = "JecnaapiIOS" isStatic = true From a8095b92aaa163f0cd1badf43759ada54d2e5e8b Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Sat, 20 Jun 2026 18:41:41 +0200 Subject: [PATCH 7/7] chore: Revert removal of a comment --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b433428..36e04b9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -66,6 +66,7 @@ jobs: - name: Create Release uses: softprops/action-gh-release@v2 with: + # github.ref_name is the tag (e.g., 'v1.0.0') name: ${{ github.ref_name }} tag_name: ${{ github.ref_name }} generate_release_notes: true