百川码力APP监控是百川提供的移动应用性能检测工具,可以帮助开发者更早的发现用户使用过程中出现的问题,并快速定位、分析、解决问题。
码力现提供的检测为应用崩溃检测、卡顿检测和网络检测。
码力APP监控目前支持iOS 7及以上版本。
可以在podfile中增加如下片段:
source 'http://repo.baichuan-ios.taobao.com/baichuanSDK/AliBCSpecs.git' target 'YourTarget' do pod 'APMPlus', '~> 1.2.3' end
之后执行pod install即可。
配置文件(Baichuan.plist)请登录码力控制台-应用列表获取。
获取方式如图所示:
配置文件需要放置在Main Bundle下。配置文件将为您自动填充APP的AppKey和AppSecret,并包含崩溃监测、网络监测等的设置,设置说明请参见:更多设置2-崩溃检测与卡顿检测、 更多设置3-用户崩溃轨迹、 更多设置4-网络监测、更多设置5-webview监测
配置文件内容如图所示:
需要在Info.plist中加入下列片段以支持HTTP访问。
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
完成SDK集成、配置文件放置以及ATS设置后,码力就可以对您的APP应用进行Crash和网络的基础监测了。
这时,您可以通过APP上报Crash事件或发起网络请求,验证SDK是否集成成功。
Crash测试样例:
@[@0, @1][2];
在触发Crash后,您就可以在码力控制台查看到这个Crash记录了(会有一些延时)。
请注意:
1)不同于其他功能,Crash检测的测验只能在非调试模式下运行。要在非调试模式下测试,首先通过CMD
+R
安装应用到真机或模拟器上,而后通过CMD
+.
中止应用运行,再在真机或模拟器里点击应用图标直接打开应用进行测试。
2)若您集成使用了有崩溃检测能力的其他第三方组件,也可能造成崩溃信息无法上报至码力控制台。如有此情况,请检查您集成的三方组件,关闭相关崩溃监控功能再进行测试,谢谢。
如果您已经成功完成了上述集成步骤,是否发现在控制台异常堆栈的源代码类名称、行号等信息并没有显示。为了能快速并准确地定位用户APP发生Crash的代码位置,您还需要上传符号表文件对APP发生Crash的程序堆栈进行解析和还原。
码力支持通过两种方式上传符号表文件:1)SDK自动上传;2)码力控制台-应用管理页面手动上传。
从操作简易性角度考虑,推荐你通过以下方式实现SDK自动上传:
要实现dSYM的自动上报,需要在应用Build Phase中添加一段脚本,如图示:
脚本内容为:
#!/bin/sh # 配置信息 UPLOAD_SIMULATOR_DSYM=0 # 默认不上传模拟器DSYM UPLOAD_DEBUG_DSYM=0 # 默认不上传调试DSYM APP_KEY="" # 百川AppKey APP_VERSION="" # 自定义版本, 若不填写, 则使用CFBundleShortVersionString if [ ! "$APP_VERSION" ]; then APP_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleShortVersionString' "${INFOPLIST_FILE}") fi # 配置检查 if [ "$EFFECTIVE_PLATFORM_NAME" == "-iphonesimulator" ]; then if [ $UPLOAD_SIMULATOR_DSYM -eq 0 ]; then exit 0 fi fi if [ "$CONFIGURATION" == "Debug" ]; then if [ $UPLOAD_DEBUG_DSYM -eq 0 ]; then exit 0 fi fi if [ ! "$APP_KEY" ]; then echo "APP_KEY为必须项, 请修改脚本中的配置信息." exit 1 fi # 设置检查 if [ "$DEBUG_INFORMATION_FORMAT" != "dwarf-with-dsym" ]; then echo "Build Settings - Build Options - Debug Infomation Format需设置为\"DWARF with dSYM File\"" exit 1 fi # 上传 for file in $(find "$DWARF_DSYM_FOLDER_PATH" -name '*.dSYM'); do pushd "$DWARF_DSYM_FOLDER_PATH" FILENAME="${file##*/}" DSYM_ZIP="${FILENAME// /_}.zip" zip -r "$DSYM_ZIP" "$FILENAME" curl -F appKey="$APP_KEY" -F platform="ios" -F appVersion="$APP_VERSION" -F symbolFile=@"$DSYM_ZIP" 'https://mali.taobao.com/api/SymbolUpload' rm "$DSYM_ZIP" popd done
在添加完脚本后,需要编辑脚本中的APP_KEY
,填入应用对应的AppKey。如果需要自定义应用版本,需同时编辑APP_VERSION
。
默认配置下,脚本只在非模拟器环境、非Debug时上报dSYM,可以调整脚本中的UPLOAD_SIMULATOR_DSYM
和UPLOAD_DEBUG_DSYM
改变此行为。
注:若进行了以上操作的开发者,发现上报的崩溃详情没有符号化,请再次确认配置。在模拟器以及debug环境下,dSYM文件是不上报的。
码力允许通过APMConfig
类设置应用版本、设备标识、用户信息、渠道等,在崩溃日志、网络监测中,会包含这部分信息,辅助定位问题。
/** 应用标识 */ @property (atomic, copy, readonly) NSString *bundleID;
如果Baichuan.plist
设置了BundleIdentifier
,则属性值为BundleIdentifier
键对应的值;否则,属性值为Info.plist中CFBundleIdentifier
键对应的值。
/** 应用版本. */ @property (atomic, copy) NSString *bundleVersion;
如果Baichuan.plist
设置了BundleVersion
,则属性值为BundleVersion
键对应的值;否则,属性值为Info.plist中CFBundleShortVersionString
键对应的值。
/** 渠道标识 */ @property (atomic, copy, nullable, readonly) NSString *channel;
如果Baichuan.plist
设置了Channel
,则属性值为Channel
键对应的值;否则,属性值为nil。
/** 设备标识, 默认nil. */ @property (atomic, copy, nullable) NSString *deviceID;
可以设置deviceID
为设备ID,一般为UDID。
/** 用户标识 */ @property (atomic, copy, nullable) NSString *userID; /** 用户昵称 */ @property (atomic, copy, nullable) NSString *userNick;
可以设置userID
为用户ID,一般为应用用户的ID;可以设置userNick
为用户昵称,一般为应用用户名。
SDK完成集成后,无需任何代码就可以使用崩溃检测和主线程卡顿检测功能,默认的卡顿检测间隔为5秒,即主线程阻塞5秒以上时视为卡顿。
如需进行崩溃或主线程卡顿的配置更改,请打开配置文件Baichuan.Plist进行设置:
配置项 | 值类型 | 默认值 | 描述 |
---|---|---|---|
Enabled | boolean | Yes | 是否开启崩溃检测和主线程卡顿检测功能 |
Debug | boolean | No | 是否开启调试模式,该模式下可以输出日志辅助问题排查 |
DetectsMainThreadBlock | boolean | Yes | 是否开启主线程卡顿检测 |
MainThreadBlockInterval | number | 5 | 设置卡顿检测间隔阀值为x秒。推荐值为5秒,不建议设置太小的间隔以免过度占用CPU资源 |
SDK默认支持在上报崩溃日志的同时,上传用户在崩溃前的操作轨迹。
配置项 | 值类型 | 默认值 | 描述 |
---|---|---|---|
Enabled | boolean | Yes | 是否开启用户崩溃轨迹采集 |
Debug | boolean | No | 是否日志输入轨迹采集 |
NeedsVC | boolean | Yes | 是否支持View Controller的采集 |
SDK完成集成后,无需任何代码就可以使用网络检测功能。
码力支持NSURLConnection、NSURLSession、CFNetwork网络请求的检测,但默认只开启NSURLConnection和NSURLSession的请求检测。如需更改网络请求监测配置,请在配置文件Baichuan.plist中的NetworkSurveyor
进行设置:
配置项 | 值类型 | 默认值 | 描述 |
---|---|---|---|
Enabled | boolean | Yes | 是否开启网络检测功能 |
Debug | boolean | No | 是否开启调试模式,该模式下可以输出日志辅助问题排查 |
NeedsNSURLConnection | boolean | Yes | 是否开启NSURLConnection请求的检测 |
NeedsNSURLSession | boolean | Yes | 是否开启NSURLSession请求的检测 |
NeedsCFNetwork | boolean | No | 是否开启CFNetwork请求的检测 |
针对app中的webview页面进行性能数据的分析和性能情况检测。支持通过plist文件设置慢响应请求的阈值(默认值:3000ms),超过阈值的慢响应请求将会被采集并上报详细日志。
iOS webview性能检测支持UI webview 以及WK webview。
配置项 | 值类型 | 默认值 | 描述 |
---|---|---|---|
Threshold | String | 3000 | 定义慢响应的时间阈值(响应时间),下限为2000ms |
Debug | boolean | No | 是否开启调试模式,该模式下可以输出日志辅助问题排查 |
Enable | boolean | Yes | 是否开启webview性能监控 |
+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:] +[NSURLConnection sendSynchronousRequest:returningResponse:error:] -[NSURLConnection initWithRequest:delegate:startImmediately:] -[NSURLConnection initWithRequest:delegate:] -[NSURLSession dataTaskWithURL:] -[NSURLSession dataTaskWithURL:completionHandler:] -[NSURLSession dataTaskWithRequest:completionHandler:] -[NSURLSession dataTaskWithRequest:] -[NSURLSession downloadTaskWithURL:] -[NSURLSession downloadTaskWithResumeData:] -[NSURLSession downloadTaskWithRequest:] -[NSURLSession downloadTaskWithURL:completionHandler:] -[NSURLSession downloadTaskWithResumeData:completionHandler:] -[NSURLSession downloadTaskWithRequest:completionHandler:] -[NSURLSession uploadTaskWithRequest:fromFile:] -[NSURLSession uploadTaskWithRequest:fromData:] -[NSURLSession uploadTaskWithRequest:fromFile:completionHandler:] -[NSURLSession uploadTaskWithRequest:fromData:completionHandler:] -[NSURLSession uploadTaskWithStreamedRequest:] CFReadStreamCreateForHTTPRequest(...) CFReadStreamCreateForStreamedHTTPRequest(...)