Kotlin多平台-错误ITMS-90171:无效的捆绑结构 [英] Kotlin Multiplatform - ERROR ITMS-90171: Invalid Bundle Structure
问题描述
尝试在Apple App Store上使用Kotlin Multiplatform分发我的iOS应用程序时遇到问题:
错误ITMS-90171:无效的捆绑包结构-不允许二进制文件'Smiledu_app.app/Frameworks/shared.framework/shared".除了有效的受支持捆绑软件CFBundleExecutable之外,您的应用中不能包含独立的可执行文件或库.请参阅
我检查了它在构建阶段中不存在->复制捆绑包资源
这是我的build.gradle.kts
导入org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget插件{kotlin(多平台")科特林("native.cocoapods")kotlin("plugin.serialization")id("com.android.library")id("kotlin-android-extensions")id("com.squareup.sqldelight")}储存库{gradlePluginPortal()谷歌()jcenter()mavenCentral()专家{url = uri("https://dl.bintray.com/kotlin/kotlin-eap")}}依赖项{实现("androidx.lifecycle:lifecycle-livedata-ktx:2.2.0&")}配置{create("compileClasspath")}安卓 {compileSdkVersion(29)sourceSets ["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")defaultConfig {minSdkVersion(24)targetSdkVersion(29)versionCode = 1versionName ="1.0";}buildTypes {getByName("release"){isMinifyEnabled =假}}}val libName =共享";科特琳{安卓()ios {binaries.framework(libName)}val coroutinesVersion ="1.4.1-native-mt";val serializationVersion ="1.0.0-RC";val ktorVersion ="1.4.0&";val sqlDelightVersion ="1.4.3";val react_version ="1.1.18";sourceSets {val commonMain通过获取{依赖项{实现("org.jetbrains.kotlin:kotlin-stdlib-common")//协程实现("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.2")实现("org.jetbrains.kotlinx:kotlinx-coroutines-core:$ coroutinesVersion")实施("org.jetbrains.kotlinx:kotlinx-serialization-core:$ serializationVersion")//KTOR实现("io.ktor:ktor-client-core:$ ktorVersion")实现("io.ktor:ktor-client-json:$ ktorVersion")实现("io.ktor:ktor-client-serialization:$ ktorVersion")//SQLDELIGHT实现("com.squareup.sqldelight:runtime:$ sqlDelightVersion")//反应实现("com.badoo.reaktive:reaktive:$ reactive_version")}}val androidMain通过获取{依赖项{实现("org.jetbrains.kotlin:kotlin-stdlib")实现("androidx.core:core-ktx:1.3.2")实现("io.ktor:ktor-client-android:$ ktorVersion")实现("com.squareup.sqldelight:android-driver:$ sqlDelightVersion")实现("androidx.lifecycle:lifecycle-extensions:2.2.0&")}}val iosMain通过获取{依赖项{实现("org.jetbrains.kotlinx:kotlinx-coroutines-core-native:1.3.2")//HTTP实现("io.ktor:ktor-client-ios:$ ktorVersion")实现("com.squareup.sqldelight:本地驱动程序:$ sqlDelightVersion")}}全部 {languageSettings.apply {ProgressiveMode =真useExperimentalAnnotation("kotlin.RequiresOptIn")useExperimentalAnnotation("kotlinx.coroutines.ExperimentalCoroutinesApi")}}}}val packForXcode通过task.creating(Sync :: class){组=构建"val mode = System.getenv("CONFIGURATION")?:"DEBUG";val sdkName = System.getenv("SDK_NAME")?:"iphonesimulator";val targetName ="ios";+ if(sdkName.startsWith("iphoneos"))"Arm64";否则为"X64"val framework = kotlin.targets.getByName< KotlinNativeTarget>(targetName).binaries.getFramework(mode)inputs.property(模式",模式)dependsOn(framework.linkTask)val targetDir = File(buildDir,"xcode-frameworks")来自({framework.outputDirectory})进入(targetDir)}task.getByName("build").dependsOn(packForXcode)sqldelight {数据库("SmileduDataBase"){packageName ="com.example.smiledu";schemaOutputDirectory = file("src/commonMain/db/databases")}}
解决方案删除"shared.framework"来自嵌入式框架";部分可能会解决您的问题.在将其推送到TestFlight之前,请确保在本地验证该版本.
I've a problem trying to distribute my iOS app with Kotlin Multiplatform on the Apple App Store:
ERROR ITMS-90171: "Invalid Bundle Structure - The binary file 'Smiledu_app.app/Frameworks/shared.framework/shared' is not permitted. Your app can’t contain standalone executables or libraries, other than a valid CFBundleExecutable of supported bundles. Refer to the Bundle Programming Guide at https://developer.apple.com/go/?id=bundle-structure for information on the iOS app bundle structure."
I checked that it doesn't exist in Build Phases -> Copy Bundle Resources
This is my build.gradle.kts
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget plugins { kotlin("multiplatform") kotlin("native.cocoapods") kotlin("plugin.serialization") id("com.android.library") id("kotlin-android-extensions") id("com.squareup.sqldelight") } repositories { gradlePluginPortal() google() jcenter() mavenCentral() maven { url = uri("https://dl.bintray.com/kotlin/kotlin-eap") } } dependencies { implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.2.0") } configurations { create("compileClasspath") } android { compileSdkVersion(29) sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") defaultConfig { minSdkVersion(24) targetSdkVersion(29) versionCode = 1 versionName = "1.0" } buildTypes { getByName("release") { isMinifyEnabled = false } } } val libName = "shared" kotlin { android() ios { binaries.framework(libName) } val coroutinesVersion = "1.4.1-native-mt" val serializationVersion = "1.0.0-RC" val ktorVersion = "1.4.0" val sqlDelightVersion = "1.4.3" val reactive_version = "1.1.18" sourceSets { val commonMain by getting { dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib-common") // Coroutines implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.2") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion") implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:$serializationVersion") // KTOR implementation("io.ktor:ktor-client-core:$ktorVersion") implementation("io.ktor:ktor-client-json:$ktorVersion") implementation("io.ktor:ktor-client-serialization:$ktorVersion") // SQLDELIGHT implementation("com.squareup.sqldelight:runtime:$sqlDelightVersion") // Reactive implementation("com.badoo.reaktive:reaktive:$reactive_version") } } val androidMain by getting { dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib") implementation("androidx.core:core-ktx:1.3.2") implementation("io.ktor:ktor-client-android:$ktorVersion") implementation("com.squareup.sqldelight:android-driver:$sqlDelightVersion") implementation("androidx.lifecycle:lifecycle-extensions:2.2.0") } } val iosMain by getting { dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-native:1.3.2") // HTTP implementation("io.ktor:ktor-client-ios:$ktorVersion") implementation("com.squareup.sqldelight:native-driver:$sqlDelightVersion") } } all { languageSettings.apply { progressiveMode = true useExperimentalAnnotation("kotlin.RequiresOptIn") useExperimentalAnnotation("kotlinx.coroutines.ExperimentalCoroutinesApi") } } } } val packForXcode by tasks.creating(Sync::class) { group = "build" val mode = System.getenv("CONFIGURATION") ?: "DEBUG" val sdkName = System.getenv("SDK_NAME") ?: "iphonesimulator" val targetName = "ios" + if (sdkName.startsWith("iphoneos")) "Arm64" else "X64" val framework = kotlin.targets.getByName<KotlinNativeTarget>(targetName).binaries.getFramework(mode) inputs.property("mode", mode) dependsOn(framework.linkTask) val targetDir = File(buildDir, "xcode-frameworks") from({ framework.outputDirectory }) into(targetDir) } tasks.getByName("build").dependsOn(packForXcode) sqldelight { database("SmileduDataBase") { packageName = "com.example.smiledu" schemaOutputDirectory = file("src/commonMain/db/databases") } }
解决方案Removing your "shared.framework" from "Embed Frameworks" section might solve your issue. Make sure you validate the build locally before pushing it to TestFlight.
这篇关于Kotlin多平台-错误ITMS-90171:无效的捆绑结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!