You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:10:31