如何用KMM生成xcframework; embedAndSignAppleFrameworkForXcode 仅生成框架

问题描述 投票:0回答:2

我创建了一个 KMM 项目,以及一个 Xcode 项目,其构建阶段调用

./gradlew embedAndSignAppleFrameworkForXcode
。运行成功,但是生成的是.framework,而不是.xcframework;对于现代 Xcode,我们确实需要后者。

我错过了什么吗?我读到现代版本的 kotlin 可以直接生成 xcframework,但我不确定如何生成。有为此的 gradle 任务吗?

非常感谢:)

根据 Kdoctor 的说法,我有: Xcode 14.1 安卓工作室2021.3 Kotlin 插件:213-1.7.20 Kotlin MM 插件:0.5.1(213)-60

kotlin kotlin-multiplatform
2个回答
5
投票

您应该声明您的XCFrameworks,然后它会为您注册三个任务。

assembleXCFramework
assembleDebugXCFramework
assembleReleaseXCFramework

这是 build.gradle 的示例:

import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework

plugins {
  kotlin("multiplatform")
}

kotlin {
   val xcf = XCFramework()
   val iosTargets = listOf(iosX64(), iosArm64(), iosSimulatorArm64())

   iosTargets.forEach {
      it.binaries.framework {
          baseName = "shared"
          xcf.add(this)
      }
   }
}

有关更多信息,请访问 kotlin 文档


0
投票

我不记得第一次发布这个问题时这个解决方案是否是一个选项,但我最近遇到了同样的问题,除了其他答案中的手动方式之外,还找到了另一个解决方案。

创建共享模块时,对话框会提供一个选项来选择iOS框架分发方法。它默认为

Regular framework
,我见过的所有多平台模块教程都使用这个,所以我暂时没有找到其他选项。

Distribution Method Options

如果您在此处选择 XCFramework,生成的模块将自动在

assembleXCFramework
文件夹中提供
Tasks/build
gradle 任务。

Gradle Task list

执行该命令将为您生成 XCFramework,并且日志会将您指向目标路径。

Result Path Logs

它仍然有

embedAndSignAppleFrameworkForXcode
任务,尽管我不知道它是否会产生与为模块选择“常规框架”时不同的东西。

注意:再次执行

assembleXCFramework
任务似乎不会生成框架或显示结果路径,除非删除现有框架文件。

© www.soinside.com 2019 - 2024. All rights reserved.