【问题标题】:How to debug across Swift Modules?如何跨 Swift 模块进行调试?
【发布时间】:2020-03-30 04:06:05
【问题描述】:

如何使用断点继续跨 Swift 模块进行调试?

Swift 项目中工作时,我有一个大型应用程序,我想将其重构为两个项目 (modules),以获得更好的模块化、可修改性和可维护性。但是,我担心debuggability 的方式。当代码在单个项目中时,开发人员可以使用断点进行调试,直到根本原因所在的行,但是在重构为两个单独的项目之后,如果入口断点在一个项目中开始并在另一个项目中结束,开发人员如何调试?有没有办法继续跨项目进行调试和发布?或者这是模块化应用程序的常见问题?

例如,假设我已将名为 MyApp 的单个应用程序分成以下两个模块,

  1. App - 托管主项目
  2. Feature - 框架项目

模块:App,类:AppInterfaceLayer

import Foundation
import Feature

class AppInterfaceLayer {

    public func printMe(printString: String){
        FrameworkServiceLayer().printMe(printString: printString) // entry point of debugging
    }
}

模块:功能,类:FrameworkServiceLayer

import Foundation

public class FrameworkServiceLayer {

    public init(){}
    public func printMe(printString: String) {
        // an error is produced here
    }
}

如何处理这个问题?


注意:我试图用上面的代码展示一个最小的可行示例。在实际项目中,沟通会过于纠结。

【问题讨论】:

    标签: ios swift debugging module architecture


    【解决方案1】:

    只要您将 Xcode 项目或多个项目导入工作区,断点将继续按预期工作。例如 Cocoapods 就是这样工作的。

    如果您打算使用二进制框架,那就不用那么多了,但对您来说似乎并非如此。

    【讨论】:

    • 默认情况下是否还会包含 Fabric 中崩溃的未符号化堆栈跟踪?
    • 如果您正在处理 swift 包,即使它是本地包,这也不起作用。当单步执行代码时,它只是跳过包的代码。
    猜你喜欢
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多