Kotlin Многоплатформенная проблема CodeSig в приложении Ma c OS - PullRequest
0 голосов
/ 12 апреля 2020

Я создал модуль, используя 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. Мне интересно, пропустил ли я какую-либо конфигурацию ma c os Speci c, чтобы она работала ...

1 Ответ

0 голосов
/ 28 апреля 2020

Я решаю проблему, меняя подход, вместо того, чтобы использовать пользовательскую задачу packForXcode и импортируя вручную фреймворк, теперь я использую интеграцию CocoaPods , так что я сделал:

  • Используя cocoapods, удаляя задачу packForXcode (и пользовательские шаги в XCode)
  • Я перемещаю цели в указанный c блок при сборке Gradle:
  • Поскольку я использую 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 {…}
}
...