跳到主要内容
版本:3.7.0

Native

SDK集成指南

Cocoapods集成

  • 在工程Podfile文件中添加

    pod 'BonreeSDK'
  • Podfile文件所在路径执行pod install

手动集成

  • 解压BonreeSDK_TDEM_iOS.tar.gz,解压后可以看到XCFrameworkDynamicXCFrameworkStatic两个目录,XCFrameworkDynamic目录下为动态库,XCFrameworkStatic目录下为静态库。根据您的需求,选择其中一种进行集成即可。

  • BonreeCore.xcframeworkBonreeBusiness.xcframeworkBonreeRUM.xcframework加入到项目中,如图所示:

Add_Com

BonreeCore.xcframeworkBonreeBusiness.xcframework若已集成过,则无需重复添加.

  • BuildPhass -> Link Binary With Libraries中添加BonreeCore.xcframeworkBonreeBusiness.xcframeworkBonreeRUM.xcframework

  • 添加以下依赖库:

    • libresolv.tbd(必须引入
    • libc++.tbd(必须引入
    • webKit.framework(如果项目支持iOS8之前版本需要添加)
  • 修改Embed选项,如果集成的是静态库,选择Do Not Embed。如果集成的是动态库,选择Embed & Sign

Dependence_Com

  • Build Setting中搜索Other Linker Flags, 添加编译标志**-ObjC**。如图所示:

image

SDK接入

<#Config地址#><#AppID#> 请于平台上获取,获取方式参见《如何查询AppID和Config地址?》。如有问题请联系技术支持。

Objective-C

  • 引入头文件:在main.mAppDelegate.m中导入头文件:
#import <BonreeRUM/BonreeRUM.h>
  • main函数或- application:didFinishLaunchingWithOptions:方法中设置Config地址AppID
[BRSAgent setConfigAddress:@"<#Config地址#>"];
[BRSAgent startWithAppID:@"<#AppID#>"];

示例如下:

main.m:

int main(int argc, char * argv[]) {
NSString * appDelegateClassName;
@autoreleasepool {

[BRSAgent setConfigAddress:@"<#Config地址#>"];
[BRSAgent startWithAppID:@"<#AppID#>"];

appDelegateClassName = NSStringFromClass([AppDelegate class]);
}
return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[BRSAgent setConfigAddress:@"<#Config地址#>"];
[BRSAgent startWithAppID:@"<#AppID#>"];

return YES;
}

以上两种接入方式,根据项目实际情况选择一种即可。请勿重复接入。

运行后控制台输出BonreeSDK config succeeded,即表示嵌码成功。如下所示:

2020-12-03 16:17:21.391 [BonreeSDK] [CONFIG]  BonreeSDK Config Succeeded.

注:SDK推荐在main函数中启动,可以完整捕获- application:didFinishLaunchingWithOptions:方法以及内部相关方法在整个启动性能中的耗时情况;否则只能从Agent启动开始捕获,启动之前只有启动的耗时,没有具体方法的耗时详情。

在纯Objective-C项目(无swift文件)中,集成SDK后如果出现以下错误可按下面方式解决:

错误如图: image

解决方案一: 可在项目中新建一个空Swift文件,可解决该报错。

解决方案二: 如果不想新建Swift文件,需要在对应Target->Build Settings->LIBRARY_SEARCH_PATHS中添加下列路径:

$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)
$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)
$(inherited)

image

对应Target->Build Settings->RUNPATH_SEARCH_PATHS中添加下列路径:

$(inherited)
/usr/lib/swift

image

Swift

  • 在对应的桥接⽂件⾥Bridging-Header.h⾥导⼊头⽂件,如图示:

image

  • AppDelegate.swift文件application(_, didFinishLaunchingWithOptions)函数中设置Config地址AppID
BRSAgent.setConfigAddress("<#Config地址#>")
BRSAgent.start(withAppID: "<#AppID#>")

