菜鸟教程小白 发表于 2022-12-13 16:05:28

ios - 构建 iOS 框架时未找到 Ktor 和 kotlinx 依赖项


                                            <p><p>我正在尝试包括对 <code>ktor</code> 和 <code>kotlinx</code> (确切地说是 <code>serialization</code> 和 <code>coroutines</code> )的支持我的 Kotlin/Native 项目。所有库都适用于项目的 Android 版本,但是当我尝试编译 Xcode 项目时,我收到错误消息,指出 <code>kotlinx.serialization</code> 和 <code>kotlinx.coroutines</code> 库可以找不到:</p>

<pre><code>src/commonMain/kotlin/.../.kt:4:16: error: unresolved reference: coroutines
import kotlinx.coroutines.CoroutineDispatcher
               ^
src/commonMain/kotlin/.../.kt:5:16: error: unresolved reference: serialization
import kotlinx.serialization.json.JSON
</code></pre>

<p>这是我的项目的 gradle 文件:</p>

<pre><code>plugins {
    id &#39;kotlin-multiplatform&#39; version &#39;1.3.11&#39;
    id &#39;kotlinx-serialization&#39; version &#39;1.3.0&#39;
}

ext {
    ktor_version = &#39;1.0.1&#39;
    kotlinx_version = &#39;1.1.0&#39;
}

repositories {
    maven { url &#34;https://kotlin.bintray.com/ktor&#34; }
    maven { url &#34;https://kotlin.bintray.com/kotlinx&#34; }
    google()
    jcenter()
    mavenCentral()
}

apply plugin: &#39;com.android.application&#39;
apply plugin: &#39;kotlin-android-extensions&#39;

configurations {
    compilerPlugin
}

android {
    compileSdkVersion 27
    defaultConfig {
      applicationId &#34;org.jetbrains.kotlin.mpp_app_android&#34;
      minSdkVersion 15
      targetSdkVersion 27
      versionCode 1
      versionName &#34;1.0&#34;
      testInstrumentationRunner &#34;android.support.test.runner.AndroidJUnitRunner&#34;
    }
    buildTypes {
      release {
            minifyEnabled false
      }
    }
}

dependencies {
    implementation fileTree(dir: &#39;libs&#39;, include: [&#39;*.jar&#39;])
    implementation &#39;com.android.support:appcompat-v7:27.1.1&#39;
    implementation &#39;com.android.support.constraint:constraint-layout:1.1.3&#39;
    androidTestImplementation &#39;com.android.support.test:runner:1.0.2&#39;

}

kotlin {
    targets {
      fromPreset(presets.android, &#39;android&#39;)
      // This preset is for iPhone emulator
      // Switch here to presets.iosArm64 (or iosArm32) to build library for iPhone device
      fromPreset(presets.iosX64, &#39;ios&#39;) {
            compilations.main.outputKinds(&#39;FRAMEWORK&#39;)
      }
    }
    sourceSets {
      commonMain {
            dependencies {
                implementation &#39;commons-codec:commons-codec:1.10&#39;
                implementation &#39;org.jetbrains.kotlin:kotlin-stdlib-common&#39;
                implementation(&#34;io.ktor:ktor-client:$ktor_version&#34;)
                implementation &#34;org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$kotlinx_version&#34;
                implementation &#34;org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:0.9.1&#34;
            }
      }
      commonTest {
            dependencies {
                implementation &#39;org.jetbrains.kotlin:kotlin-test-common&#39;
                implementation &#39;org.jetbrains.kotlin:kotlin-test-annotations-common&#39;
            }
      }
      androidMain {
            dependencies {
                implementation &#39;org.jetbrains.kotlin:kotlin-stdlib&#39;
                implementation(&#34;io.ktor:ktor-client-android:$ktor_version&#34;)
                implementation &#34;org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_version&#34;
                implementation &#34;org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1&#34;
            }
      }
      androidTest {
            dependencies {
                implementation &#39;org.jetbrains.kotlin:kotlin-test&#39;
                implementation &#39;org.jetbrains.kotlin:kotlin-test-junit&#39;
            }
      }
      iosMain {
            dependencies {
                implementation(&#34;io.ktor:ktor-client-ios:$ktor_version&#34;)
                implementation &#34;org.jetbrains.kotlinx:kotlinx-coroutines-core-native:$kotlinx_version&#34;
                implementation &#34;org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:0.9.1&#34;
            }
      }
      iosTest {
      }
    }
}

// This task attaches native framework built from ios module to Xcode project
// (see iosApp directory). Don&#39;t run this task directly,
// Xcode runs this task itself during its build process.
// Before opening the project from iosApp directory in Xcode,
// make sure all Gradle infrastructure exists (gradle.wrapper, gradlew).
task copyFramework {
    def buildType = project.findProperty(&#34;kotlin.build.type&#34;) ?: &#34;DEBUG&#34;
    def target = project.findProperty(&#34;kotlin.target&#34;) ?: &#34;ios&#34;
    dependsOn &#34;link${buildType.toLowerCase().capitalize()}Framework${target.capitalize()}&#34;

    doLast {
      def srcFile = kotlin.targets.&#34;$target&#34;.compilations.main.getBinary(&#34;FRAMEWORK&#34;, buildType)
      def targetDir = getProperty(&#34;configuration.build.dir&#34;)
      copy {
            from srcFile.parent
            into targetDir
            include &#39;app.framework/**&#39;
            include &#39;app.framework.dSYM&#39;
      }
    }
}
</code></pre>

<p>任何帮助将不胜感激,谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>确保 <code>enableFeaturePreview("GRADLE_METADATA")</code> 在 <code>settings.gradle</code> 文件中。一旦我添加了这一行,我就可以从 Xcode 编译了。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 构建 iOS 框架时未找到 Ktor 和 kotlinx 依赖项,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/54221331/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/54221331/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 构建 iOS 框架时未找到 Ktor 和 kotlinx 依赖项