so I have a KMM app over at https://github.com/WhiteWhiskyWolf/all_you
I can’t seem to archive the app. When I build through Xcode build for the device, it works. However, if I try and archive the app, either through XCode of Fastlane, every single kotlin class comes back with X not in scope
The Gradle build task is successful when looking at the build logs, so I’m a little lost as to why it’s doing that.
So I’ve added
framework {
// Required properties
// Framework name configuration. Use this property instead of deprecated 'frameworkName'
baseName = "shared"
// Optional properties
// Specify the framework linking type. It's dynamic by default.
isStatic = false
// Dependency export
export(project(":shared"))
transitiveExport = false // This is default.
// Bitcode embedding
embedBitcode(org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode.BITCODE)
}
// Maps custom Xcode configuration to NativeBuildType
xcodeConfigurationToNativeBuildType["CUSTOM_DEBUG"] = org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType.DEBUG
xcodeConfigurationToNativeBuildType["CUSTOM_RELEASE"] = org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType.RELEASE
And compile against my iosApp target instead of shared, and now I’m getting
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':shared:linkPodReleaseFrameworkIosArm64'.
> java.lang.StackOverflowError (no error message)
EDIT:
Adding my depencies
sourceSets {
val commonMain by getting {
dependencies {
api("io.insert-koin:koin-core:${Koin.version}")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:${KotlinVersions.coroutines}")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:${KotlinVersions.serialization}")
implementation("org.jetbrains.kotlinx:kotlinx-datetime:${KotlinVersions.date}")
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
implementation("io.mockative:mockative:${Mockk.version}")
api("io.insert-koin:koin-test:${Koin.version}")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:${KotlinVersions.coroutines}")
implementation("app.cash.turbine:turbine:${Turbine.version}")
}
}
val androidMain by getting {
dependencies {
implementation("com.google.gms:google-services:${Android.googleService}")
implementation("com.google.android.gms:play-services-auth:${Firebase.playServiesVersion}")
implementation("io.insert-koin:koin-android:${Koin.version}")
implementation(project.dependencies.platform("com.google.firebase:firebase-bom:${Firebase.firebaseBom}"))
implementation("com.google.firebase:firebase-auth-ktx")
implementation("com.google.firebase:firebase-firestore-ktx")
implementation("com.google.firebase:firebase-storage-ktx")
implementation("com.google.firebase:firebase-messaging-ktx")
}
}
val androidUnitTest by getting
val iosArm64Main by getting
val iosSimulatorArm64Main by getting
val iosMain by creating {
dependsOn(commonMain)
iosArm64Main.dependsOn(this)
iosSimulatorArm64Main.dependsOn(this)
}
val iosArm64Test by getting
val iosSimulatorArm64Test by getting
val iosTest by creating {
dependsOn(commonTest)
iosArm64Test.dependsOn(this)
iosSimulatorArm64Test.dependsOn(this)
}
}
2
Answers
So the answer was the project was first set up for "regular framework" but I was using "cocoapods" in the gradle. So the answer was actually to remove the build phase compiling kotlin and it started working. Specififically
./gradlew :shared:embedAndSignAppleFrameworkForXcode
looks like you’re facing issues with archiving your app
try to address the issue step by step:
you need the latest kmm plugin installed in ide
check build.gradle file:
Replace the newest with the latest available version.
remove:
and
lines from the framework block, as they are not required for archiving:
xcodeConfigurationToNativeBuildType block seems fine, so no changes are needed there.
clean and rebuild the project before attempting to archive
plus try deleting the .gradle folder in your project directory and then rebuilding the project.
make sure that your shared module does not have any recursive dependencies, which could lead to a over error