Xcode 在导入由 gradle 插件生成的 cocoapods 时显示 swift 编译器错误
Xcode shows swift compiler errors when importing cocoapods generated by gradle plugin
我正在尝试在我的 iOS 项目中使用我使用 cocoapods gradle 插件创建的 cocoapods 的共享代码。
Podspec 的创建没有问题。
我的分享 build.gradle:
plugins {
id("org.jetbrains.kotlin.multiplatform")
id("com.android.library")
id ("org.jetbrains.kotlin.native.cocoapods")
}
android {
compileSdkVersion 29
buildToolsVersion '30.0.0'
defaultConfig {
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
version = "1.0"
kotlin {
ios()
android()
cocoapods {
// Configure fields required by CocoaPods.
summary = "Some description for a Kotlin/Native module"
homepage = "Link to a Kotlin/Native module homepage"
// The name of the produced framework can be changed.
// The name of the Gradle project is used here by default.
frameworkName = "toshlShared"
}
sourceSets {
commonMain.dependencies {
api 'org.jetbrains.kotlin:kotlin-stdlib-common'
}
androidMain.dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
}
iosMain.dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
}
}
}
当我 运行 pod 安装时一切看起来都不错,但是当我 运行 ios 应用程序时我看到这个错误:
编辑:用我的单个 .kt 文件添加了我的项目文件夹结构(可以从 android 代码访问)
据我了解,这里的问题是项目结构导致的。在 Gradle 脚本中,声明了三个目标:一个 Android 一个,以及提供另外两个的 iosX64
+iosArm64
快捷方式(参见详细信息 here)。对于此布局,每个 iOS 目标 (iosX64Main, iosX64Test, iosArm64Main, iosArm64Test
) 和
将有两个编译
a compilation per Android build variant, for Android targets;
根据 documentation。
在这种特殊情况下,只有源文件 SharedUtils.kt
位于 Android main
编译的源集。这意味着它不会进入任何 iOS 编译。
要共享此源文件,应将其重新定位到公共代码。 Kotlin Multiplatform 中公共代码有两个默认源集:commonMain
和 commonTest
。因此,源代码应放在 src/<sourceSetName>/kotlin
目录下(本例为 commonMain
)。
我正在尝试在我的 iOS 项目中使用我使用 cocoapods gradle 插件创建的 cocoapods 的共享代码。 Podspec 的创建没有问题。 我的分享 build.gradle:
plugins {
id("org.jetbrains.kotlin.multiplatform")
id("com.android.library")
id ("org.jetbrains.kotlin.native.cocoapods")
}
android {
compileSdkVersion 29
buildToolsVersion '30.0.0'
defaultConfig {
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
version = "1.0"
kotlin {
ios()
android()
cocoapods {
// Configure fields required by CocoaPods.
summary = "Some description for a Kotlin/Native module"
homepage = "Link to a Kotlin/Native module homepage"
// The name of the produced framework can be changed.
// The name of the Gradle project is used here by default.
frameworkName = "toshlShared"
}
sourceSets {
commonMain.dependencies {
api 'org.jetbrains.kotlin:kotlin-stdlib-common'
}
androidMain.dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
}
iosMain.dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
}
}
}
当我 运行 pod 安装时一切看起来都不错,但是当我 运行 ios 应用程序时我看到这个错误:
编辑:用我的单个 .kt 文件添加了我的项目文件夹结构(可以从 android 代码访问)
据我了解,这里的问题是项目结构导致的。在 Gradle 脚本中,声明了三个目标:一个 Android 一个,以及提供另外两个的 iosX64
+iosArm64
快捷方式(参见详细信息 here)。对于此布局,每个 iOS 目标 (iosX64Main, iosX64Test, iosArm64Main, iosArm64Test
) 和
a compilation per Android build variant, for Android targets;
根据 documentation。
在这种特殊情况下,只有源文件 SharedUtils.kt
位于 Android main
编译的源集。这意味着它不会进入任何 iOS 编译。
要共享此源文件,应将其重新定位到公共代码。 Kotlin Multiplatform 中公共代码有两个默认源集:commonMain
和 commonTest
。因此,源代码应放在 src/<sourceSetName>/kotlin
目录下(本例为 commonMain
)。