BugfenderSDK 1.13.2

BugfenderSDK 1.13.2

测试已测试
语言语言 SwiftSwift
许可证 NOASSERTION
发布上次发布2023年10月
SPM支持 SPM

Jordi GimenezAleix Ventayol维护。



  • Bugfender 提供

Bugfender SDK for iOS Build Status Docs

Bugfender 是一个收集移动应用程序日志的云服务。开发者可以程序化地以及手动地为每台设备控制日志发送。日志可在 Bugfender 控制台 中找到。您需要一个账户。

支持的 iOS 版本

  • BugfenderSDK 1.12 可用于 iOS 11.0 及以上版本。
  • 如需要支持 iOS 10,您可以使用 BugfenderSDK 1.10.6。
  • 如需要支持 iOS 8,您可以使用 BugfenderSDK 1.8。

安装 SDK

首先,您需要将框架添加到您的项目中。

使用 CocoaPods

  1. 如果没有,创建一个 Podfile: pod init
  2. 将 Bugfender 添加到 Podfile 中
    pod 'BugfenderSDK', '~> 1.12'
    
  3. 保存文件并运行:pod install。这将为您的应用创建一个 .xcworkspace 文件。请使用此文件进行所有未来的应用开发。

使用 Swift 包管理器

  1. 在 Xcode 中,转到目标的 General 选项卡,然后单击图标添加一个新库

  2. 在弹出窗口中选择 添加其他,然后选择 添加包依赖...

  1. 将 Bugfender iOS 存储库的 GitHub URL(https://github.com/bugfender/BugfenderSDK-iOS)粘贴到文本字段,然后按 下一个

  1. 保留第一个选项,然后按 下一个

  1. Xcode 将下载 Bugfender 文件,并将显示以下菜单。确保选择 BugfenderSDK 并按完成

  1. 还需要导入《系统配置框架》、《安全性框架》、《核心服务框架》、《核心图形框架》和《libc++.tbd》。

在 Xcode12 中存在一个已知问题,即当调试物理设备时无法启动应用程序。在本文档编写时,该问题尚未在 Xcode12.3 测试版中修复。该问题不应影响发布或模拟器版本。但如果您收到《未找到代码签名》或《未找到有效的配置文件》提示,我们建议使用PSPDFKit 团队提出的解决方案

使用 Carthage

  1. 至少更新到 Carthage 0.38.0
  2. 将其添加到 Cartfile 中
    github "bugfender/BugfenderSDK-iOS" ~>1.12
    
  3. 保存文件并运行 carthage update --use-xcframeworks
  4. Carthage/Build/BugfenderSDK.xcframework 导入到您的 链接框架和库(或拖放到项目中)。
  5. 请确保选择“嵌入框架”选项(或将框架列入 input.xcfilelist 列表中)。
  6. 还需要导入《系统配置框架》、《安全性框架》、《核心服务框架》、《核心图形框架》和《libc++.tbd》。

用户手册

如果您更喜欢手动安装SDK,您可以使用提供的 xcframework,请在对应的 版本 中使用。

  1. 转到您的 项目 > 您的目标 > 通用 > 框架、库和嵌入式内容,并将 BugfenderSDK.xcframework 拖到那里。
  2. 确保选择“嵌入框架”选项。
  3. 请确保您还有 SystemConfiguration.frameworkSecurity.frameworkCoreServices.frameworkCoreGraphics.frameworklibc++.tbd

对崩溃报告进行符号化

Bugfender提供了一个可以将dSYM捆绑包上传到Bugfender的脚本。

获取脚本

如果您使用CocoaPods,从版本1.10.4开始,脚本已与Pod一起分发。

如果您使用任何其他安装方法,您可以从 此处 下载脚本,并将其复制到项目中的一部分位置。

设置Xcode以自动上传dSYM捆绑包

为此,我们需要在构建阶段创建一个新的运行脚本来执行以下步骤

  • 转到您的应用程序设置。
  • 从左侧的《目标》列表中选择您的主要目标。
  • 转到《构建阶段》标签。
  • 在加号+下打开菜单,并选择《新建运行脚本阶段》。
  • 在《运行脚本》的shell部分下添加脚本调用。
    • 如果您正在使用CocoaPods
      ${PODS_ROOT}/BugfenderSDK/upload-symbols.sh <bugfender_symbolication_token>
    • 如果您手动复制了脚本
      <path_to_the_script>/upload-symbols.sh <bugfender_symbolication_token>
  • 可以从Bugfender仪表板中获得《bugfender符号化令牌》并需要将其指定为脚本的第一个参数或将BUGFENDER_SYMBOLICATION_TOKEN环境变量。
  • 完成!

XCode Build Phases

使用Bugfender

一旦在项目中有了这个框架,使用它就像使用BFLog()代替NSLog()或使用bfprint()代替print()一样简单。

Swift

如果您的应用程序使用SwiftUI且没有AppDelegate,您可能需要创建一个,如下所示

@main
struct YourAppNameApp: App {

    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        // your Bugfender init code here

        return true
    }
}

