Hey, I got this error only in iOS project: ``` err...
# serialization
s
Hey, I got this error only in iOS project:
Copy code
error: compilation failed: Can't locate polymorphic serializer definition
Copy code
* Source files: Platform.kt, Session.kt, AuthorizationClient.kt, Keychain.kt, Date+Extensions.kt, Global.kt, Ktor.kt, LocalNotification.kt, Observable.kt, String.kt, RecentModel.kt, authorization.kt, RoomMessage.kt, RoomMessageEvent.kt, RoomModel.kt, Group.kt, RoomProfile.kt, User.kt, Endpoints.kt, Method.kt, RecentService.kt, ProfileService.kt, RoomService.kt, Platform.kt, Keychain.kt, KeychainWrapper.kt, Date.kt, LocalNotification.kt
 * Compiler version info: Konan: 1.1.2 / Kotlin: 1.3.21
 * Output kind: FRAMEWORK

exception: java.lang.IllegalArgumentException: Can't locate polymorphic serializer definition
	at org.jetbrains.kotlinx.serialization.compiler.backend.common.TypeUtilKt.findPolymorphicSerializer(TypeUtil.kt:180)
	at org.jetbrains.kotlinx.serialization.compiler.backend.common.TypeUtilKt.findTypeSerializer(TypeUtil.kt:119)
	at org.jetbrains.kotlinx.serialization.compiler.backend.common.TypeUtilKt.findTypeSerializerOrContext(TypeUtil.kt:108)
	at org.jetbrains.kotlinx.serialization.compiler.backend.common.TypeUtilKt.findTypeSerializerOrContext(TypeUtil.kt:101)
	at org.jetbrains.kotlinx.serialization.compiler.backend.common.TypeUtilKt.getSerialTypeInfo(TypeUtil.kt:88)
	at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator$generateSave$1.invoke(SerializerIrGenerator.kt:219)
	at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator$generateSave$1.invoke(SerializerIrGenerator.kt:42)
	at org.jetbrains.kotlinx.serialization.compiler.backend.ir.IrBuilderExtension$DefaultImpls.contributeFunction(GeneratorHelpers.kt:74)
	at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator.contributeFunction(SerializerIrGenerator.kt:42)
	at org.jetbrains.kotlinx.serialization.compiler.backend.ir.IrBuilderExtension$DefaultImpls.contributeFunction$default(GeneratorHelpers.kt:67)
	at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator.generateSave(SerializerIrGenerator.kt:183)
	at org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializerCodegen.generateSaveIfNeeded(SerializerCodegen.kt:119)
	at org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializerCodegen.generate(SerializerCodegen.kt:48)
	at org.jetbrains.kotlinx.serialization.compiler.backend.ir.SerializerIrGenerator$Companion.generate(SerializerIrGenerator.kt:418)
	at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializerClassLowering.lower(SerializationLoweringExtension.kt:47)
	at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:34)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitClass(IrElementVisitorVoid.kt:44)
	at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:28)
	at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:28)
	at org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl.accept(IrClassImpl.kt:102)
	at org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl.acceptChildren(IrClassImpl.kt:107)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoidKt.acceptChildrenVoid(IrElementVisitorVoid.kt:251)
	at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:35)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitClass(IrElementVisitorVoid.kt:44)
	at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitClass(SerializationLoweringExtension.kt:28)
Copy code
at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitPackageFragment(SerializationLoweringExtension.kt:28)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitFile(IrElementVisitorVoid.kt:37)
	at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitFile(SerializationLoweringExtension.kt:28)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitFile(IrElementVisitorVoid.kt:38)
	at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitFile(SerializationLoweringExtension.kt:28)
	at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt$runOnFileInOrder$1.visitFile(SerializationLoweringExtension.kt:28)
	at org.jetbrains.kotlin.ir.declarations.impl.IrFileImpl.accept(IrFileImpl.kt:76)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoidKt.acceptVoid(IrElementVisitorVoid.kt:247)
	at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtensionKt.runOnFileInOrder(SerializationLoweringExtension.kt:28)
	at org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationLoweringExtension.generate(SerializationLoweringExtension.kt:58)
	at org.jetbrains.kotlin.backend.konan.KonanDriverKt$runTopLevelPhases$3.invoke(KonanDriver.kt:77)
	at org.jetbrains.kotlin.backend.konan.KonanDriverKt$runTopLevelPhases$3.invoke(KonanDriver.kt)
	at org.jetbrains.kotlin.backend.konan.PhaseManager$phase$$inlined$with$lambda$1.invoke(KonanPhases.kt:137)
	at org.jetbrains.kotlin.backend.konan.PhaseManager$phase$$inlined$with$lambda$1.invoke(KonanPhases.kt:111)
	at org.jetbrains.kotlin.konan.util.UtilKt.profileIf(Util.kt:37)
	at org.jetbrains.kotlin.backend.konan.PhaseManager.phase(KonanPhases.kt:136)
	at org.jetbrains.kotlin.backend.konan.KonanDriverKt.runTopLevelPhases(KonanDriver.kt:74)
	at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:79)
	at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:35)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:96)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:52)
	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:93)
	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:71)
	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:39)
	at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMainNoExit(CLITool.kt:204)
	at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMain(CLITool.kt:196)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:217)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion$main$1.invoke(K2Native.kt:208)
	at org.jetbrains.kotlin.konan.util.UtilKt.profileIf(Util.kt:37)
	at org.jetbrains.kotlin.konan.util.UtilKt.profile(Util.kt:31)
	at org.jetbrains.kotlin.cli.bc.K2Native$Companion.main(K2Native.kt:210)
	at org.jetbrains.kotlin.cli.bc.K2NativeKt.main(K2Native.kt:279)
	at org.jetbrains.kotlin.cli.utilities.MainKt.main(main.kt:16)


> Task :MessengerCore:linkDebugFrameworkIos FAILED
j
iOS does not yet support polymorphic stuff as far as I know. Are you trying to serialize/deserialize something with a non-final type?
s
How can I understand type is non-final?
j
A type is
final
if it is a
class
, it is not
abstract
, it is not
sealed
, and it is not
open
.
If you are trying to serialize something that has a field with a non-final type, like
Any
for example, it's not going to work.
s
Thank you! Tried to serialize
PartData?
j
What is a
PartData
? Where is it from?
s
That's ktor
sealed class PartData
j
Yep, that's certainly one that won't work. That's because
PartData
is a
sealed
class, which basically means the same thing as
abstract
. I should have mentioned that earlier.
s
Thank you ❤️