KMM项目iOS端构建失败:embedAndSignPodAppleFrameworkForXcode任务报错
错误信息
Task :shared:embedAndSignPodAppleFrameworkForXcode FAILED
/Users/rrodrigues/Library/Developer/Xcode/DerivedData/iosApp-ceehutcffarijmfonwdjiknmheak/Build/Products/Debug-iphonesimulator/iosApp.app/Frameworks/shared.framework/shared: resource fork, Finder information, or similar detritus not allowedFAILURE: Build failed with an exception.
- 出错原因:
Task ':shared:embedAndSignPodAppleFrameworkForXcode'执行失败。Process 'command 'codesign'' finished with non-zero exit value 1
解决方案
方法1:手动清理资源分支和构建缓存
清理Xcode构建缓存
执行终端命令删除指定DerivedData目录:rm -rf ~/Library/Developer/Xcode/DerivedData/iosApp-ceehutcffarijmfonwdjiknmheak或在Xcode中使用快捷键:
Command+Shift+K清理项目,再Command+Option+Shift+K清理构建文件夹。清理framework的扩展属性
进入framework所在路径,执行命令移除所有扩展属性:xattr -cr /Users/rrodrigues/Library/Developer/Xcode/DerivedData/iosApp-ceehutcffarijmfonwdjiknmheak/Build/Products/Debug-iphonesimulator/iosApp.app/Frameworks/shared.framework若为项目内的shared模块,可直接在项目根目录执行:
xattr -cr shared/build重新构建项目
回到Xcode或Android Studio,重新执行构建操作。
方法2:Gradle脚本自动清理(一劳永逸)
在shared模块的build.gradle.kts中添加以下任务,让构建前自动清理扩展属性:
// 确保归档文件不保留时间戳,避免生成资源分支 tasks.withType<AbstractArchiveTask>().configureEach { isPreserveFileTimestamps = false isReproducibleFileOrder = true } // 定义清理扩展属性的任务 tasks.register("cleanXattr") { doLast { val frameworkDir = file("build/xcode-frameworks/shared.framework") if (frameworkDir.exists()) { exec { commandLine("xattr", "-cr", frameworkDir.absolutePath) } } } } // 让签名任务依赖清理任务 tasks.named("embedAndSignPodAppleFrameworkForXcode").configure { dependsOn("cleanXattr") }
添加后重新同步Gradle,后续构建会自动执行清理步骤。
内容的提问来源于stack exchange,提问作者Ricardo Rodrigues

