Kotlin 多平台 - 错误 ITMS-90171:包结构无效 [英] Kotlin Multiplatform - ERROR ITMS-90171: Invalid Bundle Structure

查看:49
本文介绍了Kotlin 多平台 - 错误 ITMS-90171:包结构无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

<块引用>

错误 ITMS-90171:无效的捆绑结构 - 不允许使用二进制文件Smiledu_app.app/Frameworks/shared.framework/shared".您的应用程序不能包含独立的可执行文件或库,除了支持包的有效 CFBundleExecutable.请参阅

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

这是我的 build.gradle.kts

import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget插件{kotlin(多平台")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")}配置{创建(编译类路径")}安卓 {compileSdkVersion(29)sourceSets[main"].manifest.srcFile(src/androidMain/AndroidManifest.xml")默认配置{minSdk版本(24)目标SDK版本(29)版本代码 = 1版本名称 = 1.0"}构建类型{getByName("发布") {isMinifyEnabled = false}}}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";valreactive_version =1.1.18";源集{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:native-driver:$sqlDelightVersion")}}全部 {语言设置.应用{渐进模式 = 真useExperimentalAnnotation("kotlin.RequiresOptIn")useExperimentalAnnotation(kotlinx.coroutines.ExperimentalCoroutinesApi")}}}}val packForXcode by tasks.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(targetName).binaries.getFramework(mode)input.property(模式",模式)依赖(framework.linkTask)val targetDir = File(buildDir, xcode-frameworks")从({框架.输出目录})进入(目标目录)}tasks.getByName("build").dependsOn(packForXcode)sqldelight {数据库(SmileduDataBase"){packageName = "com.example.smiledu";schemaOutputDirectory = 文件(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