Native
SDK集成指南
Cocoapods集成
-
在工程
Podfile文件中添加pod 'BonreeSDK' -
在
Podfile文件所在路径执行pod install
手动集成
-
解压
BonreeSDK_TDEM_iOS.tar.gz,解压后可以看到XCFrameworkDynamic和XCFrameworkStatic两个目录,XCFrameworkDynamic目录下为动态库,XCFrameworkStatic目录下为静态库。根据您的需求,选择其中一种进行集成即可。 -
将
BonreeCore.xcframework,BonreeBusiness.xcframework,BonreeRUM.xcframework加入到项目中,如图所示:

BonreeCore.xcframework,BonreeBusiness.xcframework若已集成过,则无需重复添加.
-
在BuildPhass -> Link Binary With Libraries中添加
BonreeCore.xcframework,BonreeBusiness.xcframework,BonreeRUM.xcframework -
添加以下依赖库:
- libresolv.tbd(必须引入)
- libc++.tbd(必须引入)
- webKit.framework(如果项目支持iOS8之前版本需要添加)
-
修改Embed选项,如果集成的是静态库,选择
Do Not Embed。如果集成的是动态库,选择Embed & Sign。

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

SDK接入
<#Config地址#> 与 <#AppID#> 请于平台上获取,获取方式参见《如何查询AppID和Config地址?》。如有问题请联系技术支持。
Objective-C
- 引入头文件:在
main.m或AppDelegate.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后如果出现以下错误可按下面方式解决:
错误如图:

解决方案一:
可在项目中新建一个空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)

在对应Target->Build Settings->RUNPATH_SEARCH_PATHS中添加下列路径:
$(inherited)
/usr/lib/swift

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

- 在
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,解压后可以看到XCFrameworkDynamic和XCFrameworkStatic两个目录,XCFrameworkDynamic目录下为动态库,XCFrameworkStatic目录下为静态库。根据您的需求,选择其中一种进行集成即可。 -
将
BonreeCore.xcframework,BonreeBusiness.xcframework,BonreeLog.xcframework加入到项目中,如图所示:

-
在 BuildPhass -> Link Binary With Libraries中添加
BonreeCore.xcframework,BonreeBusiness.xcframework,BonreeLog.xcframework -
修改Embed选项,如果集成的是静态库,选择
Do Not Embed。如果集成的是动态库,选择Embed & Sign。

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

Log接入
AppID与LogConfig地址请于平台上获取或联系技术支持。
Objective-C
- 引入头文件:在
main.m或AppDelegate.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⾥导⼊头⽂件,如图示:

- 引入头文件: 在
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("错误日志")
}