示例如下:

import UIKit
import BonreeRUM

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

BRSAgent.setConfigAddress("<#Config地址#>")
BRSAgent.start(withAppID: "<#AppID#>")

return true
}

}

运行后控制台输出BonreeSDK config succeeded,即表示嵌码成功。如下所示:

2020-12-03 16:17:21.391 [BonreeSDK] [CONFIG]  BonreeSDK Config Succeeded.

Log集成指南

Cocoapods集成

  • 在工程Podfile文件中添加

    pod 'BonreeLog'
  • Podfile文件所在路径执行pod install

手动集成

  • 解压BonreeSDK_TDEM_iOS.tar.gz,解压后可以看到XCFrameworkDynamicXCFrameworkStatic两个目录,XCFrameworkDynamic目录下为动态库,XCFrameworkStatic目录下为静态库。根据您的需求,选择其中一种进行集成即可。

  • BonreeCore.xcframework,BonreeBusiness.xcframework,BonreeLog.xcframework加入到项目中,如图所示:

Add

  • BuildPhass -> Link Binary With Libraries中添加BonreeCore.xcframework,BonreeBusiness.xcframework,BonreeLog.xcframework

  • 修改Embed选项,如果集成的是静态库,选择Do Not Embed。如果集成的是动态库,选择Embed & Sign

Dependence

  • Build Setting中搜索Other Linker Flags, 添加编译标志**-ObjC**。如图所示:

OtherLinker

Log接入

AppIDLogConfig地址请于平台上获取或联系技术支持。

Objective-C

  • 引入头文件:在main.mAppDelegate.m中导入头文件:
#import <BonreeLog/BonreeLog.h>
  • main函数或- application:didFinishLaunchingWithOptions:方法中设置日志远端配置地址:
[BRLogAgent setConfigAddress:@"<#LogConfig地址#>"];
  • 远端配置地址设置完成后,开启日志探针:
//生成自定义配置
BRLogConfiguration *config = [[BRLogConfiguration alloc] init];
config.isTrackingData = YES;//是否上报数据
config.appID = @"<#AppID#>";//应用appID,可在平台查看

[BRLogAgent startWithConfiguration:config];

BRLogConfiguration类参数详细说明可参考日志API说明文档。

示例如下:

main.m:

int main(int argc, char * argv[]) {
NSString * appDelegateClassName;
@autoreleasepool {

[BRLogAgent setConfigAddress:@"<#LogConfig地址#>"];

// 生成自定义配置
BRLogConfiguration *config = [[BRLogConfiguration alloc] init];
config.isTrackingData = YES;
config.appID = @"<#AppID#>";//应用appID,可在平台查看

[BRLogAgent startWithConfiguration:config];

appDelegateClassName = NSStringFromClass([AppDelegate class]);
}
return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[BRLogAgent setConfigAddress:@"<#LogConfig地址#>"];

// 生成自定义配置
BRLogConfiguration *config = [[BRLogConfiguration alloc] init];
config.isTrackingData = YES;
config.appID = @"<#AppID#>";//应用appID,可在平台查看

[BRLogAgent startWithConfiguration:config];

return YES;
}

以上两种接入方式,根据项目实际情况选择一种即可。请勿重复接入。

运行后控制台输出BRLogAgent config succeeded,即表示嵌码成功。如下所示:

2023-04-12 19:48:21.391 [BRLogAgent] [CONFIG]  BonreeSDK Config Succeeded.

Swift

  • 在对应的桥接⽂件Bridging-Header.h⾥导⼊头⽂件,如图示:

Swift-H

  • 引入头文件: 在AppDelegate.swift中导入头文件:
import BonreeLog
  • AppDelegate.swift文件application(_, didFinishLaunchingWithOptions)函数中设置日志远端配置地址:
BRLogAgent.setConfigAddress("<#LogConfig地址#>")
  • 远端配置地址设置完成后,开启日志探针:
