Swift Framework中public函数无法导出,Unity调用遇阻求助
排查Swift Framework导出C符号的问题
以下是需要逐一检查的关键点:
确认函数实现完整性与修饰符
你的代码片段存在语法不完整(缺少闭合的}),编译时可能产生隐性错误导致符号未生成。确保函数实现完整,且public修饰符正确作用于函数——@_cdecl必须配合public才能将符号导出到框架的公共符号表。检查Build Settings的关键配置
除Symbols Hidden by Default = NO外,还需验证:Dead Code Stripping:设为NO,避免编译器将未被内部调用的函数当作死代码剥离Strip Debug Symbols During Copy:Debug模式下设为NO;Release模式下若需保留符号,同步调整对应配置Strip Style:选择Non-Global Symbols,确保全局C符号不被误剥离
验证目标架构与编译产物
使用nm时要确保检查的是对应架构的二进制文件。若为多架构合并的.framework,需先用lipo拆分后再检查:# 查看框架包含的架构 lipo -info YourFramework.framework/YourFramework # 提取指定架构的二进制 lipo -extract arm64 YourFramework.framework/YourFramework -output YourFramework-arm64 # 检查符号 nm -gU YourFramework-arm64同时确认编译时选择的是正确目标(真机/模拟器),不同架构的产物符号表可能存在差异。
检查
@_cdecl与类型兼容性@_cdecl要求导出函数的返回值、参数类型为C兼容类型。你的返回值PKPaymentAuthorizationViewController?是Objective-C对象的可选类型,需确保框架开启Objective-C兼容性:- 确认
Defines Module设为YES - 检查
Objective-C Generated Interface Header已正常生成(可在Build Settings中查看对应路径)
- 确认
排查第三方依赖的符号干扰
你提到引入了不兼容的其他包,需检查这些包是否包含自定义编译脚本、宏定义或符号混淆逻辑,是否会修改或隐藏showPaymentForm符号。查看编译日志与符号表细节
在Xcode的Build Log中搜索showPaymentForm,查看编译过程中是否有相关警告或错误。也可使用otool工具查看框架符号表:otool -v -s __TEXT __stubs YourFramework.framework/YourFramework
内容的提问来源于stack exchange,提问作者jbassking10
相关产品推荐
相关产品推荐

