You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity iOS构建文件/文件夹缺失,嵌入Swift/Xcode项目遇阻

问题解决:Unity iOS构建Assets路径异常及NativeCallProxy缺失问题

核心问题确认

  • Unity编辑器内项目运行正常,Win/Mac/Linux跨平台构建无问题,但iOS构建后存在两个关键异常:
    • Assets文件夹位置不符合预期,导致嵌入Swift项目时无法识别资源,Unity窗口不显示
    • 缺失NativeCallProxy文件,无法推进Swift与Unity的交互开发
    • 单独运行iOS构建的.xcodeproj能加载场景,说明资源未丢失,仅路径或构建配置异常

排查与修复步骤

1. 调整Unity iOS构建导出设置

  • 打开Unity Player Settings → 切换到iOS标签:
    • 确认Architecture设置为ARM64,匹配Xcode当前iOS目标架构
    • 开启Build Options中的Export Project,避免直接用Build and Run(自动构建可能篡改路径导致异常)
    • 检查Other Settings → Configuration,将Scripting Backend设为IL2CPP(Swift交互优先选择IL2CPP,规避Mono兼容性问题)
    • 确认Scenes In Build列表中已添加你的高尔夫球杆场景,不要仅依赖编辑器默认场景

2. 修正Assets文件夹路径配置

  • 导出iOS项目后,在Xcode中操作:
    • 右键项目根目录 → Add Files to "YourProject"
    • 找到Unity导出包中的Assets文件夹,勾选Copy items if needed,并选择Create groups(不要选Create folder references,否则Xcode无法识别Unity资源)
    • 检查Build Phases → Copy Bundle Resources,确保Assets文件夹已被添加

3. 手动生成/添加NativeCallProxy文件

  • 先在Unity中配置符号:打开Player Settings → iOS → Other Settings → Scripting Define Symbols,添加UNITY_IOS和ENABLE_NATIVE_CALL_PROXY,重新导出iOS项目,此时NativeCallProxy.h和NativeCallProxy.mm应生成在Unity-iPhone/Classes目录下
  • 若仍未生成,手动创建两个文件并添加到Xcode项目:
    • NativeCallProxy.h:
      #import <Foundation/Foundation.h>
      @interface NativeCallProxy : NSObject
      + (void)sendMessageToUnity:(NSString*)message;
      @end
      
    • NativeCallProxy.mm:
      #import "NativeCallProxy.h"
      #include "UnityInterface.h"
      @implementation NativeCallProxy
      + (void)sendMessageToUnity:(NSString*)message {
          UnitySendMessage("GameManager", "ReceiveMessage", [message UTF8String]);
      }
      @end
      
    • 将文件添加到Xcode项目的Classes组,确保Build Phases → Compile Sources中包含这两个文件

4. 正确嵌入Swift项目的步骤

  • 不要直接复制Unity Assets到Swift项目,而是将Unity导出的Xcode项目作为子项目嵌入:
    1. 在Swift项目中,右键Project Navigator → Add Files to "YourSwiftProject"
    2. 选择Unity导出的Unity-iPhone.xcodeproj,勾选Copy items if needed
    3. 在Swift项目的Build Phases → Target Dependencies中添加Unity-iPhone
    4. 在Build Phases → Embed Frameworks中添加UnityFramework.framework
    5. Swift代码中初始化Unity的示例:
    import UnityFramework
    
    class UnityManager: NSObject {
        static let shared = UnityManager()
        private var unityFramework: UnityFramework?
    
        func startUnity() {
            unityFramework = UnityFramework.shared()
            if let framework = unityFramework {
                framework.setDataBundleId("com.yourcompany.unityproject")
                framework.runEmbedded(withArgc: CommandLine.argc, argv: CommandLine.unsafeArgv, appLaunchOpts: nil)
            }
        }
    }
    

5. 清理重建操作

  • 清空Unity的Library文件夹,重启Unity后重新构建
  • 在Xcode中执行Product → Clean Build Folder,再重新编译

内容的提问来源于stack exchange,提问作者zeldro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:27:23