1 接入说明

百川码力APP监控是百川提供的移动应用性能检测工具,可以帮助开发者更早的发现用户使用过程中出现的问题,并快速定位、分析、解决问题。

码力现提供的检测为应用崩溃检测、卡顿检测和网络检测。

2 集成码力

2.1 集成码力SDK( Cocoapods集成)

码力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即可。

2.2 配置文件集成

配置文件(Baichuan.plist)请登录码力控制台-应用列表获取。

获取方式如图所示:

image

配置文件需要放置在Main Bundle下。配置文件将为您自动填充APP的AppKey和AppSecret,并包含崩溃监测、网络监测等的设置,设置说明请参见:更多设置2-崩溃检测与卡顿检测 更多设置3-用户崩溃轨迹 更多设置4-网络监测更多设置5-webview监测

配置文件内容如图所示:
image

2.3 ATS设置

需要在Info.plist中加入下列片段以支持HTTP访问。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

3 SDK集成验证

完成SDK集成、配置文件放置以及ATS设置后,码力就可以对您的APP应用进行Crash和网络的基础监测了。

这时,您可以通过APP上报Crash事件或发起网络请求,验证SDK是否集成成功。

Crash测试样例:

@[@0, @1][2];

在触发Crash后,您就可以在码力控制台查看到这个Crash记录了(会有一些延时)。

请注意:
1)不同于其他功能,Crash检测的测验只能在非调试模式下运行。要在非调试模式下测试,首先通过CMD+R安装应用到真机或模拟器上,而后通过CMD+.中止应用运行,再在真机或模拟器里点击应用图标直接打开应用进行测试。
2)若您集成使用了有崩溃检测能力的其他第三方组件,也可能造成崩溃信息无法上报至码力控制台。如有此情况,请检查您集成的三方组件,关闭相关崩溃监控功能再进行测试,谢谢。

4 上传符号表文件

如果您已经成功完成了上述集成步骤,是否发现在控制台异常堆栈的源代码类名称、行号等信息并没有显示。为了能快速并准确地定位用户APP发生Crash的代码位置,您还需要上传符号表文件对APP发生Crash的程序堆栈进行解析和还原。

码力支持通过两种方式上传符号表文件:1)SDK自动上传;2)码力控制台-应用管理页面手动上传。

从操作简易性角度考虑,推荐你通过以下方式实现SDK自动上传:

要实现dSYM的自动上报,需要在应用Build Phase中添加一段脚本,如图示:
image

脚本内容为:

#!/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_DSYMUPLOAD_DEBUG_DSYM改变此行为。

注:若进行了以上操作的开发者,发现上报的崩溃详情没有符号化,请再次确认配置。在模拟器以及debug环境下,dSYM文件是不上报的。

5 更多设置1-基础信息设置

码力允许通过APMConfig类设置应用版本、设备标识、用户信息、渠道等,在崩溃日志、网络监测中,会包含这部分信息,辅助定位问题。

5.1 自定义应用标识

/** 应用标识 */
@property (atomic, copy, readonly) NSString *bundleID;

如果Baichuan.plist设置了BundleIdentifier,则属性值为BundleIdentifier键对应的值;否则,属性值为Info.plist中CFBundleIdentifier键对应的值。

5.2 自定义应用版本

/** 应用版本. */
@property (atomic, copy) NSString *bundleVersion;

如果Baichuan.plist设置了BundleVersion,则属性值为BundleVersion键对应的值;否则,属性值为Info.plist中CFBundleShortVersionString键对应的值。

5.3 渠道

/** 渠道标识 */
@property (atomic, copy, nullable, readonly) NSString *channel;

如果Baichuan.plist设置了Channel,则属性值为Channel键对应的值;否则,属性值为nil。

5.4 设备信息

/** 设备标识, 默认nil. */
@property (atomic, copy, nullable) NSString *deviceID;

可以设置deviceID为设备ID,一般为UDID。

5.5 用户信息

/** 用户标识 */
@property (atomic, copy, nullable) NSString *userID;
/** 用户昵称 */
@property (atomic, copy, nullable) NSString *userNick;

可以设置userID为用户ID,一般为应用用户的ID;可以设置userNick为用户昵称,一般为应用用户名。

6 更多设置2-崩溃检测与卡顿检测

SDK完成集成后,无需任何代码就可以使用崩溃检测和主线程卡顿检测功能,默认的卡顿检测间隔为5秒,即主线程阻塞5秒以上时视为卡顿。

如需进行崩溃或主线程卡顿的配置更改,请打开配置文件Baichuan.Plist进行设置:
image

CrashReporter-配置项描述

配置项 值类型 默认值 描述
Enabled boolean Yes 是否开启崩溃检测和主线程卡顿检测功能
Debug boolean No 是否开启调试模式,该模式下可以输出日志辅助问题排查
DetectsMainThreadBlock boolean Yes 是否开启主线程卡顿检测
MainThreadBlockInterval number 5 设置卡顿检测间隔阀值为x秒。推荐值为5秒,不建议设置太小的间隔以免过度占用CPU资源

7 更多设置3- 用户崩溃轨迹

SDK默认支持在上报崩溃日志的同时,上传用户在崩溃前的操作轨迹。

image

InterInteractionTracker-配置项描述

配置项 值类型 默认值 描述
Enabled boolean Yes 是否开启用户崩溃轨迹采集
Debug boolean No 是否日志输入轨迹采集
NeedsVC boolean Yes 是否支持View Controller的采集

8 更多设置4- 网络检测

SDK完成集成后,无需任何代码就可以使用网络检测功能。

码力支持NSURLConnection、NSURLSession、CFNetwork网络请求的检测,但默认只开启NSURLConnection和NSURLSession的请求检测。如需更改网络请求监测配置,请在配置文件Baichuan.plist中的NetworkSurveyor进行设置:
image

NetworkSurveyor-配置项描述

配置项 值类型 默认值 描述
Enabled boolean Yes 是否开启网络检测功能
Debug boolean No 是否开启调试模式,该模式下可以输出日志辅助问题排查
NeedsNSURLConnection boolean Yes 是否开启NSURLConnection请求的检测
NeedsNSURLSession boolean Yes 是否开启NSURLSession请求的检测
NeedsCFNetwork boolean No 是否开启CFNetwork请求的检测

9 更多设置5- webview检测

针对app中的webview页面进行性能数据的分析和性能情况检测。支持通过plist文件设置慢响应请求的阈值(默认值:3000ms),超过阈值的慢响应请求将会被采集并上报详细日志。

iOS webview性能检测支持UI webview 以及WK webview。

image

WebViewSurveyor-配置项描述

配置项 值类型 默认值 描述
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(...)

FAQ

关于此文档暂时还没有FAQ
文档标签:
APM
返回
顶部