Mac OS 应用程序上的 Kotlin 多平台框架 CodeSign 问题
Kotlin Multi Platform framwork CodeSig problem on a Mac OS application
我使用 kotlin 多平台创建了一个模块,它是否在 Android 和 iOS 上完美运行,但是当我尝试对 macOS 应用程序我收到以下错误:
XYZ.app: code object is not signed at all
Command CodeSign failed with a nonzero exit code
我生成的框架如下:
kotlin {
jvm("android")
macosX64("mac") {
binaries {
framework {
baseName = "XyzForMac"
}
}
}
def iosClosure = {
binaries {
framework {
baseName = "XyzForIos"
}
}
}
if (System.getenv("SDK_NAME")?.startsWith("iphoneos")) {
iosArm64("ios", iosClosure)
} else {
iosX64("ios", iosClosure)
}
sourceSets {…}
}
task packForXcode(type: Sync) {
def targetDir = new File(buildDir, "xcode-frameworks")
def mode = System.getenv("CONFIGURATION") ?: "DEBUG"
def frameworkMac = kotlin.targets.getByName("mac").binaries.getFramework(mode)
inputs.property("mode", mode)
dependsOn frameworkMac.linkTask
from frameworkMac.outputDirectory
into targetDir
def frameworkIos = kotlin.targets.getByName("ios").binaries.getFramework(mode)
inputs.property("mode", mode)
dependsOn frameworkIos.linkTask
from frameworkIos.outputDirectory
into targetDir
doLast {
def gradlew = new File(targetDir, "gradlew")
gradlew.text = """\
|#!/bin/bash
|export 'JAVA_HOME=${System.getProperty("java.home")}'
|cd '${rootProject.rootDir}'
|./gradlew $@""".stripMargin().stripIndent()
gradlew.setExecutable(true)
}
}
tasks.getByName("build").dependsOn(packForXcode)
看起来我做的一切都是正确的,尤其是因为该应用在 Android 和 iOS 上符合预期 运行。我想知道我是否缺少任何 mac os 特定配置才能使其正常工作……
我解决了改变方法的问题,而不是使用自定义任务 packForXcode
和手动导入框架,我现在使用 CocoaPods integration,所以我做了什么:
- 使用 cocoapods,删除
packForXcode
任务(以及 Xcode 上的自定义步骤)
- 我正在将目标移动到 gradle build:
上的特定块
- 因为我使用的是 cocoapods,所以不再有不同的打包二进制文件了
kotlin {
targets { // <-- this is new
jvm("android")
macosX64("mac") {
binaries {
framework("Xyz") // Removed the ForMac
}
}
def iosClosure = {
binaries {
framework("Xyz") // Removed the ForIos
}
}
if (System.getenv("SDK_NAME")?.startsWith("iphoneos")) {
iosArm64("ios", iosClosure)
} else {
iosX64("ios", iosClosure)
}
}
cocoapods {…} // cocoa pods block
sourceSets {…}
}
我使用 kotlin 多平台创建了一个模块,它是否在 Android 和 iOS 上完美运行,但是当我尝试对 macOS 应用程序我收到以下错误:
XYZ.app: code object is not signed at all
Command CodeSign failed with a nonzero exit code
我生成的框架如下:
kotlin {
jvm("android")
macosX64("mac") {
binaries {
framework {
baseName = "XyzForMac"
}
}
}
def iosClosure = {
binaries {
framework {
baseName = "XyzForIos"
}
}
}
if (System.getenv("SDK_NAME")?.startsWith("iphoneos")) {
iosArm64("ios", iosClosure)
} else {
iosX64("ios", iosClosure)
}
sourceSets {…}
}
task packForXcode(type: Sync) {
def targetDir = new File(buildDir, "xcode-frameworks")
def mode = System.getenv("CONFIGURATION") ?: "DEBUG"
def frameworkMac = kotlin.targets.getByName("mac").binaries.getFramework(mode)
inputs.property("mode", mode)
dependsOn frameworkMac.linkTask
from frameworkMac.outputDirectory
into targetDir
def frameworkIos = kotlin.targets.getByName("ios").binaries.getFramework(mode)
inputs.property("mode", mode)
dependsOn frameworkIos.linkTask
from frameworkIos.outputDirectory
into targetDir
doLast {
def gradlew = new File(targetDir, "gradlew")
gradlew.text = """\
|#!/bin/bash
|export 'JAVA_HOME=${System.getProperty("java.home")}'
|cd '${rootProject.rootDir}'
|./gradlew $@""".stripMargin().stripIndent()
gradlew.setExecutable(true)
}
}
tasks.getByName("build").dependsOn(packForXcode)
看起来我做的一切都是正确的,尤其是因为该应用在 Android 和 iOS 上符合预期 运行。我想知道我是否缺少任何 mac os 特定配置才能使其正常工作……
我解决了改变方法的问题,而不是使用自定义任务 packForXcode
和手动导入框架,我现在使用 CocoaPods integration,所以我做了什么:
- 使用 cocoapods,删除
packForXcode
任务(以及 Xcode 上的自定义步骤) - 我正在将目标移动到 gradle build: 上的特定块
- 因为我使用的是 cocoapods,所以不再有不同的打包二进制文件了
kotlin {
targets { // <-- this is new
jvm("android")
macosX64("mac") {
binaries {
framework("Xyz") // Removed the ForMac
}
}
def iosClosure = {
binaries {
framework("Xyz") // Removed the ForIos
}
}
if (System.getenv("SDK_NAME")?.startsWith("iphoneos")) {
iosArm64("ios", iosClosure)
} else {
iosX64("ios", iosClosure)
}
}
cocoapods {…} // cocoa pods block
sourceSets {…}
}