Приложение KMM не может работать в симулятореIOS

Программируем под IOS
Ответить
Anonymous
 Приложение KMM не может работать в симуляторе

Сообщение Anonymous »

Я новичок в KMM и пытаюсь интегрировать проект KMM в качестве модуля в свой образец проекта Xcode. Я могу связать модуль KMM с моим проектом Xcode. Однако, если я попытаюсь вызвать одну из функций, возникнет ошибка ниже. Если я не вызываю какую-либо функцию KMM, она сможет запустить приложение в моем симуляторе.

Код: Выделить всё

ViewController

Код: Выделить всё

import UIKit
import Multiplatform

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let a = Greeting()
a.greeting()
}
}

Код: Выделить всё

ld: warning: ignoring file /Users/avjiang/Developments/Multiplatform/SharedCode/build/cocoapods/framework/Multiplatform.framework/Multiplatform, building for iOS Simulator-arm64 but attempting to link with file built for iOS Simulator-x86_64
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_MultiplatformGreeting", referenced from:
objc-class-ref in ViewController.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Приложение KMM — это простое приложение. Внутри SharedCode -> commonMain -> kotlin -> Greeting
Ниже приведена моя конфигурация для build.gradle.kts
.

Код: Выделить всё

import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

plugins {
kotlin("multiplatform")
kotlin("native.cocoapods")
id("com.android.library")
}

version = "1.0"

kotlin {
android()

cocoapods {
// Configure fields required by CocoaPods.
summary = "Some description for a Kotlin/Native module"
homepage = "Link to a Kotlin/Native module homepage"
frameworkName = "Multiplatform"
ios.deploymentTarget = "13.5"
podfile = project.file("/Users/avjiang/Developments/TestKotlinMultiplatformPod/Podfile")
}

val iosTarget: (String, KotlinNativeTarget.() -> Unit) -> KotlinNativeTarget =
if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true)
::iosArm64
else
::iosX64

iosTarget("ios") { }

sourceSets {
val commonMain by getting
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
val androidMain by getting
val androidTest by getting {
dependencies {
implementation(kotlin("test-junit"))
implementation("junit:junit:4.13.2")
}
}
val iosMain by getting
val iosTest by getting
}
}

android {
compileSdkVersion(30)
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
defaultConfig {
minSdkVersion(19)
targetSdkVersion(30)
}
}
А это мой проект build.gradle.kts

Код: Выделить всё

buildscript {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20")
classpath("com.android.tools.build:gradle:4.2.2")
}
}

allprojects {
repositories {
google()
mavenCentral()
}
}

tasks.register("clean", Delete::class) {
delete(rootProject.buildDir)
}
По сути, я просто следую руководству https://kotlinlang.org/docs/mobile/crea ... t-app.html. Пока ничего сложного. Что-то я пропустил?
Конфигурация моей машины:

Код: Выделить всё

Mac mini M1

Код: Выделить всё

Xcode 13 beta 2

Код: Выделить всё

MacOS 11.4
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/683 ... -simulator
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»