在您的AppDelegate类中

@_exported import BugfenderSDK

并将以下内容添加到application(_:didFinishLaunchingWithOptions:)

Bugfender.activateLogger("YOUR_APP_KEY")
Bugfender.enableUIEventLogging() // optional, log user interactions automatically
Bugfender.enableCrashReporting() // optional, log crashes automatically
bfprint("Hello world!") // use bfprint() as you would use print()

然后您可以使用BFLog就像您通常使用NSLogprint一样。

您还可以使用以下辅助函数来指定日志级别

  • Bugfender.print(...):默认日志。
  • Bugfender.warning(...):警告日志。
  • Bugfender.error(...):错误日志。

Objective-C

通过将以下行添加到.pch文件来使Bugfender在项目中可用

#import <BugfenderSDK/BugfenderSDK.h>

Bugfender控制台获取API密钥。在您的AppDelegate中,在应用程序启动时调用activateLogger,如下所示

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ...
    // Activate the remote logger with an App Key.
    [Bugfender activateLogger:@"YOUR_APP_KEY"];
    [Bugfender enableUIEventLogging]; // optional, log user interactions automatically
    [Bugfender enableCrashReporting]; // optional, log crashes automatically
    BFLog("Hello world!") // use BFLog as you would use NSLog
    ...
}

然后您可以使用BFLog正如您通常使用NSLog一样。

您还可以使用以下宏来指定日志级别

  • BFLog(...):默认日志。
  • BFLogWarn(...):警告日志。
  • BFLogErr(...):错误日志。

高级功能

发送问题

Bugfender 允许您将问题发送到服务器。问题与会话类似,但它们显示在“问题”部分,并且您可以从应用中随时发送问题,即使设备在系统中未启用。问题非常有用,可以帮助您跟踪在代码中检测到的关键错误。

发送问题的函数如下:

Bugfender.sendIssueReturningUrl(withTitle: "Issue title", text: "Description of the issue")

请注意,text 在服务器上支持 Markdown 语法。您可以为文本添加一些样式。

Bugfender.sendIssueReturningUrl(withTitle: "App Error", text: "We have found an **Error**, we need to check it")

发送问题返回指向 Bugfender 控制面板中问题的 URL。您可以使用该 URL 来创建自动化。

让您的应用决定何时发送日志

在某些特殊情况下,您可能希望在 Bugfender 控制台中设备启用状态为未启用时发送日志,例如在自定义异常处理程序中。使用 forceSendOnce 强制发送日志一次,使用 setForceEnabled: 强制它在一段时间内发送。

设备关联数据

您可以将信息关联到设备,就像字典一样。

Bugfender.setDeviceString("value", forKey: "key")

更多信息请参考我们的博客文章关联设备信息

日志缓冲区大小

Bugfender 在设备中保留最多 5 MB 的日志数据。这样 Bugfender 可以离线工作,您可以在启用设备时获取一些过去的日志数据。您可以使用 setMaximumLocalStorageSize 修改此限制。

