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

Swift应用调用依赖框架方法崩溃,寻求问题排查方向

排查模块化架构中自定义框架方法调用崩溃的思路

这种问题我之前在做模块化项目时也碰到过几次,虽然Xcode自动补全能识别到方法,但运行时崩溃,大概率是框架符号导出、链接配置或者实例类型不匹配导致的,给你几个具体的排查方向:

  • 检查Core框架的符号导出配置
    打开Core项目的Build Settings,搜索以下几个选项:

    • SYMBOLS_HIDDEN_BY_DEFAULT:如果这个选项设为YES,框架里的符号默认会被隐藏,即使你标记了public方法也可能无法被外部访问。建议暂时改成NO试试,或者通过EXPORTED_SYMBOLS_FILE配置文件指定需要导出的符号(比如RGButton的borderRadius(radius:)方法)。
    • DEAD_CODE_STRIPPING:如果开启了死代码剥离,Xcode可能会把它认为“未被使用”的borderRadius方法剥离掉,导致运行时找不到。可以临时关闭这个选项验证问题。
  • 确认Core框架的嵌入方式
    进入Application项目的Target设置,在General标签页的Frameworks, Libraries, and Embedded Content里,找到Core框架,确保它的Embed选项设置为Embed & Sign。如果只是Do Not Embed,框架只会在编译时被链接,但运行时找不到实际的实现文件,调用自定义方法就会崩溃。

  • 验证storyboard中按钮的实例类型
    在HomeViewController的viewDidLoad里加一行调试代码:

    print("btnLater type: \(type(of: self.btnLater))")
    

    运行后看控制台输出,如果显示的不是Core.RGButton,而是普通的UIButton或者其他类,说明storyboard加载时没有正确创建Core框架里的RGButton实例。这种情况需要在storyboard中选中btnLater,在Identity Inspector的Custom Class里,手动指定模块为Core(也就是在Class字段填写Core.RGButton,或者在Module下拉框选择Core)。

  • 清理Xcode缓存并重新构建
    Xcode的缓存有时候会导致奇怪的链接问题:

    1. 按Cmd+Shift+K清理Build Folder
    2. 前往Xcode > Settings > Locations,找到Derived Data路径,删除整个Derived Data文件夹
    3. 重启Xcode后重新构建整个项目
  • 检查RGButton类的初始化逻辑
    虽然你调用的是实例方法,但如果RGButton的自定义初始化方法有问题(比如没有正确调用super.init相关方法),可能导致创建的实例不完整。可以检查RGButton的所有初始化方法,确保遵循UIButton的初始化规范,比如:

    public override init(frame: CGRect) {
        super.init(frame: frame)
        // 自定义初始化逻辑
    }
    
    public required init?(coder: NSCoder) {
        super.init(coder: coder)
        // 自定义初始化逻辑
    }
    

内容的提问来源于stack exchange,提问作者rickrvo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:52:39