XCFramework发布CocoaPods遇pod lib lint报错:x86_64符号未定义
问题:混合Objective-C与Swift的XCFramework发布CocoaPods验证失败
我开发了一个混合Objective-C与Swift的XCFramework,依赖Objective-C及Swift第三方库,尝试发布至CocoaPods时,执行验证命令:
pod lib lint --verbose --allow-warnings --no-clean
结果失败,报错为x86_64架构下符号未定义,具体错误信息如下:
Undefined symbols for architecture x86_64: "enum case for SwiftEntryKit.EKAttributes.Position.top(SwiftEntryKit.EKAttributes.Position.Type) -> SwiftEntryKit.EKAttributes.Position", referenced from: function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheet(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheetHide(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) "enum case for SwiftEntryKit.EKAttributes.Position.bottom(SwiftEntryKit.EKAttributes.Position.Type) -> SwiftEntryKit.EKAttributes.Position", referenced from: function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheet(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheetHide(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) "enum case for SwiftEntryKit.EKAttributes.PositionConstraints.SafeArea.overridden(SwiftEntryKit.EKAttributes.PositionConstraints.SafeArea.Type) -> SwiftEntryKit.EKAttributes.PositionConstraints.SafeArea", referenced from: function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheet(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheetHide(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) "enum case for SwiftEntryKit.EKAttributes.RoundCorners.bottom(SwiftEntryKit.EKAttributes.RoundCorners.Type) -> (CoreGraphics.CGFloat) -> SwiftEntryKit.EKAttributes.RoundCorners", referenced from: function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheet(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheetHide(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) "enum case for SwiftEntryKit.EKAttributes.RoundCorners.top(SwiftEntryKit.EKAttributes.RoundCorners.Type) -> (CoreGraphics.CGFloat) -> SwiftEntryKit.EKAttributes.RoundCorners", referenced from: function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheet(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheetHide(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) "enum case for SwiftEntryKit.EKAttributes.BackgroundStyle.color(SwiftEntryKit.EKAttributes.BackgroundStyle.Type) -> (SwiftEntryKit.EKColor) -> SwiftEntryKit.EKAttributes.BackgroundStyle", referenced from: function signature specialization <Arg[1] = Dead> of static SASContractSDK.Overlay.entryAlert(__C.UIView) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheet(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheetHide(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[2] = Dead> of static SASContractSDK.Overlay.entryAlert(_: __C.UIView, dismiss: Swift.Bool) -> () in SASContractSDK(Overlay.o) "enum case for SwiftEntryKit.EKAttributes.PositionConstraints.Edge.ratio(SwiftEntryKit.EKAttributes.PositionConstraints.Edge.Type) -> (CoreGraphics.CGFloat) -> SwiftEntryKit.EKAttributes.PositionConstraints.Edge", referenced from: function signature specialization <Arg[1] = Dead> of static SASContractSDK.Overlay.entryAlert(__C.UIView) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheet(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheetHide(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[2] = Dead> of static SASContractSDK.Overlay.entryAlert(_: __C.UIView, dismiss: Swift.Bool) -> () in SASContractSDK(Overlay.o) "enum case for SwiftEntryKit.SwiftEntryKit.RollbackWindow.main(SwiftEntryKit.SwiftEntryKit.RollbackWindow.Type) -> SwiftEntryKit.SwiftEntryKit.RollbackWindow", referenced from: function signature specialization <Arg[1] = Dead> of static SASContractSDK.Overlay.entryAlert(__C.UIView) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheet(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheetHide(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[2] = Dead> of static SASContractSDK.Overlay.entryAlert(_: __C.UIView, dismiss: Swift.Bool) -> () in SASContractSDK(Overlay.o) "enum case for SwiftEntryKit.EKAttributes.Scroll.disabled(SwiftEntryKit.EKAttributes.Scroll.Type) -> SwiftEntryKit.EKAttributes.Scroll", referenced from: function signature specialization <Arg[1] = Dead> of static SASContractSDK.Overlay.entryAlert(__C.UIView) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheet(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[2] = Dead> of static SASContractSDK.Overlay.entryAlert(_: __C.UIView, dismiss: Swift.Bool) -> () in SASContractSDK(Overlay.o) "enum case for SwiftEntryKit.EKAttributes.Animation.Translate.AnchorPosition.automatic(SwiftEntryKit.EKAttributes.Animation.Translate.AnchorPosition.Type) -> SwiftEntryKit.EKAttributes.Animation.Translate.AnchorPosition", referenced from: function signature specialization <Arg[1] = Dead> of static SASContractSDK.Overlay.entryAlert(__C.UIView) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheet(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheetHide(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[2] = Dead> of static SASContractSDK.Overlay.entryAlert(_: __C.UIView, dismiss: Swift.Bool) -> () in SASContractSDK(Overlay.o) "enum case for SwiftEntryKit.EKAttributes.Position.center(SwiftEntryKit.EKAttributes.Position.Type) -> SwiftEntryKit.EKAttributes.Position", referenced from: function signature specialization <Arg[1] = Dead> of static SASContractSDK.Overlay.entryAlert(__C.UIView) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[2] = Dead> of static SASContractSDK.Overlay.entryAlert(_: __C.UIView, dismiss: Swift.Bool) -> () in SASContractSDK(Overlay.o) "enum case for SwiftEntryKit.EKAttributes.PositionConstraints.Edge.intrinsic(SwiftEntryKit.EKAttributes.PositionConstraints.Edge.Type) -> SwiftEntryKit.EKAttributes.PositionConstraints.Edge", referenced from: function signature specialization <Arg[1] = Dead> of static SASContractSDK.Overlay.entryAlert(__C.UIView) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheet(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[7] = Dead> of static SASContractSDK.Overlay.entrySheetHide(_: __C.UIView, top: Swift.Bool, offset: CoreGraphics.CGFloat, round: CoreGraphics.CGFloat, bgcolor: Swift.Int, dismiss: Swift.Bool, cancelled: (() -> ())?) -> () in SASContractSDK(Overlay.o) function signature specialization <Arg[2] = Dead> of static SASContractSDK.Overlay.entryAlert(_: __C.UIView, dismiss: Swift.Bool) -> () in SASContractSDK(Overlay.o) "enum case for SwiftEntryKit.SwiftEntryKit.EntryDismissalDescriptor.all(SwiftEntryKit.SwiftEntryKit.EntryDismissalDescriptor.Type) -> SwiftEntryKit.SwiftEntryKit.EntryDismissalDescriptor", referenced from: static SASContractSDK.Overlay.entryHide((() -> ())?) -> () in SASContractSDK(Overlay.o) @objc static SASContractSDK.Overlay.entryHide((() -> ())?) -> () in SASContractSDK(Overlay.o) ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
错误原因
- 依赖库符号未被正确链接:所有未定义的符号均来自SwiftEntryKit的枚举成员,说明CocoaPods验证时,链接器无法找到SwiftEntryKit的相关符号。要么是XCFramework未嵌入SwiftEntryKit,要么是podspec未正确声明依赖。
- XCFramework构建不完整:可能构建时未包含x86_64架构(模拟器验证需要),或者未正确合并依赖库的符号。
- 混合语言配置缺失:OC与Swift混合的框架需要在podspec中明确Swift版本、部署目标等配置,否则CocoaPods无法正确处理Swift依赖。
解决步骤
1. 修正podspec配置
在你的SASContractSDK.podspec中补充以下配置:
# 添加SwiftEntryKit依赖 s.dependency 'SwiftEntryKit' # 声明Swift版本(匹配你的项目版本) s.swift_version = '5.0' # 设置最低iOS部署目标(需与SwiftEntryKit兼容) s.ios.deployment_target = '11.0' # 如果是静态XCFramework,需添加该配置 s.static_framework = true
2. 重新构建XCFramework
- 清理之前的构建产物:执行
xcodebuild clean - 重新构建包含真机+模拟器架构的XCFramework,确保构建过程中正确链接SwiftEntryKit,且所有依赖符号被正确包含。
3. 调整验证命令
尝试添加--use-libraries参数,确保CocoaPods正确链接静态库依赖:
pod lib lint --verbose --allow-warnings --no-clean --use-libraries
如果依赖是动态库,添加--use-modular-headers参数:
pod lib lint --verbose --allow-warnings --no-clean --use-modular-headers
4. 检查XCFramework架构完整性
用以下命令检查XCFramework是否包含x86_64架构:
lipo -info SASContractSDK.xcframework/ios-x86_64-simulator/SASContractSDK.framework/SASContractSDK
如果输出不包含x86_64,需重新构建包含模拟器架构的XCFramework。
内容的提问来源于stack exchange,提问作者AdamShi
相关产品推荐
相关产品推荐

