为啥 kotlin multiplatform 不执行和导出 iOS 框架?
Posted
技术标签:
【中文标题】为啥 kotlin multiplatform 不执行和导出 iOS 框架?【英文标题】:why kotlin multiplatform don't execute and export iOS framework?为什么 kotlin multiplatform 不执行和导出 iOS 框架? 【发布时间】:2019-05-27 20:32:17 【问题描述】:我开始开发 kotlin 多平台,并开发了一个简单的测试库。我可以为 android 导出 .jar
文件,但我不能为 ios 导出 .framework
文件。
我查看了其他项目,但没有找到我的问题。
我的 Gradle
lib 脚本是:
apply plugin: 'kotlin-multiplatform'
kotlin
targets
final def iOSTarget =
System.getenv('SDK_NAME')?.startsWith("iphoneos") \
? presets.iosArm64 : presets.iosX64
fromPreset(iOSTarget, 'iOS')
compilations.main.outputKinds('FRAMEWORK')
fromPreset(presets.jvm, 'android')
sourceSets
core.dependencies
api 'org.jetbrains.kotlin:kotlin-stdlib-common'
android.dependencies
api 'org.jetbrains.kotlin:kotlin-stdlib'
【问题讨论】:
【参考方案1】:您是否添加了构建实际框架的任务?如果没有,请尝试在您的 build.gradle
文件末尾添加此代码:
task packForXCode(type: Sync)
final File frameworkDir = new File(buildDir, "xcode-frameworks")
final String mode = project.findProperty("XCODE_CONFIGURATION")?.toUpperCase() ?: 'DEBUG'
inputs.property "mode", mode
dependsOn kotlin.targets.iOS.compilations.main.linkTaskName("FRAMEWORK", mode)
from kotlin.targets.iOS.compilations.main.getBinary("FRAMEWORK", mode).parentFile
into frameworkDir
doLast
new File(frameworkDir, 'gradlew').with
text = "#!/bin/bash\nexport 'JAVA_HOME=$System.getProperty("java.home")'\ncd '$rootProject.rootDir'\n./gradlew \$@\n"
setExecutable(true)
tasks.build.dependsOn packForXCode
iOS 框架将在库的build/xcode-frameworks
目录中可用。
您还必须配置您的 Xcode 项目以使用该框架。更多详情可以阅读Setting up Framework Dependency in Xcode。
【讨论】:
没有错误信息。只是不要为 iOS 导出任何内容。 @AlirezaTarazani。没有错误信息?我对此表示怀疑,但请确保任务已实际执行。 添加packForXCode
后,您是否正在运行./gradlew :common:packForXCode
(假设您的build.gradle
位于名为common
的目录中)。我可以使用此处发布的代码并运行此命令来使其正常工作。
我在运行 ./gradlew :shared:packForXCode 时收到“在项目中找不到路径为 'linkMainDebugFrameworkIOS' 的任务”。有什么提示吗?
解决了我自己的问题!:packForXCode 和 gradle 中的框架名称不同。【参考方案2】:
“导出框架”是什么意思?您打算从另一个 Gradle 项目、XCode 或其他项目中使用它吗?
附:很抱歉在回答中提问:只是没有足够的声誉来发表评论。所以我认为在GitHub讨论你的问题会更方便。
【讨论】:
以上是关于为啥 kotlin multiplatform 不执行和导出 iOS 框架?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Kotlin Multiplatform(纯 kotlin)中进行延迟
Kotlin Multiplatform Cocoapods 集成问题
如何确定 kotlin-multiplatform 项目中的构建类型
KMM(Kotlin Multiplatform Mobile)Welcome to Kotlin/Native World
KMM(Kotlin Multiplatform Mobile)Welcome to Kotlin/Native World
KMM(Kotlin Multiplatform Mobile)Welcome to Kotlin/Native World