Unity iOS项目Xcode编译链接错误:未定义StoreKit相关符号
Unity iOS构建时出现链接错误
构建过程中触发以下链接错误:
ld: Undefined symbols: static StoreKit.Transaction.Offer.PaymentMode.freeTrial.getter : StoreKit.Transaction.Offer.PaymentMode, referenced from: static (extension in FirebaseAnalytics):__C.FIRAnalytics.logTransaction(StoreKit.Transaction) -> () in FirebaseAnalytics17 type metadata accessor for StoreKit.Transaction.Offer.PaymentMode, referenced from: static (extension in FirebaseAnalytics):__C.FIRAnalytics.logTransaction(StoreKit.Transaction) -> () in FirebaseAnalytics17 static (extension in FirebaseAnalytics):__C.FIRAnalytics.logTransaction(StoreKit.Transaction) -> () in FirebaseAnalytics17 static (extension in FirebaseAnalytics):__C.FIRAnalytics.logTransaction(StoreKit.Transaction) -> () in FirebaseAnalytics17 nominal type descriptor for StoreKit.Transaction.Offer.PaymentMode, referenced from: _symbolic _____Sg 8StoreKit11TransactionV5OfferV11PaymentModeV in FirebaseAnalytics17 _symbolic _____Sg_ABt 8StoreKit11TransactionV5OfferV11PaymentModeV in FirebaseAnalytics17 protocol conformance descriptor for StoreKit.Transaction.Offer.PaymentMode : Swift.Equatable in StoreKit, referenced from: static (extension in FirebaseAnalytics):__C.FIRAnalytics.logTransaction(StoreKit.Transaction) -> () in FirebaseAnalytics17 StoreKit.Transaction.Offer.paymentMode.getter : StoreKit.Transaction.Offer.PaymentMode?, referenced from: static (extension in FirebaseAnalytics):__C.FIRAnalytics.logTransaction(StoreKit.Transaction) -> () in FirebaseAnalytics17 StoreKit.Transaction.Offer.type.getter : StoreKit.Transaction.OfferType, referenced from: static (extension in FirebaseAnalytics):__C.FIRAnalytics.logTransaction(StoreKit.Transaction) -> () in FirebaseAnalytics17 type metadata accessor for StoreKit.Transaction.Offer, referenced from: static (extension in FirebaseAnalytics):__C.FIRAnalytics.logTransaction(StoreKit.Transaction) -> () in FirebaseAnalytics17 nominal type descriptor for StoreKit.Transaction.Offer, referenced from: _symbolic _____Sg 8StoreKit11TransactionV5OfferV in FirebaseAnalytics17 StoreKit.Transaction.offer.getter : StoreKit.Transaction.Offer?, referenced from: static (extension in FirebaseAnalytics):__C.FIRAnalytics.logTransaction(StoreKit.Transaction) -> () in FirebaseAnalytics17 static (extension in FirebaseAnalytics):__C.FIRAnalytics.logTransaction(StoreKit.Transaction) -> () in FirebaseAnalytics17 clang: error: linker command failed with exit code 1 (use -v to see invocation)
已尝试但无效的操作
- 将StoreKit.framework添加至UnityFramework
- 重新安装、更新、移除CocoaPods仓库
- 清理构建文件并重新构建Unity项目
- 在Build Settings中使用
$(inherited) - 完全移除Podfile后重新安装
- 清理缓存
针对性解决方法
1. 提升iOS目标版本
错误中引用的StoreKit.Transaction是iOS 15+引入的StoreKit 2 API,若项目Deployment Target低于iOS 15,链接器会无法找到这些符号:
- 在Unity的
Player Settings > iOS > Other Settings中,将Minimum iOS Version设置为15.0或更高 - 导出Xcode项目后,确认主目标和UnityFramework目标的
Deployment Target同步为15.0+
2. 调整Firebase Analytics版本
部分新版本Firebase Analytics默认依赖StoreKit 2,若项目暂不支持iOS 15,可降级到兼容StoreKit 1的版本:
- 修改Unity项目中的Podfile(或通过Firebase Unity SDK配置),指定Firebase Analytics版本为
~> 9.6.0(该版本不强制依赖StoreKit 2) - 执行
pod install --repo-update重新安装依赖
3. 启用Unity iOS的Swift支持
由于StoreKit.Transaction是Swift专属API,Unity导出时需开启Swift支持:
- 在Unity的
Player Settings > iOS > Other Settings中,将Scripting Backend设置为IL2CPP - 勾选
Enable Swift Support,并确保Swift Version设置为5.0+ - 导出Xcode项目后,检查主目标的
Build Settings > Swift Compiler - General中是否正确配置Swift版本
4. 检查Xcode链接配置
- 打开Xcode项目,进入UnityFramework目标的
Build Phases > Link Binary With Libraries,确认StoreKit.framework已添加且状态为Required - 若仍报错,尝试在
Build Settings > Other Linker Flags中添加-framework StoreKit
内容的提问来源于stack exchange,提问作者Nan Taty
相关产品推荐
相关产品推荐

