Unity中如何配置XCode.app路径?IL2CPP构建MacOS应用失败
问题描述
在Mac上使用Unity 2019.4.37f1(启用IL2CPP)构建MacOS应用时,最终步骤失败,提示无法在/Users/UserName/Downloads/Xcode.app/Contents/Developer找到XCode,但实际XCode安装在/Applications文件夹中。项目内未找到相关路径配置,需定位并修正该配置。
版本信息:
- Unity: 2019.4.37f1
- MacOS: 12.3.1
- XCode: 13.4.1 (13F100)
编辑器日志:
Exception: /Applications/Unity/Hub/Editor/2019.4.37f1/Unity.app/Contents/il2cpp/build/deploy/il2cppcore/il2cppcore.dll did not run properly!
Failed running "/Applications/Unity/Hub/Editor/2019.4.37f1/Unity.app/Contents/il2cpp/build/deploy/il2cppcore/il2cppcore.dll" --convert-to-cpp --emit-null-checks --enable-array-bounds-check --dotnetprofile="unityaot" --compile-cpp --libil2cpp-static --platform="MacOSX" --architecture="x64" --configuration="Release" --outputpath="/Users/UserName/Projects/ProjectName/Temp/StagingArea/Data/Native/GameAssembly.dylib" --cachedirectory="/Users/UserName/Projects/ProjectName/Assets/../Library/il2cpp_cache" --profiler-report --map-file-parser="/Applications/Unity/Hub/Editor/2019.4.37f1/Unity.app/Contents/Tools/MapFileParser/MapFileParser" --directory="/Users/UserName/Projects/ProjectName/Temp/StagingArea/Data/Managed" --generatedcppdir="/Users/UserName/Projects/ProjectName/Temp/StagingArea/Data/il2cppOutput"
stdout:
il2cpp.exe didn't catch exception: System.InvalidOperationException: C++ code builder is unable to build C++ code. Please install Xcode at /Users/UserName/Downloads/Xcode.app/Contents/Developer at Unity.IL2CPP.Building.CppProgramBuilder.ThrowIfCannotBuildInCurrentEnvironment()
at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
at il2cpp.Program.DoRun(String[] args, List1 foundAssemblies) at il2cpp.Program.Run(String[] args, Boolean setInvariantCulture) at il2cpp.Program.Main(String[] args) stderr: Unhandled Exception: System.InvalidOperationException: C++ code builder is unable to build C++ code. Please install Xcode at /Users/UserName/Downloads/Xcode.app/Contents/Developer at Unity.IL2CPP.Building.CppProgramBuilder.ThrowIfCannotBuildInCurrentEnvironment() at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics) at il2cpp.Program.DoRun(String[] args, List1 foundAssemblies)
at il2cpp.Program.Run(String[] args, Boolean setInvariantCulture)
at il2cpp.Program.Main(String[] args)
at Program.Main(String[] args) in /Users/bokken/buildslave/unity/build/External/il2cpp/il2cpp/il2cppcore/Program.cs:line 24
UnityEditorInternal.Runner.RunProgram (UnityEditor.Utils.Program p, System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser) (at /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:126)
UnityEditorInternal.Runner.RunNetCoreProgram (System.String exe, System.String args, System.String workingDirectory, UnityEditor.Scripting.Compilers.CompilerOutputParserBase parser, System.Action1[T] setupStartInfo) (at /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:77) UnityEditorInternal.IL2CPPBuilder.RunIl2CppWithArguments (System.Collections.Generic.List1[T] arguments, System.Action1[T] setupStartInfo, System.String workingDirectory) (at /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:718) UnityEditorInternal.IL2CPPBuilder.ConvertPlayerDlltoCpp (UnityEditor.Il2Cpp.Il2CppBuildPipelineData data, System.String outputDirectory, System.String workingDirectory, System.Boolean platformSupportsManagedDebugging) (at /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:701) UnityEditorInternal.IL2CPPBuilder.Run () (at /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:538) UnityEditorInternal.IL2CPPUtils.RunIl2Cpp (System.String stagingAreaData, UnityEditorInternal.IIl2CppPlatformProvider platformProvider, System.Action1[T] modifyOutputBeforeCompile, UnityEditor.RuntimeClassRegistry runtimeClassRegistry) (at /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:273)
DesktopStandalonePostProcessor.SetupStagingArea (UnityEditor.Modules.BuildPostProcessArgs args, System.Collections.Generic.HashSet`1[T] filesToNotOverwrite) (at /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/DesktopStandalonePostProcessor.cs:223)
DesktopStandalonePostProcessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/DesktopStandalonePostProcessor.cs:42)
Rethrow as BuildFailedException: Exception of type 'UnityEditor.Build.BuildFailedException' was thrown.
DesktopStandalonePostProcessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/DesktopStandalonePostProcessor.cs:60)
UnityEditor.OSXStandalone.OSXDesktopStandalonePostProcessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args) (at /Users/bokken/buildslave/unity/build/PlatformDependent/OSXPlayer/Extensions/Managed/OSXDesktopStandalonePostProcessor.cs:441)
UnityEditor.Modules.DefaultBuildPostprocessor.PostProcess (UnityEditor.Modules.BuildPostProcessArgs args, UnityEditor.BuildProperties& outProperties) (at /Users/bokken/buildslave/unity/build/Editor/Mono/Modules/DefaultBuildPostprocessor.cs:29)
UnityEditor.PostprocessBuildPlayer.Postprocess (UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target, System.String installPath, System.String companyName, System.String productName, System.Int32 width, System.Int32 height, UnityEditor.BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.Build.Reporting.BuildReport report) (at /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:353)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at /Users/bokken/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:197)
解决步骤
1. 修正系统XCode命令行工具路径
Unity会读取系统级的XCode命令行工具配置,先查看当前路径:
xcode-select -p
若输出为错误的/Users/UserName/Downloads/Xcode.app/Contents/Developer,执行以下命令修正:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
2. 检查Unity编辑器外部工具设置
打开Unity编辑器,依次进入Edit > Preferences > External Tools,在iOS/OSX板块确认XCode路径选择的是/Applications/Xcode.app。
3. 清理Unity缓存
删除项目目录下的Library/il2cpp_cache和Temp文件夹,避免缓存的旧路径干扰构建。
4. 确认XCode自身配置
打开XCode,完成首次启动的组件安装后,进入Xcode > Preferences > Locations,确认Command Line Tools选择的是当前安装的XCode 13.4.1版本。
内容的提问来源于stack exchange,提问作者Fred

