Kotlin 多平台 - 错误 ITMS-90171:无效的捆绑包结构

Seb*_*rga 7 xcode app-store ios kotlin kotlin-multiplatform

我尝试在 Apple App Store 上使用 Kotlin Multiplatform 分发 iOS 应用程序时遇到问题:

\n

错误

\n
\n

错误 ITMS-90171:“无效的捆绑结构 - 不允许二进制文件 \'Smiledu_app.app/Frameworks/shared.framework/shared\'。您的应用程序可以\xe2\x80\x99t 包含独立的可执行文件或库,除了支持的捆绑包的有效 CFBundleExecutable。有关 iOS 应用程序捆绑包结构的信息,请参阅https://developer.apple.com/go/?id=bundle-struct上的捆绑包编程指南。”

\n
\n

在此输入图像描述\n在此输入图像描述

\n

我检查它在“构建阶段”->“复制捆绑资源”中不存在

\n

在此输入图像描述

\n

这是我的 build.gradle.kts

\n
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget\n\nplugins {\n    kotlin("multiplatform")\n    kotlin("native.cocoapods")\n    kotlin("plugin.serialization")\n    id("com.android.library")\n    id("kotlin-android-extensions")\n    id("com.squareup.sqldelight")\n}\n\nrepositories {\n    gradlePluginPortal()\n    google()\n    jcenter()\n    mavenCentral()\n    maven {\n        url = uri("https://dl.bintray.com/kotlin/kotlin-eap")\n    }\n}\n\ndependencies {\n    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.2.0")\n}\n\nconfigurations {\n    create("compileClasspath")\n}\n\nandroid {\n    compileSdkVersion(29)\n    sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")\n    defaultConfig {\n        minSdkVersion(24)\n        targetSdkVersion(29)\n        versionCode = 1\n        versionName = "1.0"\n    }\n    buildTypes {\n        getByName("release") {\n            isMinifyEnabled = false\n        }\n    }\n}\n\nval libName = "shared"\n\nkotlin {\n    android()\n    ios {\n        binaries.framework(libName)\n    }\n\n    val coroutinesVersion = "1.4.1-native-mt"\n    val serializationVersion = "1.0.0-RC"\n    val ktorVersion = "1.4.0"\n    val sqlDelightVersion = "1.4.3"\n    val reactive_version = "1.1.18"\n\n    sourceSets {\n        val commonMain by getting {\n            dependencies {\n                implementation("org.jetbrains.kotlin:kotlin-stdlib-common")\n\n                // Coroutines\n                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.2")\n\n                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion")\n                implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:$serializationVersion")\n\n                //  KTOR\n                implementation("io.ktor:ktor-client-core:$ktorVersion")\n                implementation("io.ktor:ktor-client-json:$ktorVersion")\n                implementation("io.ktor:ktor-client-serialization:$ktorVersion")\n\n                // SQLDELIGHT\n                implementation("com.squareup.sqldelight:runtime:$sqlDelightVersion")\n\n                // Reactive\n                implementation("com.badoo.reaktive:reaktive:$reactive_version")\n            }\n        }\n        val androidMain by getting {\n            dependencies {\n                implementation("org.jetbrains.kotlin:kotlin-stdlib")\n\n                implementation("androidx.core:core-ktx:1.3.2")\n                implementation("io.ktor:ktor-client-android:$ktorVersion")\n                implementation("com.squareup.sqldelight:android-driver:$sqlDelightVersion")\n\n                implementation("androidx.lifecycle:lifecycle-extensions:2.2.0")\n            }\n        }\n        val iosMain by getting {\n            dependencies {\n                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-native:1.3.2")\n\n                // HTTP\n                implementation("io.ktor:ktor-client-ios:$ktorVersion")\n                implementation("com.squareup.sqldelight:native-driver:$sqlDelightVersion")\n            }\n        }\n\n        all {\n            languageSettings.apply {\n                progressiveMode = true\n                useExperimentalAnnotation("kotlin.RequiresOptIn")\n                useExperimentalAnnotation("kotlinx.coroutines.ExperimentalCoroutinesApi")\n            }\n        }\n    }\n}\n\nval packForXcode by tasks.creating(Sync::class) {\n    group = "build"\n    val mode = System.getenv("CONFIGURATION") ?: "DEBUG"\n    val sdkName = System.getenv("SDK_NAME") ?: "iphonesimulator"\n    val targetName = "ios" + if (sdkName.startsWith("iphoneos")) "Arm64" else "X64"\n    val framework = kotlin.targets.getByName<KotlinNativeTarget>(targetName).binaries.getFramework(mode)\n    inputs.property("mode", mode)\n    dependsOn(framework.linkTask)\n    val targetDir = File(buildDir, "xcode-frameworks")\n    from({ framework.outputDirectory })\n    into(targetDir)\n}\ntasks.getByName("build").dependsOn(packForXcode)\n\nsqldelight {\n    database("SmileduDataBase") {\n        packageName = "com.example.smiledu"\n        schemaOutputDirectory = file("src/commonMain/db/databases")\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Umi*_*mit 2

从“嵌入框架”部分删除“shared.framework”可能会解决您的问题。确保在将构建推送到 TestFlight 之前在本地验证构建。