KMM项目iOS模拟器构建失败:Xcode无输出指定Run Script阶段问题
解决KMM项目iOS端脚本构建阶段的警告与失败问题
处理脚本阶段的警告
这个警告是因为Xcode无法判断脚本是否需要重复运行,有两种解决方式:
- 添加输出依赖
- 打开iOS项目的
iosApp.xcodeproj(可通过Android Studio的Tools -> iOS -> Open iOS module in Xcode打开) - 选中
iosApptarget,切换到Build Phases标签页 - 找到名为
Run Script的构建阶段,点击Output Files下方的+按钮 - 如果脚本有实际生成的文件,填入对应路径;如果没有,可添加一个虚拟标记文件,比如
$(DERIVED_FILE_DIR)/.kmm_script_marker,让Xcode通过这个文件的存在性判断是否需要执行脚本
- 打开iOS项目的
- 禁用依赖分析
- 同样在
Run Script构建阶段,取消勾选Based on dependency analysis选项,Xcode会在每次构建时都运行该脚本,警告自动消失
- 同样在
排查脚本执行失败的问题
构建失败的核心是脚本执行出错,需先定位具体错误:
- 查看详细错误日志
在Xcode中打开Window -> Reports,找到最新的构建记录,点击PhaseScriptExecution Run Script条目,查看脚本执行时的具体报错信息(比如路径错误、命令不存在、权限不足等) - 常见问题及解决办法
- 脚本路径或命令错误:KMM自动生成的脚本通常会调用Gradle命令编译shared模块,检查脚本中的路径是否正确(比如
../gradlew的相对路径是否匹配项目结构),手动在终端运行脚本里的Gradle命令,验证能否成功执行 - 权限问题:如果提示"Permission denied",给脚本添加执行权限,在终端运行:
之后手动运行该脚本,确认是否能正常执行chmod +x /Users/moataz/AndroidStudioProjects/MyApplication/build/ios/iosApp.build/Debug-iphonesimulator/iosApp.build/Script-7555FFB5242A651A00829871.sh - shared模块编译失败:先单独编译shared模块的iOS目标,在Android Studio的
Gradle面板中找到shared -> Tasks -> ios,选择对应架构的framework编译任务(比如iosSimulatorArm64DebugFramework),确认能否成功生成framework文件 - 缓存问题:清理Xcode的构建缓存(
Product -> Clean Build Folder),同时清理Android Studio的缓存(File -> Invalidate Caches...),再重新尝试构建
- 脚本路径或命令错误:KMM自动生成的脚本通常会调用Gradle命令编译shared模块,检查脚本中的路径是否正确(比如
内容的提问来源于stack exchange,提问作者Moataz
相关产品推荐
相关产品推荐

