升级Facebook Unity SDK至13.2.0后出现NiceVibrations相关Xcode解析错误
核心原因
Facebook Unity SDK 13.2.0版本的FBUnitySDKDelegate.h会主动引用UnityFramework-Swift.h,而NiceVibrations插件生成的HapticCallback类型仅在Swift代码中定义,未添加Objective-C兼容标记,导致Objective-C编写的FB SDK代码无法识别该类型,触发"Expected a type"编译错误。旧版11.0 SDK未触发这个引用链,因此无此问题。
可行解决方案
方案1:让HapticCallback兼容Objective-C
找到NiceVibrations插件中定义HapticCallback的Swift文件,给这个类型添加@objc修饰符:@objc typealias HapticCallback = () -> Void若
HapticCallback是协议类型,同样需要添加@objc:@objc protocol HapticCallback { // 协议方法 }重新导出Xcode工程后,
UnityFramework-Swift.h会生成Objective-C可识别的类型声明,FB代码即可正常编译。方案2:调整头文件引用逻辑
打开FBUnityInterface.mm,确保UnityFramework-Swift.h在FBUnitySDKDelegate.h之前被导入;或者修改FBUnitySDKDelegate.h,用前向声明替代直接导入Swift头文件:@class HapticCallback;然后在
FBUnitySDKDelegate.mm(如果存在)中再导入UnityFramework-Swift.h,避免编译阶段提前解析未定义的类型。方案3:临时应急修改(不推荐长期使用)
若赶项目进度,可在导出Xcode工程后,手动修改UnityFramework-Swift.h中的报错代码,将HapticCallback替换为Objective-C原生的块类型:+ (void)RegisterHapticEngineFinishedCallbackWithCallback:(void(^ _Nonnull)(void))callback; + (void)RegisterHapticEngineResetCallbackWithCallback:(void(^ _Nonnull)(void))callback; + (void)RegisterHapticEngineErrorCallbackWithCallback:(void(^ _Nonnull)(void))callback;注意:每次重新导出Xcode工程都需要重复此操作,仅适合临时解决问题。
内容的提问来源于stack exchange,提问作者threedollarbill

