如何将Crashlytics集成到iOS框架目标中?

10

我有一个iOS框架目标,我需要为它集成Crash报告系统。

那么,Crashlytics看起来不错,但是

这个Xcode项目没有任何Mac或iOS目标

所以,有没有办法直接将Crashlytics集成到iOS框架中?


2
来自 Fabric 的 Mike。如果您计划将此框架分发给第三方,请勿在其中包含 Fabric 或 Crashlytics。 - Mike Bonnell
你能解释一下为什么吗? - Garnett
10
当然,我们的SDK只支持初始化一次。在框架和应用程序中初始化会导致冲突。您和应用程序开发人员将拥有不同的API密钥,并且无法要求应用程序开发人员允许您的SDK与您的框架共享其代码中的堆栈跟踪。将我们包含在您的框架中将会为您的框架和任何使用它的人造成问题,因此我建议不要包含我们!我完全理解SDK开发者想要看到这种支持的心情。 - Mike Bonnell
1
我知道这已经过去几个月了,但我有一个类似的问题,并希望找到解决方案。我们为应用程序的不同部分开发了自己的框架。数据库、可重用UI和常用工具。我们可以从其中任何一个使用Crashlytics吗?我们该如何做到这一点? - Mike
1
@MikeBonnell:从你的评论中可以得出结论,SDK 不应该报告崩溃。我们如何在框架目标中处理崩溃报告? - Himan Dhawan
显示剩余4条评论
3个回答

8

感谢Mike Bonnell这里的评论,他说:

确实,我们的SDK只支持初始化一次。在框架和应用程序中进行初始化会导致冲突。您和应用程序开发人员将拥有不同的API密钥,并且无法要求应用程序开发人员允许您的SDK与您的框架共享其代码中的堆栈跟踪。将我们包含在您的框架中将会对您的框架及任何使用它的人造成问题,所以我建议不要包含我们!完全理解SDK开发人员希望看到此功能得到支持。


1
这里有一个解决方案,可以让您的库用户利用Crashlytics进行日志记录。
您的库可以提供一个默认的日志函数,调用NSLog或Print或任何您想要的机制。但是,您的库还可以提供一种覆盖所使用打印方法的机制。
例如,假设您在库中定义了一个Logger类:
public class Logger {
  private static var printer: (message: String) -> Void = nil
  public static func setPrinter(newPrinter: (message: String) -> Void) {
    Logger.printer = newPrinter
  }

  debug(format: String, ...) {
      // convert params into a single formatted:String, then ...
      if(Logger.printer != nil) {
          Logger.printer(message: formatted)
      } else {
          print(formatted)
          // or
          NSLog(formatted)
      }
  }
}

现在,当人们使用你的库时,他们将得到你实现的默认打印。但是,如果他们有自己的日志记录解决方案,比如Crashlytics,他们可以这样覆盖它:
// in their App code
Logger.setPrinter((message:String) -> Void {
  CLSNSLog(message)
});

-1

请按照链接中提供的步骤集成Crashlytics。

Fabric Integration

最强大、最轻量级的崩溃报告解决方案。 花费更少的时间查找和修复崩溃。Crashlytics被评为iOS和Android上最佳性能SDK,提供深入而有针对性的见解,甚至可以精确到应用程序崩溃的代码行。

虽然Crashlytics为您提供了强大的崩溃报告功能,但只需单击一下即可启用实时分析,帮助您了解应用程序中正在发生的情况。Fabric的分析引擎提供有关您的核心目标(如增长、保留和参与度)的见解。最终,这是您不需要分析的分析。

希望这有所帮助。


1
这是将Fabric集成到iOS应用程序中的手动方式,但在我的情况下,我有框架目标,这种方法不起作用。 - Garnett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接