KMM项目Xcode构建失败:embedAndSignAppleFrameworkForXcode报错操作不允许
问题描述
在Xcode中构建iOS应用时遭遇Gradle任务执行失败,报错信息如下:
Resolve mutations for :GCAppShared:embedAndSignAppleFrameworkForXcode (Thread[#808,Execution worker,5,main]) started. :GCAppShared:embedAndSignAppleFrameworkForXcode (Thread[#808,Execution worker,5,main]) started. > Task :GCAppShared:embedAndSignAppleFrameworkForXcode FAILED error: /Users/tony/Library/Developer/Xcode/DerivedData/GCiosApp-caesltabwlltiwgdsytbghwsxekm/Build/Products/Debug-iphoneos/GCiosApp.app/Frameworks: Operation not permitted FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':GCAppShared:embedAndSignAppleFrameworkForXcode'. > Cannot access output property 'destDir' of task ':GCAppShared:embedAndSignAppleFrameworkForXcode'. Accessing unreadable inputs or outputs is not supported. Declare the task as untracked by using Task.doNotTrackState(). > java.nio.file.FileSystemException: /Users/tony/Library/Developer/Xcode/DerivedData/GCiosApp-caesltabwlltiwgdsytbghwsxekm/Build/Products/Debug-iphoneos/GCiosApp.app/Frameworks: Operation not permitted
已知背景:
- 项目昨日可正常构建,升级MacOS Sonoma后今日突发此问题
- 已尝试清理构建文件夹、拉取干净Git代码副本、删除报错提及的DerivedData文件夹,均无效
- 判定Gradle状态跟踪提示为症状而非根源,无法在项目中找到
embedAndSignAppleFrameworkForXcode相关定义,不想对整个GCAppShared模块应用doNotTrackState() - 曾在今年7月提交YouTrack工单(KT-60643),因项目闭源无法跟进;添加
--stacktrace也未获取有效细节 - 上次解决方法:使用
multiplatform-swiftpackage(但需手动更新Xcode依赖,希望能自动化)或重建项目(仅维持数月,不想重复操作)
可行解决方案
1. 精准配置目标Gradle任务
embedAndSignAppleFrameworkForXcode是Kotlin Multiplatform自动生成的任务,可通过Gradle任务匹配器单独对其禁用状态跟踪,无需影响整个模块。在GCAppShared模块的build.gradle.kts(或.gradle)中添加以下代码:
tasks.matching { task -> task.name.contains("embedAndSignAppleFrameworkForXcode") }.configureEach { doNotTrackState("Workaround for macOS Sonoma filesystem permission issue") }
2. 自动化Swift Package依赖更新
如果倾向于使用Swift Package Manager集成,可通过Gradle任务实现依赖更新自动化:
- 在共享模块的
build.gradle.kts中配置multiplatformSwiftPackage时,开启自动生成Package.swift - 添加自定义Gradle任务,触发包生成后自动通知Xcode刷新依赖:
tasks.register("updateSwiftPackage") { dependsOn(tasks.multiplatformSwiftPackage) doLast { exec { commandLine("osascript", "-e", """ tell application "Xcode" activate tell project "GCiosApp" refresh SPM packages end tell end tell """.trimIndent()) } } }
后续只需运行./gradlew updateSwiftPackage,即可自动完成Swift包更新与Xcode同步。
3. 修复MacOS Sonoma文件权限问题
报错核心为“Operation not permitted”,可尝试以下权限修复操作:
- 打开系统设置 → 隐私与安全性 → 文件与文件夹,确保Xcode和终端(或你使用的IDE)拥有
~/Library/Developer/Xcode/DerivedData文件夹的访问权限 - 重置DerivedData文件夹权限:
sudo chown -R $USER:staff ~/Library/Developer/Xcode/DerivedData chmod -R 755 ~/Library/Developer/Xcode/DerivedData
- 临时关闭系统完整性保护(SIP)测试(测试后立即开启):重启Mac进入恢复模式,终端执行
csrutil disable,重启后尝试构建;若问题解决,优先通过上述权限配置替代长期关闭SIP。
4. 调整Gradle或Kotlin插件版本
该问题可能源于Gradle 8.x与MacOS Sonoma的兼容性:
- 将Gradle版本降级至7.6.x(修改项目根目录
gradle/wrapper/gradle-wrapper.properties中的distributionUrl) - 升级Kotlin Multiplatform插件至最新稳定版(更新根
build.gradle.kts中kotlin("multiplatform")的版本号)
内容的提问来源于stack exchange,提问作者realh
相关产品推荐
相关产品推荐