// Setting maximum cache size to 1 Mb
Bugfender.setMaximumLocalStorageSize(1024*1024)

获取设备链接

有时您想将 Bugfender 与第三方工具集成。为此,SDK 提供了一个方法,返回当前设备的 URL。您可以将它发送到第三方工具,并从其他工具轻松导航回设备的日志。

Bugfender.deviceIdentifierUrl();

获取会话链接

有时您想将 Bugfender 与第三方工具集成。为此,SDK 提供了一个方法,返回会话的 URL。您可以将它发送到第三方工具,以从其他工具轻松导航到当前会话的日志。

Bugfender.sessionIdentifierUrl();

收集用户反馈

从最终用户那里获取反馈是应用开发者最重要的任务之一。良好的用户反馈可以帮助您检测应用中的错误,并帮助您更好地了解您的产品。

从版本1.6开始,Bugfender提供了一项新功能,可以轻松收集最终用户的反馈。集成过程仅需两分钟和几行代码。您可以认为用户反馈是问题的一种特殊类型,每当您的用户提交反馈时,您就会在Bugfender中收到一个新的问题。

实现Bugfender用户反馈的最简单方法是使用可定制的用户反馈视图控制器。它提供了一个方便的视图控制器,包含两个文本字段,一个用于主题,另一个用于反馈,更大。两个文本字段都会自动增长。

使用默认UI

使用Bugfender提供的便捷UI,只需创建一个新的视图控制器并将其以模态方式呈现。您只需要调用以下方法,并使用您的UI的标题和占位符来完成所需的参数。

// Instantiate new User Feedback

let nvc = Bugfender.userFeedbackViewController(withTitle: "Navigation bar title",
                                               hint: "Give some instructions to your users",
                                               subjectPlaceholder: "Placeholder for subject textfield",
                                               messagePlaceholder: "Placeholder for message textfield",
                                               sendButtonTitle: "Send",
                                               cancelButtonTitle: "Cancel") { (feedbackSent, url) in
    if (feedbackSent) {
        // Say thanks!
        // url is a direct link to the dashboard
        // Use it to create automations or send it to your server
    } else {
        // User decided to not send feedback
    }
}

// Present modally
self.present(nvc, animated: true, completion: nil)

此外,如果需要更多自定义,您可以在呈现之前配置视图控制器。

请注意,BFUserFeedbackNavigationController是导航控制器的子类。您需要通过公开属性feedbackViewController来访问视图控制器。

// Access the root view controller.
let feedbackViewController: BFUserFeedbackViewController = nvc.feedbackViewController

// Change the background colors
feedbackViewController.mainBackgroundColor = UIColor.lightGray
feedbackViewController.secondaryBackgroundColor = UIColor.white

// Change the font of the hint text
feedbackViewController.hintFont = UIFont(name: "Avenir", size: 14)!

有关可自定义属性的完整列表,您可以检查"BFUserFeedbackViewController.h"或阅读文档

使用自定义UI

如果您需要比BFUserFeedbackViewController提供的更多自定义,您可以自己实现UI。您需要做到的是以您希望的方式收集用户反馈,并使用sendUserFeedback将其发送到Bugfender。

let feedbackUrl = Bugfender.sendUserFeedbackReturningUrl(withSubject: "Title of the feedback", message: "message of the feedback")

返回的URL是Bugfender仪表板的直接链接。您可以使用它来创建自动化或将其保留在您的服务器上。

从1.8之前的BugfenderSDK更新以及仅为ObjC项目的更新

现在BugfenderSDK是一个动态框架,您需要手动将其添加到项目时选中“嵌入框架”选项,或使用Carthage。
此外,不再需要 Bugfender.swift 辅助类,可以安全地删除它。但必须确保你的项目中可以使用 Swift。如果你是手动安装 Bugfender 或使用 Carthage,请确保在 构建设置 -> 始终嵌入 Swift 标准库中设置为