Xcode 15中KMM项目SwiftUI预览及模拟器异常问题
问题复现
KMM项目初期正常,后续出现SwiftUI预览无法使用(模拟器仍可运行),报错:
Task :shared:embedAndSignAppleFrameworkForXcode FAILED
error: /Users/ ... .app/Frameworks: Operation not permitted
What went wrong:
Execution failed for task ':shared:embedAndSignAppleFrameworkForXcode'.
Cannot access output property 'destDir' of task ':shared:embedAndSignAppleFrameworkForXcode'. Accessing unreadable inputs or outputs is not supported. Declare the task as untracked by using Task.doNotTrackState().
java.nio.file.FileSystemException: /Users/ ... .app/Frameworks: Operation not permitted
次日进一步出现模拟器无法运行,提示“Failed to create directory '..../Frameworks'”。
解决方案
修复目录权限问题
- 定位报错中的
.app/Frameworks路径,通过终端执行命令赋予读写权限:chmod -R 755 /Users/你的用户名/项目路径/.../.app/Frameworks - 检查系统隐私设置:打开「系统设置-隐私与安全性-文件与文件夹」,确保Xcode拥有项目所在目录的访问权限。
- 定位报错中的
清理构建缓存
- Xcode端:按
Cmd+Shift+K清理当前构建,再按Cmd+Option+Shift+K彻底清除Derived Data; - Gradle端:在项目根目录执行:
也可手动删除./gradlew clean~/.gradle/caches目录下的缓存文件。
- Xcode端:按
调整Gradle任务配置
在shared模块的build.gradle.kts中,为embedAndSignAppleFrameworkForXcode任务添加状态追踪禁用配置:tasks.named("embedAndSignAppleFrameworkForXcode") { doNotTrackState() }同步Gradle后重新构建项目。
确保版本兼容性
- 更新Android Studio的KMM插件至最新版本;
- 将Gradle版本升级至8.3及以上,适配Xcode 15的构建逻辑。
重新生成Xcode项目文件
在项目根目录执行命令重新生成Xcode配置:./gradlew generateXcodeProject之后打开项目的
.xcworkspace文件(而非.xcodeproj)进行构建。
内容的提问来源于stack exchange,提问作者georgij

