Unity添加Apple.GameKit插件后XCode构建失败:未定义符号
问题场景
配置Apple官方GameKit插件后,Unity导出Xcode项目构建时出现链接错误,提示arm64架构下符号缺失,具体错误信息如下:
_GKTurnBasedMatch_GKTurnBasedMatch_SetMatchEndedCallback_m910C3F81D2AC3130B65F3F62FC964A7AB1BB4BB4 in Apple.GameKit.o _GKTurnBasedMatch__cctor_m700F9804CBB4DB33EDE51763CB6CE3D5DCA9005C in Apple.GameKit.o (maybe you meant: _GKTurnBasedMatch_GKTurnBasedMatch_SetMatchEndedCallback_m910C3F81D2AC3130B65F3F62FC964A7AB1BB4BB4) "_NSArray_Free", referenced from: _NSArray_NSArray_Free_mC93688296693996DD20C704745DBDB169462AA95 in Apple.Core.o _NSArray_OnDispose_m3D3F7A2BCD4038EB98125421A35CA23FCA9FF395 in Apple.Core.o (maybe you meant: _NSArray_NSArray_Free_mC93688296693996DD20C704745DBDB169462AA95) "_GKLeaderboard_SubmitScore", referenced from: _GKLeaderboard_GKLeaderboard_SubmitScore_m2B37BEF38FD1A631ED4A06A894B7360A9ECDFF47 in Apple.GameKit.o _GKLeaderboard_SubmitScore_m857EAFCB86A50F186998E8A78A22778F4AE961BD in Apple.GameKit.o (maybe you meant: GKLeaderboard_GKLeaderboard_SubmitScore_m2B37BEF38FD1A631ED4A06A894B7360A9ECDFF47, GKLeaderboard_SubmitScore_m857EAFCB86A50F186998E8A78A22778F4AE961BD ) ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation) Showing Recent Messages Undefined symbol: _NSArray_GetGKTurnBasedExchangeReplyAt Showing Recent Messages Undefined symbol: _NSArray_GetGKLeaderboardEntryAt Showing Recent Messages Undefined symbol: _NSArray_GetGKLeaderboardAt
已尝试无效操作:
- 重新安装Apple.Core和Apple.GameKit插件
- 重新安装pod
- 将Xcode更新至14.1版本
可能的解决步骤
检查Unity架构配置
打开UnityPlayer Settings→iOS→Other Settings,确保Architecture设为ARM64(不要选Universal);若开启了Strip Engine Code,需在Linker Target中添加GameKit相关符号,避免代码剥离丢失符号。验证Xcode框架依赖
打开导出的Xcode项目,进入Build Phases→Link Binary With Libraries,确认已添加GameKit.framework和Core.framework,并将其Status设为Required。清理缓存
Unity端执行Assets→Clear Cache,删除项目根目录Library文件夹后重新生成Xcode项目;Xcode端执行Product→Clean Build Folder,删除DerivedData文件夹后重新构建。核对插件版本兼容性
确认插件版本与当前Unity版本匹配,尝试切换到官方仓库的稳定版插件。调整Xcode编译设置
在Xcode项目Build Settings中,给Other Linker Flags添加-ObjC和-all_load;将Valid Architectures仅保留arm64。重新同步Pod依赖
打开Xcode项目的Podfile,确认插件的Pod依赖声明正确,执行pod install --repo-update后再构建。
内容的提问来源于stack exchange,提问作者v1rus