//生成自定义配置
let config = BRLogConfiguration()
config.isTrackingData = true //是否上报日志数据
config.appID = "<#AppID#>" //应用appID,可在平台查看

BRLogAgent.start(with: config)

BRLogConfiguration类参数详细说明可参考日志API说明文档。

示例如下:

import UIKit
import BonreeLog

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?) -> Bool {

BRLogAgent.setConfigAddress("<#LogConfig地址#>")

// 生成自定义配置
let config = BRLogConfiguration()
config.isTrackingData = true
config.appID = "<#AppID#>" //应用appID,可在平台查看

BRLogAgent.start(with: config)

return true
}
}

运行后控制台输出BonreeSDK config succeeded,即表示嵌码成功。如下所示:

2023-04-12 19:49:10.121 [BRLogAgent] [CONFIG]  Config Succeeded

Log使用

  • 使用BRLogger类日志输出,允许自定义Logger对象以应对不同业务场景。

Objective-C

  • 引入头文件:
#import <BonreeLog/BonreeLog.h>
  • 自定义配置类BRLoggerBuilder,用于生成个性化日志对象:
//自定义logger配置
BRLoggerBuilder *builder = [[BRLoggerBuilder alloc] init];
builder.levelThreshold = BRLogLevelDebug;//日志级别阈值
builder.loggerName = @"Home Logger";//logger自定义名称
builder.printConsole = YES;//是否在控制台打印
builder.prefix = @"[Bonree]";//日志信息前缀

BRLoggerBuilder类参数详细说明可参考日志API说明文档。

  • 使用上文的配置创建BRLogger对象,并调用日志输出方法:
//生成logger传入配置
BRLogger *logger = [BRLogger loggerWithBuilder:builder];

//日志输出
[logger debug:@"调试日志"];
[logger error:@"错误日志"];

BRLogger支持多种日志级别输出,详细说明可参考日志API说明文档。

示例如下:

- (void)viewDidLoad {
[super viewDidLoad];

// 自定义logger配置
BRLoggerBuilder *builder = [[BRLoggerBuilder alloc] init];
builder.levelThreshold = BRLogLevelDebug; // 日志级别阈值
builder.loggerName = @"Home Logger"; // logger自定义名称
builder.printConsole = YES; // 是否在控制台打印
builder.prefix = @"[Bonree]"; // 日志信息前缀

// 生成logger传入配置
BRLogger *logger = [BRLogger loggerWithBuilder:builder];

// 日志输出
[logger debug:@"调试日志"];
[logger error:@"错误日志"];
}

Swift

  • 引入头文件:
import BonreeLog
  • 自定义配置类BRLoggerBuilder,用于生成个性化日志对象:
//自定义logger配置
let builder = BRLoggerBuilder()
builder.levelThreshold = .debug //日志级别阈值
builder.loggerName = "Home Logger" //logger自定义名称
builder.printConsole = true //是否在控制台打印
builder.prefix = "[Bonree]" //日志信息前缀

BRLoggerBuilder类参数详细说明可参考日志API说明文档。

  • 使用上文的配置创建BRLogger对象,并调用日志输出方法:
//生成logger传入配置
let logger = BRLogger(builder: builder)

//日志输出
logger.debug("调试日志")
logger.error("错误日志")

BRLogger支持多种日志级别输出,详细说明可参考日志API说明文档。

示例如下:

override func viewDidLoad() {
super.viewDidLoad()

// 自定义logger配置
let builder = BRLoggerBuilder()
builder.levelThreshold = .debug // 日志级别阈值
builder.loggerName = "Home Logger" // logger自定义名称
builder.printConsole = true // 是否在控制台打印
builder.prefix = "[Bonree]" // 日志信息前缀

// 生成logger传入配置
let logger = BRLogger(builder: builder)
// 日志输出
logger.debug("调试日志")
logger.error("错误日志")
}