Unity 2022.3.15.f1构建iOS 17 Vuforia项目失败求助
问题场景
使用Unity 2022.3.15.f1为iOS17(Xcode15.1)构建简单Vuforia测试项目时,每次运行都会触发框架加载错误,排查确认Unity将VuforiaEngine.framework放置在了错误路径。
错误信息(原文)
Error loading /var/containers/Bundle/Application/15175FA5-6EE1-4AD2-8618-1B0CF1A76AE1/Vuforia-01.app/Frameworks/UnityFramework.framework/UnityFramework (137): dlopen(/var/containers/Bundle/Application/15175FA5-6EE1-4AD2-8618-1B0CF1A76AE1/Vuforia-01.app/Frameworks/UnityFramework.framework/UnityFramework, 0x0109): Library not loaded: @rpath/VuforiaEngine.framework/VuforiaEngine
Referenced from: /private/var/containers/Bundle/Application/15175FA5-6EE1-4AD2-8618-1B0CF1A76AE1/Vuforia-01.app/Frameworks/UnityFramework.framework/UnityFramework
Reason: tried: '/usr/lib/swift/VuforiaEngine.framework/VuforiaEngine' (no such file, not in dyld cache), '/private/preboot/Cryptexes/OS/usr/lib/swift/VuforiaEngine.framework/VuforiaEngine' (no such file), '/private/var/containers/Bundle/Application/15175FA5-6EE1-4AD2-8618-1B0CF1A76AE1/Vuforia-01.app/Frameworks/VuforiaEngine.framework/VuforiaEngine' (no such file), '/usr/lib/swift/VuforiaEngine.framework/VuforiaEngine' (no such file, not in dyld cache), '/private/preboot/Cryptexes/OS/usr/lib/swift/VuforiaEngine.framework/VuforiaEngine' (no such file), '/private/var/containers/Bundle/Application/15175FA5-6EE1-4AD2-8618-1B0CF1A76AE1/Vuforia-01.app/Frameworks/VuforiaEngine.framework/VuforiaEngine' (no such file), '/private/var/containers/Bundle/Application/15175FA5-6EE1-4AD2-8618-1B0CF1A76AE1/Vuforia-01.app/Frameworks/VuforiaEngine.framework/VuforiaEngine' (no such file)
错误信息(翻译)
加载 /var/containers/Bundle/Application/15175FA5-6EE1-4AD2-8618-1B0CF1A76AE1/Vuforia-01.app/Frameworks/UnityFramework.framework/UnityFramework 时出错 (137): dlopen(/var/containers/Bundle/Application/15175FA5-6EE1-4AD2-8618-1B0CF1A76AE1/Vuforia-01.app/Frameworks/UnityFramework.framework/UnityFramework, 0x0109): 库未加载: @rpath/VuforiaEngine.framework/VuforiaEngine
引用自: /private/var/containers/Bundle/Application/15175FA5-6EE1-4AD2-8618-1B0CF1A76AE1/Vuforia-01.app/Frameworks/UnityFramework.framework/UnityFramework
原因: 尝试路径: '/usr/lib/swift/VuforiaEngine.framework/VuforiaEngine' (文件不存在,不在dyld缓存中), '/private/preboot/Cryptexes/OS/usr/lib/swift/VuforiaEngine.framework/VuforiaEngine' (文件不存在), '/private/var/containers/Bundle/Application/15175FA5-6EE1-4AD2-8618-1B0CF1A76AE1/Vuforia-01.app/Frameworks/VuforiaEngine.framework/VuforiaEngine' (文件不存在), '/usr/lib/swift/VuforiaEngine.framework/VuforiaEngine' (文件不存在,不在dyld缓存中), '/private/preboot/Cryptexes/OS/usr/lib/swift/VuforiaEngine.framework/VuforiaEngine' (文件不存在), '/private/var/containers/Bundle/Application/15175FA5-6EE1-4AD2-8618-1B0CF1A76AE1/Vuforia-01.app/Frameworks/VuforiaEngine.framework/VuforiaEngine' (文件不存在), '/private/var/containers/Bundle/Application/15175FA5-6EE1-4AD2-8618-1B0CF1A76AE1/Vuforia-01.app/Frameworks/VuforiaEngine.framework/VuforiaEngine' (文件不存在)
解决步骤
1. 修正Unity端框架配置
- 打开Unity项目,进入
Edit > Project Settings > Player > iOS标签页 - 找到
Other Settings下的Frameworks, Libraries, and Embedded Content,确认VuforiaEngine.framework的状态为Embed & Sign - 若没有该条目,重新导入Vuforia包,确保勾选iOS平台的框架支持
2. 手动调整Xcode项目框架路径
Unity完成构建后,打开生成的Xcode项目:
- 在项目导航栏的
Frameworks目录下,确认VuforiaEngine.framework存在;若缺失,从Unity项目的Library/PackageCache/com.ptc.vuforia.engine@[对应版本号]/iOS目录复制该框架到Xcode的Frameworks目录中 - 选中
UnityFrameworktarget,进入Build Phases标签:- 检查
Link Binary With Libraries中是否包含VuforiaEngine.framework,无则点击+添加 - 检查
Copy Files阶段,确保VuforiaEngine.framework被添加,目标路径选择Frameworks,并勾选Code Sign On Copy
- 检查
- 选中主App target,重复上述
Link Binary和Copy Files的检查与配置
3. 配置Runpath搜索路径
在Xcode中,分别针对UnityFramework和主App target:
- 进入
Build Settings标签,搜索Runpath Search Paths - 添加
@executable_path/Frameworks和@loader_path/Frameworks两个路径,确保路径生效
4. 清理后重新构建
- 在Unity中执行
File > Build Settings > iOS > Clean - 删除Xcode项目的
DerivedData目录(可通过Xcode的File > Project Settings查看路径) - 从Unity重新构建Xcode项目,在Xcode中执行
Product > Clean Build Folder,再编译运行
内容的提问来源于stack exchange,提问作者jumpwire

