我是Android / KotlinMultiplatform的新手,我正在尝试使用Kotlin Multiplatform为iOS / Android创建一个库。
当我在终端上运行命令时
./gradlew :shared:packForXcode
它成功,但是在根文件夹内找不到/build/xcode-frameworks
文件夹。
有人可以帮我找出问题所在吗??
IntelliJ CE版本:2020.2.3
我的Gradle文件内容:
plugins {
id("org.jetbrains.kotlin.multiplatform") version "1.4.10"
id("com.android.library")
id("kotlin-android-extensions")
"maven-publish"
}
repositories {
mavenCentral()
}
group "me.myname"
version "0.0.1"
kotlin {
targets {
android()
ios {
binaries {
framework {
baseName = "MyLib"
}
}
}
}
sourceSets {
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9")
}
}
val androidMain by getting {
dependencies { }
}
val iosMain by getting {
dependencies { }
}
}
}
android {
compileSdkVersion(29)
defaultConfig {
minSdkVersion(24)
targetSdkVersion(29)
versionCode = 1
versionName = "1.0"
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
}
}
}
val packForXcode by tasks.creating(Sync::class) {
val targetDir = File(buildDir, "xcode-frameworks")
/// selecting the right configuration for the iOS
/// framework depending on the environment
/// variables set by Xcode build
val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
val sdkName: String? = System.getenv("SDK_NAME")
val isiOSDevice = sdkName.orEmpty().startsWith("iphoneos")
val framework = kotlin.targets
.getByName<KotlinNativeTarget>(
if(isiOSDevice) {
"iosArm64"
} else {
"iosX64"
}
)
.binaries.getFramework(mode)
inputs.property("mode", mode)
dependsOn(framework.linkTask)
from({ framework.outputDirectory })
into(targetDir)
println("Build Folder => $targetDir")
/// generate a helpful ./gradlew wrapper with embedded Java path
doLast {
val gradlew = File(targetDir, "gradlew")
gradlew.writeText("#!/bin/bash\n"
+ "export 'JAVA_HOME=${System.getProperty("java.home")}'\n"
+ "cd '${rootProject.rootDir}'\n"
+ "./gradlew \$@\n")
gradlew.setExecutable(true)
}
}
tasks.build.dependsOn("packForXCode")
更新
答案 0 :(得分:1)
我只能使用来查看屏幕截图的模板
IntelliJ 2020.2.3 Ultimate
此模板默认情况下未设置packForXcode
任务,所以我想应该手动将其放置。
无论如何,对于具有 cleaned 的项目,如果运行它,则可以在要放置它的build
文件夹中拥有调试框架。
您当然应该至少有一个源(Greeting.kt
)文件,就像我在图片中向您显示的文件一样。
答案 1 :(得分:0)
如果我没记错的话,此任务并非旨在手动执行。应该将其作为Xcode项目构建的一部分来触发,请参见documentation。请尝试按照文档中的步骤进行操作,并查看框架是否可以通过Xcode连接并正常工作。