Bugfender 是一种云服务,用于收集移动应用程序日志。开发人员可以对每个设备以编程方式和手动控制日志发送。日志可在 Bugfender 仪表板上查看。您需要一个帐户。
支持的 iOS 版本
首先,您需要将框架添加到您的项目中。
将 Bugfender iOS 仓库的 GitHub URL https://github.com/bugfender/BugfenderSDK-iOS
粘贴到文本字段中,然后单击 Next
Xcode 将下载 Bugfender 文件,然后您将看到以下菜单。确保已选择 BugfenderSDK,然后单击 Finish
同时导入 SystemConfiguration.framework
、Security.framework
、CoreServices.framework
、CoreGraphics.framework
和 libc++.tbd
。
pod init
pod 'BugfenderSDK', '~> 2.0'
pod install
。这将为您的应用创建一个 .xcworkspace
文件。在您的应用程序的所有未来开发中使用此文件。注意:我们建议使用 SwiftPM 而不是 CocoaPods,因为 CocoaPods 处于维护模式。
github "bugfender/BugfenderSDK-iOS" ~>2.0
carthage update --use-xcframeworks
Carthage/Build/BugfenderSDK.xcframework
导入到您的 Linked Frameworks and Libraries
(或将文件拖放到您的项目中)。input.xcfilelist
中列出该框架)。SystemConfiguration.framework
、Security.framework
、CoreServices.framework
、CoreGraphics.framework
和 libc++.tbd
。注意:我们建议使用 SwiftPM 而不是 Carthage。
如果您更喜欢手动安装 SDK,可以使用相应版本中提供的 xcframework。
BugfenderSDK.xcframework
拖到那里。SystemConfiguration.framework
、Security.framework
、CoreServices.framework
、CoreGraphics.framework
和 libc++.tbd
。一旦您在项目中拥有了该框架,使用它就像使用 BFLog()
而不是 NSLog()
或 bfprint()
而不是 print()
一样简单。
如果您的应用程序使用 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.enableNSLogLogging() // optional, capture logs printed to console automatically
Bugfender.enableUIEventLogging() // optional, log user interactions automatically
Bugfender.enableCrashReporting() // optional, log crashes automatically
bfprint("Hello world!") // use bfprint() as you would use print()
然后,您可以像通常使用 NSLog
或 print
一样使用 BFLog
。
您可能还想通过使用以下辅助函数来指定日志级别
Bugfender.print(...)
:默认日志。Bugfender.warning(...)
:警告日志。Bugfender.error(...)
:错误日志。通过将以下行添加到 .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 enableNSLogLogging]; // optional, capture logs printed to console automatically
[Bugfender enableUIEventLogging]; // optional, log user interactions automatically
[Bugfender enableCrashReporting]; // optional, log crashes automatically
BFLog("Hello world!") // use BFLog as you would use NSLog
...
}
您可以像通常使用 NSLog
一样使用 BFLog
。
您可能还想通过使用以下宏来指定日志级别
BFLogFatal(...)
:致命日志。BFLogErr(...)
:错误日志。BFLogWarn(...)
:警告日志。BFLogInfo(...)
:信息日志。BFLog(...)
:默认(调试)日志。BFLogTrace(...)
:跟踪日志。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 用户反馈的最简单方法是使用可自定义的用户反馈视图控制器。它提供了一个方便的视图控制器,其中包含两个文本字段,一个简短的用于主题,另一个较大的用于反馈。两个文本字段都会自动增长。
使用 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”或阅读文档。
这是一个在 SwiftUI 中使用 BFUserFeedbackNavigationController
的示例
struct SwiftUIView: View {
@State private var showFeedbackScreen = false
var body: some View {
VStack {
Text("Hello World!")
Button("Show Feedback screen") {
showFeedbackScreen = true
}
}.sheet(isPresented: $showFeedbackScreen) {
FeedbackView() { sent, feedbackUrl in
if sent == true,
let url = feedbackUrl{
BFLog("Sent feedback to URL: \(url.absoluteString)")
} else {
BFLog("User rejected to send feedback")
}
}
}.navigationBarTitle(Text("Swift UI Test"))
}
}
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}
}
struct FeedbackView: UIViewControllerRepresentable {
typealias UIViewControllerType = BFUserFeedbackNavigationController
let completion: (_ feedbackSent: Bool, _ feedbackUrl: URL?) -> Void
func makeUIViewController(context: Context) -> BFUserFeedbackNavigationController {
BFUserFeedbackNavigationController.userFeedbackViewController(
withTitle: "This title",
hint: "This hint",
subjectPlaceholder: "This subject",
messagePlaceholder: "This message",
sendButtonTitle: "Send",
cancelButtonTitle: "Cancel") { sent, feedbackUrl in
completion(sent, feedbackUrl)
}
}
func updateUIViewController(_ uiViewController: BFUserFeedbackNavigationController, context: Context) {}
}
如果您需要比 BFUserFeedbackViewController 提供的更多自定义,您可以实现自己的 UI。您所要做的就是收集您希望的用户反馈,并使用 sendUserFeedback
将其发送给 Bugfender
let feedbackUrl = Bugfender.sendUserFeedbackReturningUrl(withSubject: "Title of the feedback", message: "message of the feedback")
返回的 URL 是指向 Bugfender 仪表板的直接链接。使用它来创建自动化或在您的服务器中保留引用。
BugfenderSDK 现在是一个动态框架,您需要在手动或使用 Carthage 将其添加到您的项目时选中“embed framework”选项。
此外,不再需要 Bugfender.swift 辅助类,可以安全地删除它,但是,Swift 必须在您的项目中可用。如果您手动安装 Bugfender 或使用 Carthage,请确保Build Settings -> Always Embed Swift Standard Libraries设置为YES。
Bugfender 提供了一个脚本,用于将 dSYM 包上传到 Bugfender。
如果您使用的是 Cocoapods 或 Swift Package Manager,则会分发该脚本。
如果您使用的是任何其他安装方法,您可以下载脚本并将其复制到项目中的某个位置。
使用以下说明来配置您的项目。