Kotlin Multiplatform库导出为.framework后在Xcode运行崩溃求助
以下是可能导致该崩溃问题的原因及对应的解决思路:
架构不兼容
你生成的是iosSimulatorArm64架构的framework,若你的Mac是Intel芯片(x86_64架构),或者Xcode运行时选择了x86_64模拟器目标,会因架构不匹配触发崩溃。
解决:要么切换到Apple Silicon模拟器运行,要么修改KMM配置同时生成多模拟器架构的fat framework,配置示例:iosSimulatorArm64() { binaries { framework { baseName = "TestLibrary" } } } iosX64() { binaries { framework { baseName = "TestLibrary" } } } // 执行构建后用lipo命令合并架构: // lipo -create build/bin/iosX64/framework/TestLibrary.framework/TestLibrary build/bin/iosSimulatorArm64/framework/TestLibrary.framework/TestLibrary -output TestLibrary.framework/TestLibraryKMM插件版本未同步升级
仅升级Kotlin语言版本到1.9.21,但未同步更新kotlin-multiplatform插件版本,会导致构建出的framework存在兼容性问题,加载时崩溃。
解决:在项目根目录的build.gradle.kts中,将KMM插件版本更新为与Kotlin版本匹配的1.9.21:plugins { kotlin("multiplatform") version "1.9.21" apply false }Xcode中Framework嵌入配置错误
引入framework时,若未设置Embed & Sign,会导致运行时无法找到framework文件,触发崩溃。
解决:在Xcode项目的General标签页,找到Frameworks, Libraries, and Embedded Content,将TestLibrary.framework的Embed选项设置为Embed & Sign。缺少Kotlin标准库依赖
KMM生成的framework依赖Kotlin标准库组件,若Xcode项目未自动引入这些依赖,加载framework时会因缺失依赖崩溃。
解决:在KMM的framework配置中开启自动导出Kotlin标准库,配置示例:iosSimulatorArm64() { binaries { framework { baseName = "TestLibrary" export(kotlin("stdlib")) } } }
内容的提问来源于stack exchange,提问作者vegidio

